Unity API(一)Unity中的脚本事件及其函数
常用的脚本事件函数
当在Unity中添加一个脚本,默认会有两个事件函数Start和Update,除此之外还有Awake、OnEnable、LateUpdate,OnDisable和OnDestroy等五个常用的,他们从时间线上表示了整个脚本的生命周期。这五个事件的事件顺序如下图所示(引用自蓝欧Unity引擎基础****)。
-
Awake:当脚本加载时调用,只调用一次。
Awake()在MonoBehavior创建后就立刻调用,在脚本实例的整个生命周期中,Awake函数仅执行一次;如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数不会执行;如果游戏对象的初始状态为开启状态,那么Awake函数会执行;值得注意的一点是,Awake函数的执行与否与脚本实例的状态(启用或禁用)并没有关系,而是与脚本实例所绑定的游戏对象的开关状态有关。如果重新加载场景,那么场景内Awake函数的执行情况重新遵循上述两点。 可以做一些初始化操作
一般开发中都是在Awake函数中获取游戏对象或者脚本实例的信息,然后在Start函数中进行一些获取之后的初始化设置。 OnEnable:当脚本的被**时调用
Start()将在MonoBehavior创建后在该帧Update()第一次执行前被调用;Start()函数只在脚本实例被启用时才会执行;Start函数总是在Awake函数之后执行。如果游戏对象开启了,对象上绑定的脚本实例被禁用了,那么Start函数不会执行。这是Start函数的特点,只有在脚本实例被启用时它才会执行,并且Start函数只会在脚本实例首次被开启时才会执行。如果是已经开启过的脚本实例被关闭后再次开启,那么Start函数不会再次执行。 公共的字段放在Awake中 初始化Update:每个帧调用,每秒调用的次数与帧频有关系。
- LateUpdate:Update调用之后调用,一般调用的次数与Update一样。
- OnDisable:在脚本被禁用后调用。
以下需要注意:
Awake、OnEnable、Start,都是游戏开始运行前就调用的方法。 每次**脚本时会调用 ,但是start之会在第一次调用update之前调用!
GameObject的Activity为true,脚本的enable为true时,其先后顺序为:Awake、OnEnable、Start;
GameObject的Activity为true,脚本的enable为false时,只运行Awake;
GameObject的Activity为false时,以上都不调用,OnDisable()被调用; OnDisable()
脚本不作用与游戏对象是 Activity为false OnDestory:物体被删除时调用。 或者脚本组件被移除时调用,对象销毁时执行
Awake与Start
Unity圣典中的解释。
Awake(),当一个脚本实例被载入时Awake被调用。Awake用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如 GameObject.FindWithTag 这样的函数搜索它们。每个游戏物体上的Awke以随机的顺序被调用。因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息。Awake总是在Start之前被调用。它不能用来执行协同程序。
Start(),Start仅在Update函数第一次被调用前调用。Start在behaviour的生命周期中只被调用一次。它和Awake的不同是Start只在脚本实例被启用时调用。你可以按需调整延迟初始化代码。Awake总是在Start之前执行。这允许你协调初始化顺序。
Update、LateUpdate和FixUpdate
- Update:当MonoBehaviour启用时,其Update在每一帧被调用; 用来处理画面的逻辑
- LateUpdate:当Behaviour启用时,其LateUpdate在每一帧被调用
- FixedUpdate:这个函数会在每个固定的物理时间片被调用一次.这是放置游戏基本物理行为代码的地方。Update之后调用。
脚本事件大全
编辑器相关函数
- Reset:当脚本附加到GameObject上或者脚本的右键菜单项里选择了“Reset”命令的时候调用此函数。
- OnValidate:脚本被加载或则值被改变在inspector中时调用
初始化函数
- Awake:此函数在脚本附加到GameObject对象上且此对象是被**的的时候调用。并且是在所有Start函数调用之前调用。但是要特殊说明的是,就算挂的脚本没有被启用此函数也会调用。
- OnEnable:脚本对象被**的时候。 Start:在所有的Update函数调用之前调用。
物理相关函数
-FixedUpdate:物理更函数函数,一帧中可能调用几次
-OnTriggerEnter:进入触发器(勾选了IsTrigger的Collider)时触发
-OnTriggerEnter2D:进入2D触发器(勾选了IsTrigger的Collider)时触发
-OnTriggerExit:离开触发器(勾选了IsTrigger的Collider)时触发
-OnTriggerExit2D:离开2D触发器(勾选了IsTrigger的Collider)时触发
-OnTriggerStay2D:在2D触发器里(勾选了IsTrigger的Collider)时触发
-OnCollisionEnter:进入碰撞器(Collider)时触发
-OnCollisionEnter2D:进入2D碰撞器(Collider)时触发
- OnCollisionExit:离开碰撞器(Collider)时触发
- OnCollisionExit2D:离开2D碰撞器(Collider)时触发
- OnCollisionStay:在碰撞器里(Collider)时触
- OnCollisionStay2D:在2D碰撞器(Collider)时触发
输入相关函数
OnMouseDown:鼠标在GUIElement或Collider上按下时调用
OnMouseDrag:鼠标在GUIElement或Collider上拖拽时调用
OnMouseEnter:鼠标进入GUIElement或Collider时调用
OnMouseExit:鼠标离开GUIElement或Collider时调用
OnMouseOver:鼠标悬浮在GUIElement或Collider上时调用
OnMouseUp:鼠标从GUIElement或Collider弹起时调用
OnMouseUpAsButton:鼠标在同一个GUIElement或Collider上按下喝弹起时调用,也就是单击一GUIElement或Collider时。
游戏逻辑相关函数
Update:游戏逻辑的更新函数
LateUpdate:所有Update函数调用后调用的更新函数
渲染相关函数
OnPreCull:在执行剔除之前执行的函数
OnBecameVisible:此对象从隐藏到显示时调用
OnBecameInvisible:此对象从显示到隐藏时调用
OnWillRenderObject:将要渲染此对象时调用
OnPreRender:渲染场景之前
OnRenderObject:所有常规的渲染结束后调用
OnPostRender:渲染完整个场景后调用
OnRenderImage:场景渲染完后调用
OnGUI:执行UI的渲染,一帧中可能调用几次
OnDrawGizmos: 执行场景视图中对象的标示图标的绘制
OnDrawGizmosSelected:执行场景视图中选中对象的标示图标的绘制
应用程序相关函数
OnApplicationFocus:应用程序成为当前的应用时调用
OnApplicationPause:当应用程序切入后台暂停时调用
OnApplicationQuit:应用程序退出时调用
其他函数
OnDisable:脚本对象被禁用时调用
OnDestory:脚本对象被销毁的时候调用
OnLevelWasLoaded:一个新的场景加载时调用
协程
yield:延缓到下一帧执行
yield WaitForSeconds:这一帧执行完后,等待指定的延迟到
yield WaitForFixedUpdate:所有的固定更新完成后
yield WWW:www下载完成
yield StartCoroutine 等待一个自定的函数完成
其他
1.用在游戏对象中的脚本,继承自MonoBehaviour,是运行时类,不能直接本地手段进行实例化。可以借助GetComponent方法来获取,然后实例化。
2.在脚本中Unity默认gameObject指代脚本挂载所在的游戏对象,transform指代指代脚本挂载所在的游戏对象的Transform组件。
参考文献
1.[Unity3D]脚本中Start()和Awake()的区别,http://www.cnblogs.com/xpvincent/p/3178042.html
2.Unity 3d 脚本常用事件,http://www.cnblogs.com/clar/p/5692062.html
3.Unity5脚本事件函数及其执行顺序,http://blog.csdn.net/zw514159799/article/details/50445821