unity3d 按钮淡入淡出_unity3d 图片淡入淡出 - CSDN
  • Unity初识之淡入淡出切换scene

    千次阅读 2018-03-07 12:52:28
    首先切换scene 使用sceneManager SceneManager.LoadScene("Shop"); 具体的scene的名字,是按照中的...或者黑色变成白色,可以达到淡入淡出的效果.关于Graphics.Blit中的mat参数,Material to use. ...

    首先切换scene 使用sceneManager

    SceneManager.LoadScene("Shop");

    具体的scene的名字,是按照中的scene的索引值来设置的。

    这里写图片描述

    现在需要写一个shader ,来做纹理颜色的处理,将纹理按钮某个值,从白色变到黑色。或者黑色变成白色,可以达到淡入淡出的效果.关于Graphics.Blit中的mat参数,Material to use. Material’s shader could do some post-processing effect, for example. 我理解的是,它通过mat的shader去处理前面赋值的texture.

    Shader "Unlit/Trans_scene_shader"
    
    {
        Properties
        {
            _MainTex ("Texture", 2D) = "white" {}
    
            _Color("Main Color", Color) = (1,1,1,1)
            _ColorRange("color range", Range(0,1)) = 1.0
    
        }
        SubShader
        {
            Pass
            {
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
    
                #include "UnityCG.cginc"
    
                struct appdata
    
                {
                    float4 vertex : POSITION;
    
                    float2 uv : TEXCOORD0;
    
                };
    
                struct v2f
    
                {
                    float2 uv : TEXCOORD0;
    
                    float4 vertex : SV_POSITION;
    
                };
    
                sampler2D _MainTex;
    
                float _ColorRange;
    
                fixed4 _Color ;
    
                v2f vert (appdata v)
    
                {
                    v2f o;
                    o.vertex = UnityObjectToClipPos(v.vertex);
    
                    o.uv = v.uv;
                    return o;
    
                }
    
                fixed4 frag (v2f i) : SV_Target
    
                {
                    // sample the texture
                    fixed4 col = tex2D(_MainTex, i.uv) * _ColorRange;
    
                    return col;
    
                }
                ENDCG
            }
        }
    
        Fallback off
    
    }

    一个c#脚本,绑定在某个想要使用淡入淡出的scene的主摄像机上,

    using System.Collections;
    
    using System.Collections.Generic;
    
    using UnityEngine;
    
    using UnityEngine.Events;
    
    public class shader_transform_scene : MonoBehaviour {
    
        private Material m_transMat;
    
    //淡入淡出时间
        public float transTime = 0.3f ;
    
    //淡入淡出后的回调
        private UnityAction m_transCallBack = null ;
    
        private bool m_isStartChange = false ;
    
    //判断是淡入还是淡出
        private bool m_isDisppear = true;
    
        void Start()
    
        {
    
        }
    
        public void DoChange(UnityAction callback , bool isDisppear , bool isImmidiate) {
    
            if (m_transMat == null) {
    
                m_transMat = new Material(Shader.Find("Unlit/Trans_scene_shader"));
    
                m_transMat.SetFloat("_ColorRange", 0);
    
            }
    
            m_transCallBack = callback ;
    
            m_isDisppear = isDisppear ;
    
            m_isStartChange = true ;
    
            if (m_isDisppear) {
    
                m_transMat.SetFloat("_ColorRange", 0);
    
            }
            else {
    
                m_transMat.SetFloat("_ColorRange", 1);
    
            }
    
            if (isImmidiate) {
    
                m_isStartChange = false ;
    
                m_transMat.SetFloat("_ColorRange", 1);
    
            }
        }
    
        void Update()
    
        {
            if (m_isStartChange) {
    
                changeColor();
            }
        }
    
        private void changeColor() {
    
            float dist = m_isDisppear ? -1 : 1 ;
    
            float count = m_transMat.GetFloat("_ColorRange") - transTime*Time.deltaTime*dist;
    
            m_transMat.SetFloat("_ColorRange", count);
    
            if (m_transMat.GetFloat("_ColorRange") <= 0 && m_isDisppear == false ||
    
                m_transMat.GetFloat("_ColorRange") >=1 && m_isDisppear == true) {
    
                if (m_transCallBack!= null) {
    
                    m_transCallBack.Invoke();
                }
                m_isStartChange = false;
    
            }
        }
    
        //https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnRenderImage.html
        //得到渲染后的屏幕图像
      void OnRenderImage(RenderTexture src, RenderTexture dest) {
    
            if (m_transMat == null) {
    
                return ;
    
            }
            //用Blit来完成对渲染纹理的处理
      //unity 会把当前渲染得到的图像存储在第一个参数的源渲染纹理中,通过函数中的一些列操作,再把目标渲染纹理,即第二个参数对应的渲染纹理显示在屏幕上。
            // Copy the source Render Texture to the destination,
        // applying the material along the way.
              //https://docs.unity3d.com/ScriptReference/Graphics.Blit.html
             // Material to use. Material's shader could do some post-processing effect, for example.
            Graphics.Blit(src, dest , m_transMat);
    
        }
    }

    在scene中使用,
    进入的时候

    private shader_transform_scene m_transScript = null ;
    
        private bool m_isInTransform = false ;
    
        void Start()
    
        {
    
              m_btnHome.onClick.AddListener(()=> handleTouch(m_btnHome));
    
            m_transScript = Camera.main.GetComponent<shader_transform_scene>();
    
            if (m_transScript) {
    
                m_transScript.DoChange(null , true, false);
    
            }
        }

    点击按钮切换

    private void handleTouch(Button btn) {
    
            if (btn == m_btnHome) {
    
                if (m_transScript) {
    
                    m_isInTransform = true ;
    
                    m_transScript.DoChange(transToMain , false, false);
    
                }
    
                SoundsManager.getInstance().playSounds(SoundsManager.clipNameClick);
            }
        }
    
        public void transToMain() {
    
            SceneManager.LoadScene("Menu");
            m_isInTransform = true ;
    
        }

    NOTE:
    这种使用shader的方式,在editor中是ok的,但是如果要导出成其他平台的,比如ios,如果这个shader没有被引用过,是不会被包含在player的build中的。
    解决方式是,可以将其改为引用的方式而不是脚本动态创建,用editor去索引。
    或者,在Edit->project Setting -> graphics ->

    这里写图片描述

    展开全文
  • 一、前言   在游戏中不可避免的要进行场景切换,如果切换的场景要加载的资源太多太大,那么就要耗时很长...然后在场景过渡的时候,加一个淡入淡出的效果,就很nice了。    今天就实现一个场景切换的时候淡入...

    一、前言

      在游戏中不可避免的要进行场景切换,如果切换的场景要加载的资源太多太大,那么就要耗时很长时间,这对于用户的体验来说很不舒服,也就是常说的游戏卡了。怎么解决这种尴尬呢。
      比较推荐的就是异步加载场景,然后中间加一个过渡场景,过渡场景做的美观一些,然后加一个进度条,看起来就不会那么尴尬了。然后在场景过渡的时候,加一个淡入淡出的效果,就很nice了。
       今天就实现一个场景切换的时候淡入淡出的效果。
       剩下的场景异步加载还有中间过渡场景有时间再写。

    先看一下效果
    在这里插入图片描述

    二、参考文章

    【unity3d 用RawImage组件实现场景淡入淡出】https://blog.csdn.net/qq_34593121/article/details/82107113
    【Unity 实现背景图片淡入淡出】https://blog.csdn.net/liuyanlei1990/article/details/72853307
    【Unity 启动画面淡入淡出】https://www.cnblogs.com/wuzhang/p/wuzhang20150524.html
    【浅谈Unity淡入淡出的效果的实现】https://www.cnblogs.com/MoRanQianXiao/p/7691790.html

    三、实现过程

    1、搭建场景

    在这里插入图片描述
    新建一个RawImage

    2、编写脚本

    FadeInOut.cs

    using UnityEngine;
    using UnityEngine.UI;//注意添加RawImage命名空间
    
    public class FadeInOut : MonoBehaviour, IFadeInOut
    {
        [HideInInspector]
        public bool isBlack = false;//不透明状态
        [HideInInspector]
        public float fadeSpeed = 1;//透明度变化速率
        public RawImage rawImage;
        public RectTransform rectTransform;
    
        void Start()
        {
            rectTransform.sizeDelta = new Vector2(Screen.width, Screen.height);//使背景满屏
            rawImage.color = Color.clear;
        }
    
        void Update()
        {
            if (isBlack == false)
            {
                rawImage.color = Color.Lerp(rawImage.color, Color.clear, Time.deltaTime * fadeSpeed * 0.5f);//渐亮
                //之所以这么写主要是因为Lerp函数的原因,具体详解可以看这篇文章
                //【Unity中Lerp的用法】https://blog.csdn.net/MonoBehaviour/article/details/79085547
                if (rawImage.color.a < 0.1f)
                {
                    rawImage.color = Color.clear;
                }
            }
            else if (isBlack)
            {
                rawImage.color = Color.Lerp(rawImage.color, Color.black, Time.deltaTime * fadeSpeed);//渐暗
                if (rawImage.color.a > 0.9f)
                {
                    rawImage.color = Color.black;
                }
            }
        }
    
        //切换状态
        public void BackGroundControl(bool b)
        {
            if (b == true)
                isBlack = true;
            else
                isBlack = false;
        }
    }
    

    把这个脚本挂载到场景中任意物体上
    在这里插入图片描述
    然后新建一个测试脚本test.cs

    using UnityEngine;
    
    public class test : MonoBehaviour
    {
        public FadeInOut m_Fade;
    
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.A))
            {
                m_Fade.BackGroundControl(true);
            }
            else if (Input.GetKeyDown(KeyCode.D))
            {
                m_Fade.BackGroundControl(false);
            }
        }
    }
    
    

    也挂载到任意物体上
    在这里插入图片描述

    展开全文
  • Unity3D常见面试题

    万次阅读 多人点赞 2017-08-11 20:20:00
    Unity3D常见面试题

    Unity3D常见面试题

    目录

    C#问题 4

    1.在类的构造函数前加上static会报什么错?为什么? 4

    2.C# StringBuilder类型比string类型的优势是什么? 4

    3.C# 函数Func(string a, string b)Lambda表达式怎么写? 4

    4.数列1,1,2,3,5,8,13...n位数是多少?C#递归算法实现 4

    5. 请简述值类型与引用类型的区别 4

    6. 请简述ArrayListList<>的主要区别 5

    7. 请简述GC(垃圾回收)产生的原因,并描述如何避免? 5

    8. 请描述Interface与抽象类之间的不同 5

    9.下列代码在运行中会产生几个临时对象? 5

    10.下列代码在运行中会发生什么问题?如何避免? 6

    11.请简述关键字Sealed用在类声明和函数声明时的作用 6

    12.请简述privatepublicprotectedinternal的区别 6

    13.反射的实现原理? 6

    14.NetMono的关系? 6

    15.请说出4种面向对象的设计原则,并分别简述它们的含义。 7

    16. Hashtable是无序的吗? 7

    Unity问题 7

    UI 7

    1.NGUI Button怎样接受用户点击并调用函数,具体方法名称是什么? 7

    2.请简述NGUIPanelAnchor的作用 7

    3.为何大家都在移动设备上寻求U3D原生GUI的替代方案 8

    4.使用原生GUI创建一个可以拖动的窗口命令是什么? 8

    5.使用Unity3d实现2d游戏,有几种方式? 8

    碰撞 8

    6.怎么判断两个平面是否相交?不能用碰撞体,说出计算方法 8

    7.MeshCollider和其他Collider的一个主要不同点? 8

    8.Unity3d中的碰撞器和触发器的区别? 8

    9.物体发生碰撞的必要条件 9

    10.当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免? 9

    动画 10

    11.一个简单的游戏,怪物会走动\攻击\死亡,游戏角色会走动,跳跃\攻击\格挡\死亡,还会接受玩家从输入端输入的指令,NPC会走动,他们彼此之间可以互相通信.请画出以上三种角色的UML图示. 10

    12.请描述游戏动画有哪几种,以及其原理? 10

    13.反向旋转动画的方法是什么? 10

    14.写出Animation的五个方法 11

    15.动画层(AnimationState Layers)的作用是什么? 11

    16.Itween插件的作用是什么,Itween作用于世界坐标还是局部坐标,请列举出3个其常用方法? 11

    17.法线贴图 CG动画  11

    线程和协程 11

    18.Unity3D是否支持写成多线程程序?如果支持的话需要注意什么? 11

    19.Unity3D的协程和C#线程之间的区别是什么? 12

    20.什么是协同程序? 12

    四元数 12

    21.四元数是什么?主要作用什么?对欧拉角的优点是什么? 12

    摄像机 12

    22.在场景中放置多个Camera并同时处于活动状态会发生什么? 12

    23.Unity摄像机有几种工作方式,分别是什么? 13

    预制物 13

    24.Prefab的作用?如何在移动环境的设备下恰当地使用它? 13

    unity 当需要频繁创建一个物体对象时,怎样减少内存 13

    Shader 13

    25.出光照计算中的diffuse的计算公式 13

    26.MeshRendermaterialshader的区别? 13

    27.alpha blend工作原理 14

    28.光照贴图 的优势是什么? 14

    29.Vertex Shader是什么,怎么计算? 14

    系统函数 14

    物理更新一般在哪个系统函数里? 14

    30.OnEnableAwakeStart运行时的发生顺序?哪些可能在同一个对象周期中反复的发生? 15

    31.Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。 15

    32.物理更新一般放在哪个系统函数里? 15

    33.移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中? 15

    34.请简述OnBecameVisibleOnBecameInvisible的发生时机,以及这一对回调函数的意义? 15

    35.Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),请列出保存和读取整形数据的函数 15

    36.动态加载资源的方式?区别是什么? 16

    37.以下哪个函数在游戏进入新场景后会被马上调用? 16

    38.如何销毁一个UnityEngine.Object及其子类 16

    39.获取、增加、删除组件的命令分别是什么? 16

    40.Application.loadLevel命令是什么? 16

    41.调试记录到控制台的命令是什么? 16

    42.LayerMask.NameToLayer()这个方法有什么作用? 16

    43.localPositionPosition的使用区别? 17

    44.物体自身旋转使用的函数? 17

    45.物体围绕某点旋转使用的函数? 17

    46.U3D中用于记录节点空间几何信息的组件名称,及其父类名称 17

    47.写一个计时器工具,从整点开始计时,格式为:00:00:00 17

    物理引擎 18

    48.<愤怒的小鸟>给予初速度以后,怎么让小鸟受到重力和空气阻力的影响而绘制抛物线轨迹,说出具体的计算方法. 18

    49.实现吊机吊物体的功能 18

    50.上机题:用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放(用一个Cube即可) 22

    51.MaterialPhysic Material区别? 24

    52.CharacterControllerRigidbody的区别? 24

    53.Unity3d的物理引擎中,有几种施加力的方式,分别描述出来 24

    54.什么叫做链条关节? 24

    55.什么是导航网格( NavMesh)? 24

    56.Unity3d提供了几种光源类型,分别是哪几种? 25

    Unity引擎问题 25

    57.简述Unity3D支持的作为脚本的语言的名称 25

    58.向量的点乘、叉乘以及归一化的意义? 25

    59.矩阵相乘的意义及注意点? 25

    60.为什么dynamic fontunicode环境下优于static font 25

    61.Render的作用?描述MeshRenderSkinnedMeshRender的关系与不同 26

    62.简述SkinnedMesh的实现原理 26

    63.为什么Unity3D中会发生在组件上出现数据丢失的情况? 26

    64.如何安全的在不同工程间安全地迁移asset数据?三种方法 26

    65.Lod是什么,优缺点是什么? 26

    66.两种阴影判断的方法、工作原理。 26

    67.MipMap是什么,作用? 27

    68.用代码实现第三角色控制器 27

    69.Mecanim系统中,Body Mask的作用是? 27

    70.Unity连接数据库 27

    71.如何优化内存? 27

    72.你用过哪些插件? 27

    在哪个模块下可以修改Render Path? 28

    图形图像 28

    1.什么是渲染管道? 28

    2.什么是矢量图  29

    3.什么是矩阵?矩阵运算? 29

    4.角度和弧度的转换 29

    5.矢量标量 29

     

    C#问题

    1.在类的构造函数前加上static会报什么错?为什么?

    答:在构造函数如果有public修饰的静态构造函数时会报:“静态构造函数中不允许出现访问修饰符”,如果什么修饰符都不加的话不会报错,静态构造函数一般是起初始化作用。

    2.C# StringBuilder类型比string类型的优势是什么?

    答:StringBuilde的优势在于拼接,string的优势在于对字符串做一些处理,在使用过程中看具体的需求。

    3.C# 函数Func(string a, string b)Lambda表达式怎么写?

    答:(a,b)=>{}

    4.数列1,1,2,3,5,8,13...n位数是多少?C#递归算法实现

    答:

    5. 请简述值类型与引用类型的区别

    答:区别:
        1.值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的是堆中  

    存放的地址。
        2.值类型存取快,引用类型存取慢。
        3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针和引用。
        4.栈的内存是自动释放的,堆内存是.NET中会由GC来自动释放。
        5.值类型继承自System.ValueType,引用类型继承自System.Object

    6. 请简述ArrayListList<>的主要区别

    答:ArrayList是非泛型列表,存储数据时把所有的数据都当成object类型存储,存在装箱问题,取出来使用的时候存在拆箱问题,装箱拆箱会使性能变差,而且存在数据安全问题,但是优点在于可以让值类型和引用类型互相转换。

    List是泛型列表,在使用的时候才去定义数据类型,泛型避免了拆箱装箱的问题,存入读取速度较快,类型也更安全。

    7. 请简述GC(垃圾回收)产生的原因,并描述如何避免?

    答:GC回收堆上的内存
        避免:1)减少new产生对象的次数
              2)使用公用的对象(静态成员)
              3如果字符串拼接多的将String换为StringBuilder

    8. 请描述Interface与抽象类之间的不同

    答:语法不同处:1.抽象类中可以有字段,接口没有。

    2.抽象类中可以有实现成员,接口只能包含抽象成员。

    3.抽象类中所有成员修饰符都可以使用,接口中所有的成员都是对外的,所以不需要修饰符修饰。

    用法不同处:1.抽象类是概念的抽象,接口关注于行为。

               2.抽象类的子类与父类的关系是泛化关系,耦合度较高,而实现类和接口之间是实现的关系,耦合度比泛化低。

               3.一个类只能继承一个类,但是可以实现多个接口。

    9.下列代码在运行中会产生几个临时对象?

    string a = new string("abc");
    a = (a.ToUpper() + "123").Substring(0, 2);   

    答:第一行是会出错的。应该这样初始化:

    string b = new string(new char[]{'a','b','c'});

    3个临时对象

    10.下列代码在运行中会发生什么问题?如何避免?

    List<int> ls = new List<int>(new int[] { 1, 2, 3, 4, 5 });

     foreach (int item in ls)

     {

     Console.WriteLine(item * item);

            ls.Remove(item);

     }   

    答:会产生运行时错误,因为foreach是只读的。不能一边遍历一边修改。

    使用foreach时候不要对内容进行修改,如果要修改可以使用for

    11.请简述关键字Sealed用在类声明和函数声明时的作用

    答:Sealed访问修饰符用于类时,该类是密封类,可防止其他类继承此类。

    在方法中使用时则可防止派生类重写此方法。

    12.请简述privatepublicprotectedinternal的区别

    答:public:对任何类和成员都公开,无限制访问
        private:仅对该类公开
        protected:对该类和其派生类公开
        internal:只能在包含该类的程序集中访问该类
        protected internalprotected + internal

    13.反射的实现原理?

    答:审查元数据并收集关于它的类型信息的能力。

    14.NetMono的关系?

    答:mono.net的一个开源跨平台工具。.net只能在windows下运行,mono可以实现跨平台,可以运行于linuxUnixMac OS等。

    15.请说出4种面向对象的设计原则,并分别简述它们的含义。 

    答:1 单一职责原则:一个类,最好只做一件事,只有一个引起它的变化

    2 开放-封闭原则:对于扩展是开放的,对于更改是封闭的 

    3) 里氏替换原则:子类必须能够替换其基类 

    4 依赖倒置原则:依赖于抽象 

    5 接口隔离原则 :使用多个小的专门的接口,而不要使用一个大的总接口。

    16. Hashtable是无序的吗?

    答:电脑没有绝对的无序,hashtable是通过哈希码让开发者感觉无序。

     

     

     

     

    Unity问题

    UI

    1.NGUI Button怎样接受用户点击并调用函数,具体方法名称是什么

    答:1.直接监听事件:在按钮上绑定一个带有OnClick脚本,但这种方法不太好用,也不灵活。

        2.ButtonScript:在按钮上添加BoxCollider,在添加ButtonScript脚本,把要调用的方法放到场景中一个物体上,一般放在摄像机上,因为摄像机一直存在,然后把这个方法添加到ButtonScript脚本里写好的委托里面,所以可以添加多个方法,一旦点击就触发事件。

    2.请简述NGUIPanelAnchor的作用 

    答:Panel是一个容器,它将包含所有UI小部件,并负责将所包含的部件组合优化,以减少绘制命令的调用。  

     AnchorNGUI屏幕分辨率的自适应性,来适应不同的分辨率的屏幕显示。

    3.为何大家都在移动设备上寻求U3D原生GUI的替代方案

    答:1.不美观

    2.OnGUI很耗费时间

    3.使用不方便 

    4. drawcall很高

    4.使用原生GUI创建一个可以拖动的窗口命令是什么? 

    答:GUI.DragWindow()

    5.使用Unity3d实现2d游戏,有几种方式?

    答:1.使用本身的GUI

    2.把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑z

    3.使用2d插件,如:2DToolKit

    碰撞

    6.怎么判断两个平面是否相交?不能用碰撞体,说出计算方法

    答:在两个平面上分别取一个向量,然后看是否相交

    7.MeshCollider和其他Collider的一个主要不同点?

    答:MeshCollider是网格碰撞器,对于复杂网状模型上的碰撞检测,比其他的碰撞检测精确的多,但是相对其他的碰撞检测计算也增多了,所以一般使用网格碰撞也不会在面数比较高的模型上添加,而会做出两个模型,一个超简模能表示物体的形状用于做碰撞检测,一个用于显示。

    8.Unity3d中的碰撞器和触发器的区别?

    答:1.碰撞器物体不能互相进入到对方内部,触发器可以

    2.触发器角色控制器可以使用,碰撞器中不能使用

    3.触发器没有物理属性了,碰撞器可以有力存在

    4.碰撞器调用OnCollisionEnter/Stay/Exit函数,触发器调用OnTriggerEnter/Stay/Exit函数

    9.物体发生碰撞的必要条件

    答:两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。

     

    CharacterController和Rigidbody的区别?

    CharacterController自带胶囊碰撞器,里面包含有刚体的属性;

    Rigidbody就是刚体,使物体带有刚体的特征。

     

    10.当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?

    答:穿透(碰撞检测失败)

    避免的方法:把刚体的实时碰撞检测打开Collision Detection修改为Continuous Dynamic

     

    unity3d中物体发生碰撞的整个过程中,有几个阶段,分别列出对应的阶段函数

    主要是三个阶段:1.Collider.OnCollisionEnter 进入碰撞,
    OnCollisionEnter is called when this collider/rigidbody has begun touching 
    another rigidbody/collider.

    collider/rigidbody开始触动另一个rigidbody/colliderOnCollisionEnter被调用。
    2.Collider.OnCollisionStay 逗留碰撞,
    OnCollisionStay is called once per frame for every collider/rigidbody that is 
    touching rigidbody/collider.

    每个collider/rigidbody触动rigidbody/collider,将在每帧调用OnCollisionStay。通俗的说,

    一个碰撞器或刚体触动另一个刚体或碰撞器,在每帧都会调用OnCollisionStay,直到它们之间离开不接触。
    3.Collider.OnCollisionExit 退出碰撞,
    OnCollisionExit is called when this collider/rigidbody has stopped touching 
    another rigidbody/collider.

    当 collider/rigidbody停止触动另一个 rigidbody/collider时,OnCollisionExit被调用。

     

     

    动画

    11.一个简单的游戏,怪物会走动\攻击\死亡,游戏角色会走动,跳跃\攻击\格挡\死亡,还会接受玩家从输入端输入的指令,NPC会走动,他们彼此之间可以互相通信.请画出以上三种角色的UML图示.

    答:

     

    12.请描述游戏动画有哪几种,以及其原理? 

    答:主要有关节动画、单一网格模型动画(关键帧动画)、骨骼动画。 

    1.关节动画:把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活,Quake2中使用这种动画。 

    2.单一网格模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。   

    3.骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,有关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观,皮肤网格每一个顶点都会受到骨骼的影响,从而实现完美的动画。

    13.反向旋转动画的方法是什么?

    答:  反转动画,将动画的速度调到-1

    14.写出Animation的五个方法  

    答:AddClip 添加剪辑、Blend 混合、Play 播放、Stop 停止、Sample 采样 CrossFade淡入淡出切换动画、IsPlaying是否正在播放某个动画 

    15.动画层(AnimationState Layers)的作用是什么? 

    答:动画层作为一个具有层级动画编辑概念的工具,可以用来制作和处理任何类型的动画

    16.Itween插件的作用是什么,Itween作用于世界坐标还是局部坐标,请列举出3个其常用方法? 

    答:ITween是补间动画的一个插件,主要作用就是给出开始、结束的值、时间,此插件实现各种动画,晃动,旋转,移动,褪色,上色,音量控制等等。

     方法:1.MoveTo  物体移动 

    2.ColorTo:随着时间改变对象的颜色组

     3.LookTo:随时间旋转物体让其脸部朝向所提供的Vector3Transform位置  

    17.法线贴图 CG动画 

    答:法线贴图:是一种特殊的纹理,可以应用在3D表面,让低模呈现出更明显的凹凸效果。一般应用在CG动画、美术效果要求较高的单机游戏

    CG动画:游戏中的CG动画其实是用3D模拟引擎制作的游戏短片,一般画面效果比较真实。

    线程和协程

    18.Unity3D是否支持写成多线程程序?如果支持的话需要注意什么?

    答:Unity支持多线程,如果同时要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine

    注意:1.虽然支持多线程,但是仅能从主线程中访问Unity3D的组件,对象和Unity3D系统调用,所以如果使用的话需要把组件中的数值传到开启的新线程中。
    2.C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象

    19.Unity3D的协程和C#线程之间的区别是什么?

    答:多线程程序同时运行多个线程,除主线程之外的线程无法访问Unity3D的对象、组件、方法,而在任一指定时刻只有一个协程在运行。

    20.什么是协同程序?

    答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。

    四元数

    21.四元数是什么?主要作用什么?对欧拉角的优点是什么? 

    答:所谓四元数,就是把4个实数组合起来的东西。4个元素中,一个是实部,其余3个是虚部

    作用:四元数用于表示旋转
    优点:
    1)能进行增量旋转
    2)避免万向锁
    3)给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)

    四元数不会有欧拉角存在的 gimbal lock 问题[万向节死锁

    四元数由4个数组成,旋转矩阵需要9个数

    两个四元数之间更容易插值 

    四元数、矩阵在多次运算后会积攒误差,需要分别对其做规范化(normalize)和正交化 (orthogonalize),对四元数规范化更容易 

    与旋转矩阵类似,两个四元组相乘可表示两次旋转

    摄像机

    22.在场景中放置多个Camera并同时处于活动状态会发生什么?

    答:游戏界面可以看到很多摄像机的混合

    23.Unity摄像机有几种工作方式,分别是什么?  

    答:正交和透视

    正交无法看到一个物体距离自己有多远,或者远近的变化,物体也不会随着距离而收缩,所以一般做2D游戏或者是UI时会使用正交摄像机。

    透视一般看物体会随着距离有大小的变化,一般3D游戏里经常使用这种摄像机。

    预制物

    24.Prefab的作用?如何在移动环境的设备下恰当地使用它?

    答:Prefab是预制物,一般当游戏中需要频繁创建一个物体时,使用预制物可以节省内存,方便创建,方便对游戏物体进行操作,方便对属性进行修改。

     

    unity 当需要频繁创建一个物体对象时,怎样减少内存

    :动态加载再实例化,如果自己不主动清理内存的话,再次加载不会增加内存的,会自动去取之前已经加载好的assets,如果这一个assets你都嫌多的话,那你只能减资源了,比如,模型面数,纹理尺寸等

    Shader

    25.出光照计算中的diffuse的计算公式 

    答:实际光照强度l=环境光(lambient+漫反射光(Idiffuse+镜面高光(lspecular

        环境光:lambient=环境光强度(Aintensity*环境光颜色(Acolor

        漫反射光:ldiffuse=镜面光照强度(Dintensity*镜面光颜色(Scolor*(光的反射向量(R.观察者向量(V))^镜面光指数(n

    26.MeshRendermaterialshader的区别?

    答:MeshRender是模型渲染的组件,有此组件物体才能显示出来

    Material是材质球,实际就是shader的实例,并进行赋值,贴图、纹理、颜色等。

    Shader是着色器,实际上是一段程序,还可以用来实现一些仅靠贴图不容易实现的效果,如玻璃。

    Shader大致分为:1.表面着色器

    2.顶点和片元着色器

    3.固定功能着色器

    27.alpha blend工作原理 

    答:Alpha Blend 实现透明效果,Color = 原颜色*alpha/255+目标色*255-alpha/255

    28.光照贴图 的优势是什么?

    答:1.使用光照贴图比使用实时光源渲染要快

    2.可以降低游戏内存消耗 

    3.多个物体可以使用同一张光照贴图  

    29.Vertex Shader是什么,怎么计算? 

    答:顶点着色器:顶点着色器是一段执行在GPU上的程序,用来取代fixed pipeline中的

    transformationlightingVertex Shader主要操作顶点。 

    Vertex Shader对输入顶点完成了从local spacehomogeneous space(齐次空间)的变换过程,homogeneous spaceprojection space的下一个space。在这其间共有world transformation, view transformationprojection transformationlighting几个过程。  

    .unity3d提供了几种光源,分别是什么

     答:4种,Directionl light ,Point Light ,Spot Light,Area Light

     

    Unity系统API

     

    物理更新一般在哪个系统函数里?

     答:FixedUpdate每固定帧绘制时执行一次,和update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。

     

     

    30.OnEnableAwakeStart运行时的发生顺序?哪些可能在同一个对象周期中反复的发生?

    答:Awake –>OnEnable->Start
        OnEnable在同一周期中可以反复地发生

    31.Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。

    答:Awake——>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>Reset——>OnDisable——>OnDestroy

    32.物理更新一般放在哪个系统函数里?

    答:FixedUpdate因为不受到计算机帧频的影响,所以比较适合于做物理方面的更新。

    33.移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中?

    答:LateUpdate,在每帧执行完毕调用,它是在所有Update结束后才调,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有Update操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。

    34.请简述OnBecameVisibleOnBecameInvisible的发生时机,以及这一对回调函数的意义?

    答:当物体是否可见切换之时。可以用于只需要在物体可见时才进行的计算。

         renderer(渲染器)在任何相机上都不可见时调用:OnBecameInvisible renderer(渲染器)在任何相机上可见时调用:OnBecameVisible  

    35.Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),请列出保存和读取整形数据的函数

    答:PlayerPrefs.SetInt()

    PlayerPrefs.GetInt()

    36.动态加载资源的方式?区别是什么?

    答:1.Resources.Load();

    2.AssetBundle

    区别:

    Resources是动态内部调用,Resources在编辑环境下是project窗口的一个文件夹,调用里面的资源,可以用Resources类,比如Resources.Load,打包后这个文件夹是不存在的,会统一生成assets资源,AssetBundle 是外部调用,要用AssetBundle 首先要先把资源打包为.assetbundle文件,再动态的去加载这个文件,本地或者网络服务器都可以。
    简单说,Resources资源的加载是动态加载内部的,AssetBundle 是动态加载外部的

    37.以下哪个函数在游戏进入新场景后会被马上调用? 

    答:MonoBehaviour.OnLevelWasLoaded  

    38.如何销毁一个UnityEngine.Object及其子类对象

    答:Destory

    39.获取、增加、删除组件的命令分别是什么? 

    答:获取:GetComponent 

    增加:AddComponent 

    没有删除组件只有让组件不生效:enable

    40.Application.loadLevel命令是什么?

    答:加载关卡 

    41.调试记录到控制台的命令是什么?

    答: Debug.Log();  

    42.LayerMask.NameToLayer()这个方法有什么作用? 

    答:层索引

    43.localPositionPosition的使用区别? 

    答:localPosition:自身位置,相对于父级的变换的位置,局部坐标其实就是自身的坐标,会随着物体的旋转而变化的。 

     Position:在世界坐标transform的位置,世界坐标是不会变的,一直以世界坐标轴的XYZ为标准。

    44.物体自身旋转使用的函数?

    答:Transform.Rotate()

    45.物体围绕某点旋转使用的函数?

    答:Transform.RotateAround()

    46.U3D中用于记录节点空间几何信息的组件名称,及其父类名称

    答:Transform 父类是 Component

    47.写一个计时器工具,从整点开始计时,格式为:00:00:00  

    答:

    int scend

    int minte

    int hour

    void Start()

    {

    scend=0

    minte=0

    hour=0

    }

    void Update()

    {

    Ifscend<60

    {

    Scend+=time.deltime;

    }

    Else

    {

    Scend-=60;

    Minte+=1;

    }

    If(minte>=60)

    {

      Minte-=60;

      Hour+=1;

    }

    }

    物理引擎

    48.<愤怒的小鸟>给予初速度以后,怎么让小鸟受到重力和空气阻力的影响而绘制抛物线轨迹,说出具体的计算方法.

    答:添加刚体使小鸟模拟受到重力影响。

    49.实现吊机吊物体的功能  

    1. 答:using UnityEngine;  
    2. using System.Collections;  
    3. public class QizhongjiCS : MonoBehaviour {  
    4.     private float dianX = 0;  
    5.     public GameObject hook;  
    6.     private float yuandianX;  
    7.     private Vector3 hookV;  
    8.     private int flag=0;  
    9.     private delegate void HookMove();  
    10.     private  HookMove _hookMove=null;  
    11.     private int speed=3;  
    12.     public HookZhongWu hzw;  
    13.     private int zwFlag=0;  
    14.     private GameObject zhongwu;                 //抓住的重物;  
    15.     public GameObject shengzi;  
    16.     public GameObject heng;  
    17.     // Use this for initialization  
    18.     void Start () {  
    19.         hookV = hook.transform.localPosition;  
    20.         yuandianX = hookV.x;  
    21.     }  
    22.     // Update is called once per frame  
    23.     void Update () {  
    24.         if (flag == 0) {  
    25.             if (Input.GetMouseButtonDown(0))  
    26.             {  
    27.                 dianX = Input.mousePosition.x;  
    28.             }  
    29.             else if (Input.GetMouseButton(0))  
    30.             {  
    31.                 float dx = Input.mousePosition.x - dianX;  
    32.                 if (Mathf.Abs(dx) > 0.1f)  
    33.                 {  
    34.   
    35.                     hookV.x = yuandianX + dx / 32;  
    36.                     if (hookV.x > -6 && hookV.x < 6)  
    37.                     {  
    38.                         hook.transform.localPosition = hookV;  
    39.                     }  
    40.   
    41.                 }  
    42.             }  
    43.             else if (Input.GetMouseButtonUp(0))  
    44.             {  
    45.                 //yuandianX = hookV.x;  
    46.                 flag = 1;  
    47.                 _hookMove = hookDown;  
    48.                 StartCoroutine(downZhua());  
    49.             }   
    50.         }  
    51.     }  
    52.     IEnumerator downZhua() {  
    53.         yield return new WaitForSeconds(0.01f);  
    54.         //1、向下移动, +speed  
    55.         //2、判断移动的位置 如果大于某个位置 ,返回 speed为负  
    56.         if (_hookMove != null)  
    57.         {  
    58.             _hookMove();  
    59.             yield return StartCoroutine(downZhua());  
    60.         }  
    61.         else {  
    62.             yield return null;  
    63.         }  
    64.         //3、判断移动回到原点    整个钩子向原始位置水平运动  
    65.         //4、判断钩子回到原点   停止协程  flag=0  
    66.         yield return StartCoroutine(downZhua());  
    67.     }  
    68.     void hookDown() {  
    69.         hook.transform.Translate(Vector3.down * Time.deltaTime * speed);         changeShengZi();  
    70.         if (hook.transform.localPosition.y < -2) {  
    71.             if (zwFlag == 1) {  
    72.                 zhongwu.transform.parent = null;  
    73.                 zhongwu = null;  
    74.                 zwFlag = 0;  
    75.             }  
    76.             _hookMove = hookUp;  
    77.         }  
    78.     }  
    79.     void hookUp()  
    80.     {  
    81.         hook.transform.Translate(Vector3.up * Time.deltaTime * speed);  
    82.         changeShengZi();  
    83.         if (hook.transform.localPosition.y >3.2)  
    84.         {  
    85.                 _hookMove = HMove;  
    86.         }  
    87.     }  
    88.     void HMove()  
    89.     {  
    90.         hook.transform.Translate(Vector3.left * Time.deltaTime * speed);
    91.         if (hook.transform.localPosition.x <=-4.5)  
    92.         {  
    93.             if (zwFlag == 0)  
    94.             {  
    95.                 flag = 0;  
    96.                 _hookMove = null;  
    97.             }  
    98.             else {  
    99.                 _hookMove = hookDown;  
    100.             }  
    101.         }  
    102.     }  
    103.     public void zhuaZhongWu(GameObject zhongwu) {  
    104.         _hookMove = hookUp;  
    105.         zwFlag = 1;  
    106.         this.zhongwu = zhongwu;  
    107.     }  
    108.     void changeShengZi() {  
    109.         Vector3 hookPosition = hook.transform.position;  
    110.         Vector3 hengliangP = heng.transform.position;  
    111.         float dy = hookPosition.y - hengliangP.y;  
    112.         Vector3 shengziP = shengzi.transform.position;  
    113.         shengziP.y = hengliangP.y + dy / 2;  
    114.         shengzi.transform.position = shengziP;  
    115.         //改变 绳子长度  
    116.         Vector3 shengziSclae = shengzi.transform.localScale;  
    117.         shengziSclae.y = dy/2;  
    118.         shengzi.transform.localScale = shengziSclae;  
    119.     }  
    120. }  

    HookZhongWu.cs用来判断 钩子是否和重物碰撞

    碰上的时候 将重物设置成钩子的子对象  就可以实现带着往上升的效果了

    1. public class HookZhongWu : MonoBehaviour {  
    2.     public QizhongjiCS qzj;  
    3.     void OnTriggerEnter(Collider collision)  
    4.     {//当碰撞时  
    5.         print("OnTriggertEnter+" + collision.gameObject.name);  
    6.         if (collision.gameObject.name == "zhongwu") {  
    7.             collision.gameObject.transform.parent = this.gameObject.transform;  
    8.             Vector3 v = collision.gameObject.transform.localPosition;  
    9.             v.y = -1.2f;  
    10.             collision.gameObject.transform.localPosition = v;  
    11.             qzj.zhuaZhongWu(collision.gameObject);  
    12.         }  
    13.     }  
    14. }  

     

    50.上机题:用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放(用一个Cube即可)  

    答:在场景中添加一个PlanCameraDirectional LightCube。添加两个脚本scrollerScirpt(挂在Camera),CubeDragScript(挂在Cube上)。

    1.鼠标滚轮实现缩放:将摄像机的镜头拉近或者拉远,调整摄像机的视角就可以实现,主要实现代码如下:

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    void Update () {
        //鼠标滚轮的效果
      //Camera.main.fieldOfView 摄像机的视野
      //Camera.main.orthographicSize 摄像机的正交投影
      //Zoom out
       if (Input.GetAxis("Mouse ScrollWheel") < 0)
        {
        if (Camera.main.fieldOfView <= 100) 
        Camera.main.fieldOfView += 2;
       if (Camera.main.orthographicSize <= 20)
          Camera.main.orthographicSize += 0.5F; }
            //Zoom in
        if (Input.GetAxis("Mouse ScrollWheel") > 0)
         {
          if (Camera.main.fieldOfView > 2)
            Camera.main.fieldOfView -= 2;
          if (Camera.main.orthographicSize >= 1)
             Camera.main.orthographicSize -= 0.5F;
            }}

      2.鼠标实现在场景中拖动物体:

      解决思路就是将世界坐标转换成屏幕坐标,然后计算物体与鼠标之间移动量,循环鼠标被按下操作,得到鼠标的当前位置,加上计算好的移动量,将新的坐标赋值给物理就行了。主要是开启一个协同程序(Corountine)来处理

       主要代码如下:

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    // Use this for initialization

        void Start ()

        {

            StartCoroutine(OnMouseDown());

        }

     

        IEnumerator OnMouseDown()

        {

            //将物体由世界坐标系转换为屏幕坐标系

            Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position);//三维物体坐标转屏幕坐标

            //完成两个步骤 1.由于鼠标的坐标系是2维,需要转换成3维的世界坐标系  

            //    //             2.只有3维坐标情况下才能来计算鼠标位置与物理的距离,offset即是距离

            //将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离

            Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z));

            while (Input.GetMouseButton(0))

            {

                //得到现在鼠标的2维坐标系位置

                Vector3 curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z);

                //将当前鼠标的2维位置转换成3维位置,再加上鼠标的移动量

                Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset;

                //curPosition就是物体应该的移动向量赋给transform的position属性

                transform.position = curPosition;

                yield return new WaitForFixedUpdate(); //这个很重要,循环执行

            }

        }

     

    51.MaterialPhysic Material区别?

    答:PhysicMaterial 物理材质:主要是控制物体的摩擦,弹力等物理属性。 

    Material材质:主要是控制一个物体的颜色,质感等显示。

    52.CharacterControllerRigidbody的区别?

    答:CharacterController自带胶囊碰撞器,里面包含有刚体的属性;

    Rigidbody就是刚体,使物体带有刚体的特征。

    53.Unity3d的物理引擎中,有几种施加力的方式,分别描述出来

    答:rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函数中。

    54.什么叫做链条关节?

    答:Hinge Joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。

    55.什么是导航网格( NavMesh)?  

    答: Unity内一种用于实现自动寻路的网格  

    56.Unity3d提供了几种光源类型,分别是哪几种?

    答:四种。

    平行光:Directional Light

    点光源:Point Light

    聚光灯:Spot Light

    区域光源:Area Light

    Unity引擎问题

    57.简述Unity3D支持的作为脚本的语言的名称

    答:Unity的脚本语言基于Mono.Net平台上运行,可以使用.NET库,这也为XML、数据库、正则表达式等问题提供了很好的解决方案。
    Unity里的脚本都会经过编译,他们的运行速度也很快。这三种语言实际上的功能和运行速度是一样的,区别主要体现在语言特性上。
    JavaScript

    C#
    Boo 

    58.向量的点乘、叉乘以及归一化的意义?

    答:1)点乘计算两个向量之间的夹角,还可表示某一方向的投影
    2)叉乘得到的是法向量
    3)标准化向量:用在只关系方向,不关心大小的时候

    59.矩阵相乘的意义及注意点

    答:用于表示线性变换:旋转、缩放、投影、平移、仿射
    注意:矩阵的蠕变:误差的积累

    60.为什么dynamic fontunicode环境下优于static font

    答:Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
    使用动态字体时,Unity将不会预先生成一个与所有字体的字符纹理。当需要支持亚洲语言或者较大的字体的时候,若使用正常纹理,则字体的纹理将非常大。

    61.Render的作用?描述MeshRenderSkinnedMeshRender的关系与不同

    答:render是渲染器,渲染器可以使物体显示在屏幕上。

    MeshRender是网格渲染,SkinnedMeshRender是蒙皮网格渲染器

    62.简述SkinnedMesh的实现原理

    答:骨骼蒙皮动画,模型本身是静态的,是因为通过蒙皮,使模型每个点都有Skin数据,Skin数据包括顶点受到哪些骨骼影响以及这些骨骼影响顶点的权重值,还有动画数据,有了Skin数据的模型就可以根据动画数据进行显示动画了。 

    63.为什么Unity3D中会发生在组件上出现数据丢失的情况?

    答:组件上绑定的对象被删除了

    64.如何安全的在不同工程间安全地迁移asset数据?三种方法

    答:1Assets目录和Library目录一起迁移

    2导出包

    3unity自带的assets Server功能

    65.Lod是什么,优缺点是什么? 

    答:LODLevel of detail简称,意为多层次细节,是最常用的游戏优化技术,LOD技术指根据物体模型的几点在显示环境中所处的位置和重要性,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。

       优点:可根据距离动态的选择渲染不同细节的模型

    缺点:增加美工工作量,增大了游戏的容量。

    66.两种阴影判断的方法、工作原理。 

    答:自身阴影:因物体自身的遮挡而使光线照射不到它上面的某些可见面

    工作原理:利用背面剔除的方法求出,即假设视点在点光源的位置。

    投射阴影:因不透明物体遮挡光线使得场景中位于该物体后面的物体或区域收不到光照照射而形成的阴影。

    工作原理:从光源处向物体的所有可见面投射光线,将这些面投影到场景中得到投影面,再将这些投影面与场景中的其他平面求交得出阴影多边形,保存这些阴影多边形信息,然后在按视点位置对场景进行相应处理得到所要求的师徒(利用空间换时间,每次只需依据视点位置进行一次阴影计算即可,省去了一次消隐过程)若是动态光源此方法就无效了。

    67.MipMap是什么,作用? 

    答:MipMapping:在三维计算机图形的贴图渲染中有常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为MipMap  

    68.用代码实现第三角色控制器 

    答:  

    69.Mecanim系统中,Body Mask的作用是?

    答:指定身体的某一部分是否参与渲染  

    70.Unity连接数据库 

    答:需要得到Mono.Data.Sqlite.dll 文件与System.Data.dll文件  

    71.如何优化内存?

    答:1.压缩自带类库

    2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy

    3.释放AssetBundle占用的资源

    4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小

    5.使用光照贴图

    6.使用多层次细节(LOD)

    7.使用着色器(Shader)

    8.使用预设(Prefab)

    72.你用过哪些插件?

    答:NGUI/DF/ITeen

    m

     

    在哪个模块下可以修改Render Path?

    a. Camera

    b. Light

    c. Render settings

    d. ProjectSetting=Player=OtherSettings

     

     

    图形图像

    1.什么是渲染管道?

    答:是指在显示器上为了显示出图像而经过的一系列必要操作。

    渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。

    主要有三步:应用程序阶段,几何阶段 光栅阶段

    本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化。

    2.什么是矢量图 

    答:计算机中显示的图形一般可以分为两大类——矢量图和位图。矢量图使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。例如一幅花的矢量图形实际上是由线段形成外框轮廓,由外框的颜色以及外框所封闭的颜色决定花显示出的颜色。由于矢量图形可通过公式计算获得,所以矢量图形文件体积一般较小。矢量图形最大的优点是无论放大、缩小或旋转等不会失真;最大的缺点是难以表现色彩层次丰富的逼真图像效果。

    3.什么是矩阵?矩阵运算?

    答:矩阵:横轴排列的二维数据表格

    矩阵运算:

    加减 限制条件:行和列必须相同,对应相加相减得到结果

    乘法 限制条件:要求左矩阵的行和右矩阵的列必须同,行数和左矩阵相等,列数和右矩阵相等,结果的第i行第j列,是左矩阵的第i行和右矩阵的第j列逐个相乘并把结果相加,得到结果是结果 的 第i行第j

    4.角度和弧度的转换

    答:角度和弧度

    度和弧度之间的换算  1弧度 = 180度 /pi(约57.3

                           1=pi/180弧度(约0.017

    5.矢量标量

    答:矢量有方向如力速度 标量只有大小没有方向如温度

    矢量取模就是只要大小不要方向

    ^单位向量 有方向  大小为1的向量

     

    矢量的加法:是矢量的几何和,服从平行四边形规则

    矢量满足交换律,满足结合律

     

    在直角坐标系中,矢量等于骑在坐标轴上投影的矢量之和(二维矢量可以看做三维矢量的特例也就是说  三维成立,二维也成立)

     

    矢量减法:

    大小相等 方向相反 称为逆矢量

     

    任意多个矢量首尾相连接组成闭合多边形,其结果必为0

    矢量的乘法:点积(内积、标量积)、叉积(外积)结果是矢量

    点积方法 dot

     

     

     

     

    Unity面试题1.B  2. A  3. B  4. B  5. D  6. D 7.D  8.A  9.B 

     

     

     

     

     

     

     

    1.D  2.C  3.C  4.A  5.D  6.B.D  7.B  8.c  9.D  10.a

     

     

     

     

     

    ;A

     

       这三题都有了! 

     

     

     

     

     

     


    展开全文
  • 1、unity3D简介Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。2、unity3D特点...

    1、unity3D简介

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎

    2、unity3D特点

    简单易用

    开发效率高

    价格便宜

    新手居多

    23个平台间自由迁移,出色的部署,完全的覆盖,发布平台包括:IOSarduinowindows phonewindoswebxbox360ps3wii

    3、Unity引擎基础

    unity3D环境搭建

    C#语言基础

    Unity api

    物理引擎1

    3D数学基础

    UGUI

    4Unity高级应用

    物理引擎2

    持久化数据

    寻路系统

    射线

    Mecanim 动画系统

    三维软件基本功

    NGUI

    2D游戏、手机游戏开发及跨平台发布

    局域网链接

    5、框架设计

    面向对象

    类库开发

    设计模式

    人工智能

    6、项目路径、名称均不可是中文

    界面调节

    7、Layout菜单,可以调节菜单,推荐使用2 by 4.

    8、Project中可选One Column Layout/Two column Layout,切换单列或双列显示

    9、Project放置项目素材:美工做的模型、脚本等(直接拖拽,可以进行一些操作),Show in Explorer可以发现所有资源被放在项目路径下的Assets文件夹内,故而对Assets文件夹内内容操作,可直接在Project文件夹内显示。

    10、Project中是项目所拥有的材料,而在Hierarchy(层次面板)面板中才是游戏运行时使用了的材料。

    11、Game面板,显示运行结果,运行时,操作不保存。

    12、Scene面板中可以进行如下操作,拖拽场景,移动物体(可以选择按轴或按面移动)(美术规范,Z规定为前,y规定上,X规定为右),旋转,删除物体。

    13、操作快捷键

    选中物体F键将物体放在Scene面板中间(或者在Hierarchy面板双击物体)

    ALT+左键视角围绕物体转动

    Alt+右键,缩放操作

    点击右键同时按下W/S/A/D/Q/E可以实现场景漫游

    14、变换工具

    移动场景、移动物体、旋转物体、缩放物体

    定点吸附:选择物体,并按住V -> 定位定点 -> (先松V键)拖拽到目标物体某个点上,准确拼模型时常用。

    注:左手定则,拇指,食指成L形,大拇指向右,食指向上,其他指向前,按照顺序三者分别代表XYZ正方向

    15、Inspector(检查监视面板)面板,检视选中游戏物体的组件(组件可以理解为功能)

    16、变换切换

    左边是改变游戏对象的轴心点

    Center:设置轴心在物体的中心

    Pivot:使用物体本身的轴心

    右边是改变物体的坐标

    Global:世界坐标

    Local:自身坐标

    17、播放控件

    从左到右依次是:预览游戏、暂停游戏、逐帧播放

    18、unitypackageunity特有的资源包

    19、视图

    ISO:正交观察模式

    Persp:透视观察模式,近大远小

    视图角度:上下左右前后

    20、坐标:X红色,Y绿色,Z蓝色

    世界坐标:整个场景的固定坐标,不随物体旋转而改变

    本地坐标:物体自身坐标,随旋转而改变

    21、Scene:一组相关联的游戏对象的合集,通常游戏中每个关卡就是一个场景,用于展示当前关卡中的所有物体

    22、GameObject运行时出现在场景中的物体;是一种容器,可以挂载组件;父子物体,在Hierarchy面板中,可以将一个物体拖拽到另一个物体中,子物体继承父物体的移动,旋转,缩放属性,但子物体不影响父物体

    23、组件Component,游戏对象的功能模块;每个组件都是一个类的实例。

    Transform变换组件

    Mesh Filter网格过滤器

    Mesh Renderer 网格渲染器

    Mesh FilterMesh Renderer 必须同时使用

    24、项目、场景,物体,组件之间的关系

    项目 -> 场景 -> 物体 -> 组件

    25、创建物体,在Scene面板中心

    26、父子物体,听父亲的,常创建一空物体,将其他东西放入

    27、子物体的,Position,相对于父物体。父物体的相对于世界。

    28、材质Material简介:材质指物体表面的质地。指,色彩纹理、光滑度、透明度、反射率、折射率、发光度等材质实际上是,Shader的实例。

    Shader着色器,专门用来渲染3D图形的技术,可以使纹理以某种方式展现。实际就是一段嵌入到渲染管线中的程序,可以控制GPU运算图像效果的算法。

    Texture纹理:附加到物体表面的贴图。

    29、材质属性->Rendering Mode & Main Maps

    30、Mesh Renderer组件下有Materials

    31、材质属于资源,可在Project面板下,创建Materials文件夹,存放全部材质。可在其中建立材质。材质不能直接给物体,而是放到Mesh Renderer组件中的Materials Elemen 0。(可拖拽,可选择。)

    32、颜色由RGBA组成。

    33、Unity编辑器中,修改物体颜色,全部使用相同材质的都会改变。其操作改变了材质。

    34、导入图片在Unity中默认为Texture(纹理)。

    35、纹理,着色器与材质的关系

    Texture ------->

    Materia --------> GameObject

    Shader ------->

    36、Rendering Mode -> Fade淡入淡出

    37、Rendering Mode -> Cutout 去掉透明(例如做一个栅栏)

    38、Rendering Mode -> Transparent 透明材质(玻璃)

    39、Rendering Mode -> Opaque 不透明,默认选项

    40、Main Maps

    Albedo 基础贴图:决定物体表面纹理与颜色

    Metallic 金属:使用金属特性模外观

    Specular 镜面反射:使用镜面特性模拟外观

    Smoothness 光滑度:设置物体表面光滑程度

    Normal Map 发现贴图:描述物体表面的凹凸程度

    Emission 自发光:控制物体表面自发光颜色和贴图

    --None 不影响环境

    --Realtime实时动态改变

    --Backed 烘焙生效

    Tiling 平铺:沿着不同的轴,纹理平铺个数

    Offset 偏移:滑动纹理(背景动,可显得让人动)

    41、物体轮廓(创建材质,将轮廓代码导入,然后将材质拽入物体轮廓)

    A.创建材质Outline;

    B.制定着色器BasicOutline

    C.制定纹理Texture

    D.设置到物体中

    42、对于程序员来说,材质是质地,是着色器的实质。

    43、物理着色器,基于物理特性的ShaderUnity5.x的重大革新之一,所谓物理着色器(Physically based shadingPBS)就是遵从物理学的能量守恒定律,可以创建出在不同光照环境下都接近真实的效果。

    44、大多数材质可以使用unity自带的。也可去网上down。专门的着色器编辑人员去编写。

    45、摄像机Camera简介:

    附加了摄像机Camera组件的游戏对象

    向玩家捕获和显示世界的设备(视椎体=范围)

    场景中摄像机的数量不受限制

    46、摄像机Camera组件

    Transform变换组件

    Camera摄像机:向玩家捕获和显示世界

    Flare Layer耀斑层:激活 可显示光源耀斑

    GUI Layer:激活可渲染二位GUI元素

    Audio Listener音频监听器(耳朵):接收场景输入的音频源Audio Sorce(声源)并通过计算机的扬声器播放声音。

    47、摄像机Camera属性

    Clear Flags清除标识:决定屏蔽的空白部分如何处理

    Skybox天空盒:空白部分显示天空盒

    Solid Color 纯色:空白部分显示背景颜色

    Depth Only 仅深度:画中画效果,小画面摄像机选择可清楚屏幕空部分信息,只保留物体的颜色信息。

    Don’t Clrar 不清除:不清除任何颜色或深度缓存

    Background背景:所有元素绘制后,没有天空盒的情况下,剩余屏幕的颜色。

    Culling Mask 选择遮蔽层:选择要照射的层Layer

    48、天空盒:围绕整个场景的包装器,用于模拟天空的材质

    天空盒的材质种类:6SidedProceduralCubemap(不常用)

    6Sided6个面,可以由6个面组成。

    Procedural

    49、右键可移除组件

    50、使用天空盒有两种方式:

    方式一 设计摄像机Clear Flags属性为Skybox

    方式二 光照窗口

    Window - Lighting - Environment Lighting - Skybox

    可作为反射源将天空色彩反射到场景中的物体

    516 Sided属性

    Tint Color色彩

    Exposure亮度

    Rotation旋转

    51、Procedural属性

    Sun太阳模式

    --None没有

    --Simple简单

    --Hight Quality高质量

    Atmoshpere Thickness大气层厚度

    Ground地面颜色

    如果为Environmet LightingSun属性设置一个平行光,场景中会根据平行光角度自动创建太阳并且位置随平行光的旋转而改变。蜀国不设置,系统将默认选择场景中最亮的平行光。

    52、物体都有Layer层,摄像机可以选择不同的层,game面板消失,Scene中仍在

    53、摄像机组件的

    Projection属性,可以控制看见的是2D(忽略纵深)还是3D,即视觉模式

    Field of View属性,可以放大缩小(类似于CS里的狙击镜视角,变小拉近)

    Clipping Planes属性,最远FAR最近Near可以看多少米(特别大的游戏中可以省显卡消耗)

    Viewport Rect:可以调节占屏幕的大小(显示区域,小地图)XY控制位置WH控制大小。

    54、InstantOC:渲染管线、Occlusion CullingLOD

    55、渲染管线:顶点处理、图元装配、光栅化、像素处理、缓存

    渲染管线,是图形数据在GPU上经过运算处理,最后输出到屏幕的过程。

    游戏 -> 图形API --> |CPUGPU 分界线| --> 顶点处理 -> 图元装配 -> 光栅化 -> 像素处理 -> 缓存

    56、CPU判断物体该不该渲染,需要渲染的通过图形API的交给GPU。(视椎和层)

    57、绘制调用Draw Call:每次引擎准备数据并通知GPU的过程。通俗讲,每帧调用显卡渲染物体的次数。Draw Call越小性能越好。手机一般一二百个。

    58、定点处理:获取模型定点数据 -> 坐标系转化

    59、图元装配:连接相邻的定点,绘制为三角面

    60、光栅化:计算三角面上的像素,并为后面着色阶段提供合理的插值参数,

    61、像素处理:对每个像素区域进行着色,写入到缓存中

    62、缓存:一个存储像素数据的内存块,最重要的缓存是帧缓存与深度缓存

    63、帧缓存:存储每个像素的色彩,即渲染后的图像。帧缓存常常在显存中,显卡不断读取并输出到屏幕中

    64、深度缓存z-buffer:存储像素的深度信息,即物体到摄像机的距离。光栅化时便计算各个像素的深度值,如果新的深度值,比现有的值更近,则像素颜色被写到帧缓存,并替换深度缓存

    65、Occlusion Culling:即时遮挡剔除、步骤、属性

    66、Instant Occlusion Culling即时遮挡剔除:当物体被送进流水线前,将摄像机视角内看不到的物体进行剔除、从而减少每帧渲染的数据量,提高渲染性能

    67、Windows --> Profiler(优化时常用的面板,性能衡量标准为工作量越少越好)

    68、遮挡剔除的操作过程

    下载第三方插件Instant OC ---> 导入unity(向下兼容) ---> IOCcamC#脚本)--> 导入到摄像机--> 添加层IOC --> 指定参与遮挡物体参加层(这个插件需要啥,添加啥)--> FOV设置与摄像机相同 --> 延迟渲染(防止物体闪)

    插件会有说明书

    69、使用时需要进行碰撞检测,故而需要为物体添加Box Collider

    70、主摄像头

    71、LOD:多细节层次、步骤、属性

    72、多细节层次 Level of DetailLOD技术 指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染资源的分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算

    73、LOD实现过程:拥有多个模型,每个的三角面数不同(reset到同一位置,重合在同一父物体上) ---> Lod_0 Lod_1 Lod_3 -->按照要求为模型添加属性(层与标签)--> 添加Box Collider(碰撞器组件)--> 摄像机附加脚本IOCcam

    74、先优化Draw Call,再优化三角片面。

    75、光照系统简介:Global Illumination、直接光照、间接光照、环境光照、反射光照

    76、光照系统---实时GIRealtime GIPrecomputed RealtimeGI

    77、光照系统---烘焙GI:烘焙、步骤、Baked GIGeneral GI

    78、光照系统---光源检测

    79、Global Illumination 简称GI,即全局光照。能够计算直接光、间接光、环境光及反射光照系统、通过GI算法可以使渲染出来的光照效果更为真实丰富。

    80、直接光:从光源直接发出的光,通过Light组件实现。

    Type类型:灯光对象的当前类型

    --Directional Ligh平行光:平行发射光线,可照射场景里所有物体,用于模拟太阳。(与位置无关)(加上颜色,可以作为警报光)

    --Point Light点光源:在灯光位置上向四周发射光线,可以照射其范围内所有对象,用于模拟灯泡

    --Spot Light聚光灯:在灯光位置上向圆锥区域内发射光线,只有在这个区域内的物体才会受到光线照射,用于模拟探照灯

    --Area Light区域光:有一个面向一个方向发射光线,只照射该区域物体,仅烘焙时有效,用在光线较为集中的区域

    81、Scene面板中可以忽略场景中的光,提升效率。

    82、Ctrl+Shift+F 可以快速定位主摄像机

    83、直接光的属性值:

    Range范围:光从物体中心发射的范围,仅适用于点光源和聚光灯

    Spot Angle聚光角度:灯光的聚光角度,只适用于聚光灯。

    Color颜色:光线的颜色

    Intensity强度:光线的明亮程度

    Culling Mask选择遮蔽层:选择要照射的层Layer

    Shadow Type阴影类型:Hard 硬阴影、Soft软阴影

    Strengrh硬度:阴影的黑暗程度

    Resolution分辨率:设置阴影的细节程度

    Bias偏移:物体与阴影的偏移

    通过Mesh Renderer组件启用禁用阴影

    Cast/Receive Shadows当前物体是否投射/接收阴影(另一个物体上是否会把阴影打上)

    Off不投射阴影,On投射阴影(面的背面是否有阴影),Two Sided双面阴影,Shadows Only隐藏物体只投射阴影

    阴影剔除:设置显示阴影的距离

    Edit -> Project Settings -> Quality -> Shadows Disdance

    84、间接光照:物体表面在接受光照后反射出来的光

    通过Light组件中Bounce Intensity反弹强度控制

    可以通过Scene面板Irradiance模式查看间接光照

    注意:

    只有标记Lightmaping Static的物体才能产生间接反弹光照

    85、环境光照:作用于场景内所有物体的光照,通过Environment Lighting中的Ambient控制

    Ambient Source 环境光源来源

    ---Skybox 通过天空盒颜色设置环境光照

    ---Gradient梯度颜色

    Sky天空颜色、Equator地平线颜色、Ground地面颜色

    Ambient Intensity环境光强度

    Ambient GI环境光GI模式

    ---Realtime实时更新,环境光源会改变选择此项

    ---Backed烘焙,环境光源不会改变选择此项

    86、反射光照

    根据天空盒或立方体贴图计算的作用于所有物体的反射效果,通过Environment LightingReflection控制

    Reflection Source反射源

    --Skybox天空盒

    Resolution分辨率Compression是否压缩

    --Custom自定义

    Cubemap立方体贴图

    Reflection Intensity反射强度

    Reflection Bounces使用Reflection Probe后不允许不同游戏对象键来回反弹的次数

    87、间接光照

    物体表面在接受光照后反射出来的光

    通过Light组件中Bounce Intensity反弹强度控制

    可以通过Scene面板Irradiance模式查看间接光照

    注意:

    只有标记Lightmaping Static的物体才能产生间接反弹光

    88、实时GIRealtime GI

    所谓实时是指在运行期间任意修改光源,而所有变化可以立即更新

    正是由于Unity 5引入了行业领先的实时全局光照技术Enlighten系统,才可以在运行时产生间接光照使场景更为真实丰富

    操作步骤:

    游戏对象设置为Lightmaping Static ---> 启用Lighting面板的Precomputed Realtime GI ---> 点击Build按钮(如果勾选Auto编辑器会自动检测场景的改动修复光照效果)

    89、烘焙GI

    烘焙Lightmap当场景包含大量物体时,实时光照和阴影对游戏性能有很大影响。使用烘焙技术,可以将光照系统效果预渲染成贴图再作用到物体上模拟光影,从而提高性能。适用于在性能较低的设备上运行程序

    90、烘焙步骤

    游戏对象设置为Lightmaping Static -->设置Light组件Baking属性 --> 启动Lighting面板的Baked GI --->点击Build按钮(如果勾选Auto编辑器会自动检测场景的改动修复光照系统)

    Light组件Baking属性:烘焙模式

    Realtime仅实时光照时作用

    Baked仅烘焙时起作用

    Mixed混合,烘焙与实时光照都起作用

    可以通过Scene面板Baked模式查看光照贴图

    91、声音:在unity中依靠组件Audio Source来发声

    简介:Unity支持的音频文件格式有,mp3oggwavaifmodits3mxm 。声音分为2D3D类,3D声音有空间感,近大远小、2D声音适合背景音乐。在场景中产生声音,主要医药两个重要组件:Audio Listener音频监听器,接收场景中的音频源Audio Source发出的声音。Audio Source音频源。

     

    展开全文
  • Unity3d 5 官方教程:UI

    万次阅读 2017-03-29 23:30:12
    本篇是对Unity的UI系统主要特性的介绍。 相关教程:用户界面CanvasCanvas是所有UI元素应当存放于内的区域。Canvas是一个有Canvas组件的游戏对象,并且所有UI对象必须是这样一个Canvas对象的子对象。
  • ubuntu unity 3D桌面效果

    万次阅读 2017-09-14 11:25:33
    不 推荐在Ubuntu 12.10版使用3D桌面特效,因为这个版本正在做较大的修改和测试,把 Unity 2D桌面取消了,这是为了在以后“统一”桌面做准备,所以在Ubuntu 12.10版中使用带3D特效的Unity桌面或者另行安装使用Gnome-...
  • Unity4的Mecanim动画很早以前就有体验过,迟迟没有加到项目中有两个原因,今天写这篇博客来记录我在做的过程中遇到的一些...在3.x中播放动画的时候使用Play()或CrossFade(),直接播放动画 或淡入淡出播放动画。 1 ...
  • 这是Timeline系列的第三篇,前两篇分别是Unity3D Timeline预览和Unity3D Timeline工作流。本篇将会详细详解Timeline编辑器的具体功能,主要分为以下几个部分: Timeline内容预览和Timeline选择器 Timeline播放控制...
  • 一、目录 【Unity3D从入门到进阶】文章目录及设置这个专栏的初衷
  • 一、Unity动态更换天空盒 1、在摄像头上添加SkyBox组件 放到其他地方不管用。 2、创建SkyBox类型的的材质球。放入即可。 3、通过代码,你便可获取到SkyBox组件,便可动态更换天空盒了。 二、...
  • Unity3DUnity3D UGUI原理分析

    千次阅读 2020-03-09 13:52:55
    一、前言 这篇文章是分析UGUI的各种原理,包括层级渲染,事件触发,布局等,教程也比较详细,转过来有空研究一下 ...Unity UGUI 原理篇(一):Canvas 渲染模式 目标 了解各种不同UI ...
  • Unity3d轻量渲染管线(LWRP)民间文档

    万次阅读 2019-02-23 17:31:12
    近日在学习Unity3d的SRP,由于官方未正式发布,故几乎没有文档支持,考虑到官方一贯的风格,即使正式发布了,估计Shader部分也不会有详尽的文档。所以,干脆自己在研究学习源码之余,写了一份文档,既加深自己的理解...
  • 一般的游戏及app开发中,点击某一个按钮会弹出一些窗口,窗口可能从左边弹出,或是淡入淡出效果。例如:下面的图片,点击 投资顾问 按钮,后面页面按钮飘入,详细信息的淡入出现,就是我们今天要讲的技能。 好...
  • Unity3D中角色的动画脚本的编写

    千次阅读 2016-07-04 15:15:02
    ... ...已有好些天没写什么了,今天想起来该写点东西了。这次我所介绍的内容主要是为了配合我前面所写的角色运动控制有关的文章,那就是动画。这是一个很复杂的概念,今天,我就把我所理解的有关动
  • 版本:unity 5.6 语言:C#   总起: 可互动组件包括按钮、复选框、滑块、滚动条等,本身它们是不可见的,但它们内部有可视化组件。   做UI的时候,如果不需要什么特效本身使用onClick.AddListener添加事件可能就...
  • 标准着色器的材质参数(一):渲染模式,反射率和透明度,镜面模式的镜面参数
  • [Unity3D]Unity4新的动画系统Mecanim

    千次阅读 2014-07-04 23:11:06
    Unity4.X中添加的新的动画系统取代了原来3.X的旧的dong
  • 标签的封装和场景的淡入淡出效果 知识点一:标签 标签用来识别游戏物体的,必须在使用之前在标签管理器中定义。 创建文件夹Screen->C#script(命名Tags) 相关代码 using System.Collections; using System....
  • 1.Interactable System: 1.Picture Interactable:Player走到SecurityRoom墙前的那张画   2.Fish Interactable鱼档前的交互   3.Guard Interactable守卫   2.Player 这一Phase要实现在......
1 2 3 4 5 ... 11
收藏数 218
精华内容 87
关键字:

unity3d 按钮淡入淡出