1. Reset()
调用情况:此函数只能在编辑器模式下(不运行时)调用;
调用时间:当脚本第一次挂载到对象身上或者使用了Reset命令之后调用;
调用次数与作用:会调用一次,来初始化脚本的各个属性,Reset最常用于在检视面板中提供良好的默认值。
2. Awake()
调用情况:
(1)在加载场景时,初始化包含脚本的激活状态的 GameObject时;
(2)GameObject从非激活状态转变为激活状态时;
(3)在初始化使用Instantiate创建的GameObject之后;
调用时间、次数与作用:
在脚本实例的生存期内,Unity仅调用Awake一次。脚本的生存期持续到包含它的场景被卸载为止。Unity调用每个GameObject的Awake的顺序是不确定的,人为干涉(即设计)来保证程序的正确性和稳定性。Awake来代替构造函数进行初始化,在Unity这里,组件的初始化不适用构造函数。
3. OnEnable()
调用情况:
(1)游戏物体被激活;
(2)脚本组件被激活;
调用时间、次数与作用:
每次游戏物体或者脚本被激活都会调用一次;重复赋值;变为初始状态;
4. Start()
调用情况:
(1)游戏物体被激活;
(2)脚本组件被激活;
调用时间、次数与作用:
在脚本实例激活时,在第一帧的Update之前被调用,在Awake之后执行,方便控制逻辑的前后调用顺序。
5. Update()
调用情况:
(1)游戏物体被激活;
(2)脚本组件被激活;
调用时间、次数与作用:
每帧调用,是最常用函数;每秒调用60次左右(根据当前电脑的性能和状态);
实时更新数据,接受输入数据。
6. LateUpdate()
调用情况:
(1)游戏物体被激活;
(2)脚本组件被激活;
调用时间、次数与作用:
LateUpdate在调用所有Update函数后调用,每秒调用60次左右,安排脚本的执行顺序,比如摄像机跟随,一定是人物先移动了,摄像机才会跟随。
7. OnDisable()
调用情况:
(1)游戏物体被禁用;
(2)脚本组件被禁用;
(3)游戏物体被销毁;
调用时间、次数与作用:
满足调用情况时即时调用一次,用于一些对象的状态重置,资源回收与清理。
8. OnApplicationQuit()
调用情况:
(1)在程序退出之前所有的游戏对象都会调用这个函数;
(2)在编辑器中会在用户终止播放模式时调用;
(3)在网页视图关闭时调用;
调用时间、次数与作用:
满足调用情况时即时调用一次,用于处理一些游戏退出后的逻辑。
9. OnDestroy()
调用情况:
(1)场景或游戏结束;
(2)停止播放模式将终止应用程序;
(3)在网页视图关闭时调用;
(4)当前脚本被移除;
(5)当前脚本挂载到的游戏物体被删除;
调用时间、次数与作用:
满足调用情况时即时调用一次,用于一些游戏物体的销毁。
1. 创建方式
(1)使用构造函数(声明+实例化),创建一个空的游戏对象;
GameObject myGo=new GameObject("MyGameObject");
(2)根据现有的预制体(游戏物体)资源或者游戏场景已有的游戏物体来实例化;
GameObject.Instantiate(grisGo);
(3)使用特别的API创建一些基本的游戏物体类型(原始几何体)
GameObject.CreatePrimitive(PrimitiveType.Plane);
2.游戏物体的查找和获取
a.有引用
Debug.Log("当前游戏物体的状态是:"+gameObject.activeInHierarchy);
Debug.Log("当前游戏物体的状态是:"+gameObject.activeSelf);
b.没有直接引用(这时的游戏物体必须是激活状态)
(1)通过名称查找
GameObject mainCameraGo=GameObject.Find("Main Camera");
(2)通过标签查找
GameObject mainCameraGo=GameObject.FindGameObjectWithTag("MainCamera");
(3)通过类型查找
Script script=GameObject.FindObjectOfType