1、事件函数:
 start函数(只执行一次);
 update函数(一帧执行一次);
 事件执行顺序(Execution Order Of Event Functions)2、事件函数的执行时机和先后顺序:
 Reset
 Aweak
 OnEnable(OnDisEnable)
 FixedUpdate(每帧可能会调用多次,具有物理属性的)
 Update和LateUpdate(每帧调用一次,与硬件设备相关联)触发触发器(OnTriggerXXX)
 OnTriggerEnter 进入
 OnTriggerStart 进行中
 OnTriggerQuit 结束
 触发碰撞器(OnCollisionXXX)
 OnCollisionEnter 进入
 OnCollisionStart 进行中
 OnCollisionQuit 结束FixedUpdate每秒执行固定次数,应该将处理跟物理相关的运动的代码放在FixedUpdate中。
 Update和LateUpdate跟硬件和代码性能有关,每秒执行次数不固定。3、Time类中静态变量介绍
 <1> captureFramerate(减慢游戏回放时间,以便在帧间保存屏幕截图)
 <2> deltaTime(当前帧所占用的时间,每一帧所占用的时间大概在1/60左右,常用的)
 控制cube向前移动:public GameObject cube;
 void Upate()
 {
 cube.Translate(Vector3.forward); // 1秒运行50次,每次运行1米
 cube.Translate(Vector3.forward*Time.deltaTime); Time.deltaTime == 0.02秒
 Time.timeScale = 0; //停止 与Time.deltaTime有关,可以做物体的停止或者慢运动
 }
 <3> fixedDeltaTime
 <4> fixedTime(从游戏开始到现在所执行的时间)
 <5> realTimeSinceStartup(做性能测试)Time.time 表示从游戏开始到现在的时间,会随着游戏的暂停而停止计算。
 Time.timeSinceLevelLoad 表示从当前Scene加载完成到目前为止的时间,也会随着暂停操作而停止。4、Timedelta和realTimeSinceStartup的使用
 Time.deltaTime 表示从上一帧到当前帧(上一帧所消耗的)时间,以秒为单位。
 Time.fixedTime 表示以秒计游戏开始的时间,固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。
 Time.fixedDeltaTime 表示以秒计间隔,在物理和其他固定帧率进行更新,在Edit->ProjectSettings->Time的Fixed Timestep可以自行设置。
 Time.SmoothDeltaTime 表示一个平稳的deltaTime,根据前N帧的时间加权平均的值。
 Time.timeScale 时间缩放,默认值为1,若设置<1,表示时间减慢,若设置>1,表示时间加快,可以用来加速和减速游戏,非常有用。
 Time.frameCount 已渲染总帧数。
 Time.realtimeSinceStartup 表示自游戏开始后的总时间,即使暂停也会不断的增加,也不受timeScale影响。
 Time.captureFramerate 表示设置每秒的帧率,然后不考虑真实时间。
 Time.unscaledDeltaTime 不考虑timescale时候与deltaTime相同,若timescale被设置,则无效。
 Time.unscaledTime 不考虑timescale时候与time相同,若timescale被设置,则无效。5、创建游戏物体的三种方法
 1.第一种创建方法(当我们想创建一个空的游戏物体,然后在游戏物体下面添加东西时可以这样创建,新建的游戏物体相当于一个空物体)
 GameObject go = new GameObject(“Cube”);
 2.第二种
 根据Prefab进行初始化
 根据另外一个游戏物体进行实例化(场景中的物体比如MainCamera)
 GameObject.Instantiate(prefab);
 3.第三种
 根据原始的一些图形来创建,需要指定类型
 GameObject.CreatePrimitive(PrimitiveType.Plane);
 GameObject.CreatePrimitive(PrimitiveType.Cube);6、如何给游戏物体通过代码添加组件
 创建出来的物体可以通过AddComponent<>添加组件。
 go.AddComponent();//添加组件
 go.AddComponent();//添加脚本7、如何禁用和启用一个游戏物体
 Debug.Log(go.activeInHierarchy);//activeInHierarchy(当我们将父物体禁用时,子物体的activeInHierarchy属性也为false但是子物体的activeSelf为true)
 go.SetActive(false);
 Debug.Log(go.activeInHierarchy);
 Debug.Log(go.tag);8、GameObject、Component及Object之间的关系
 一个游戏可以由多个场景构成;
 一个场景可以由多个游戏物体组成;
 多个组件构成一个游戏物体;C#的基类是System.Object,UnityEngine.Object是U3D游戏引擎的基类,该基类下又包含GameObject和Component两个子类。
UnityEngine.Object有name可供GameObject和Component进行访问,访问的name都是一样的。
9、GameObject独有的静态方法
 CreatePrimitive
 Find; // 通过游戏对象的name对所有的对象进行查找,耗费性能
 FindWithTag // 返回一个活动的游戏对象标签。如果没有找到GameObject(游戏物体),返回null
 FindGameObjectWithTag // 返回带有标签的活动游戏对象列表。如果没有找到GameObject(游戏物体),返回空数组。10、游戏物体间信息的发送和接收
 发送消息:
 BroadcastMessage;//以广播的形式发送
 SendMessage;
 SendMessageUpwards;
 接受消息:
 GetComponent;
 GetComponentInChildren;
 GetComponentInParent;
 GetComponents;
 GetComponentsInChildren;
 GetComponentsInParent;BroadcastMessage()向所有子物体包括自身广播消息。
 SendMessage()向自身发送消息。
 SendMessageUpwards()向所有父物体包括自身广播消息。11、得到组件的各种方法函数
 GetComponent
 GetComponents
 GetComponentInChildren
 GetComponentsInChildren
 GetComponentInParent
 GetComponentsInParent12、MonoBehaviour总览
 继承层次:Object->Component->Behaviour->MonoBehaviour13、MonoBehaviour里面的常用变量
 isActiveAndEnabled
 enabled
 name
 tag
 gameObject
 transform14、MonoBehaviour中Invoke的使用
 CancelInvoke() 取消在这个脚本上的所有调用
 void Invoke(string methodName, float time) 在time时间内调用名字为methodName的函数
 void InvokeRepeating(string methodName, float time, float repeatRate) 在time时间内调用名字为methodName的函数,此后每
 repeatRate秒就调用一次该函数
 bool IsInvoking() 该MonoBehaviour上是否有等候调用的函数15、什么是协程,它是如何执行的
 StartCoroutine(IEnumerator routine) 开启一个协程,利用yield语句暂停在某点,yield返回值指定了什么时机协程恢复。对于多帧执行一次的行为非常适合用协程解决,它几乎没有什么性能开销。该函数总是会立即返回,然而可以yield结果,这样可以等到协程执行完成返回。使用javascript不需要显示调用该函数,因为编译器已经为你调用了,而C#中必须显示调用。
 StartCoroutine(string methodName, object value = null) 开启指定名字的协程。主要应用的场合是,当使用指定函数名字来开启协程时,就可以使用StopCoroutine来终止指定名字的函数。限制是仅能传递一个参数,而且有更高的运行时代价。
 StopAllCoroutines() 终止运行在该MonoBehaviour上的所有协程。
 StopCoroutine(string methodName) 终止运行在该MonoBehaviour上名字为methodName的协程。仅仅StartCoroutine的字符串开启的协程才可以使用该函数进行终止。16、使用Coroutine实现颜色动画渐变
 IEnumerator Fade()
 {
 for (; ; )这是个死循环
 {
 1.cube.GetComponent().material.color = new Color(i,i,i,i);
 Color color = cube.GetComponent().material.color;
 Color newColor = Color.Lerp(color,Color.red,0.02f);
 cube.GetComponent().material.color = newColor;
 yield return new WaitForSeconds(0.02f);
 if (Mathf.Abs(Color.red.g-newColor.g)<=0.01f)
 {
 break;
 }
 }
 }
 Coroutine
 1.返回值IEnumerator
 2.返回参数的时候使用yield return
 3.协程方法的调用StartCoroutine(method());
 IEnumerator ChangeColor()
 {
 print(“haColor”);
 yield return new WaitForSeconds(3);//暂停三秒在执行后面的代码
 cube.GetComponent().material.color = Color.blue;
 print(“hahaColor”);
 yield return null;
 }
 }