MonoBehaviour概述
MonoBehaviour 表示一个单一的行为。Unity中用户对游戏对象的操作被分割成若干个单一行为。每个单一行为都作为一个MonoBehaviour类来封装。再生成每个MonoBehaviour类的实例,并作为组件嵌入游戏对象。然后按照一定的顺序(从下到上)调用每个对象的重载方法来实现游戏对象的全部行为。
用过Unity的伙伴们都知道,在创建脚本以后,文件里面默认有两个函数,Update()、Start(),这些函数是如何调用的呢,MonoBehaviour类下还有哪些类似的函数呢,我们了解一下:
首先看一下,常用的脚本必然事件。 一:基础函数1.Update()当MonoBehaviour启用时,每帧调用一次。用于更新场景和状态(物理状态有关的更新应该放在FixedUpdate里) 2.Start()Update函数第一次运行之前调用。用于游戏对象的初始化。整个Start方法在整个MonoBehaviour生命周期内只被调用一次。Awake和Start不同的地方在于Start方法仅仅在脚本初始化后被调用,这样允许你延迟加载任何代码,知道代码被真正使用时,Awake方法总是在Start方法之前被调用,这样允许你初始化脚本代码。 3.Awake()脚本实例被创建时调用,用于游戏对象的初始化,但执行时间早于Start函数。当脚本被加载后后立即调用Awake方法,这个方法在Start()开始之前声明某些变量或者游戏的状态标记符。同样,Awake也是在MonoBehaviour声明周期内被调用一次。Awake在所有的对象实例化后被调用【本人认为是GameObject】,因此绑定这个脚本的对象能与其他直接相互作用,例如,通过GameFindWithTag方法查找其它对象。 4.FixedUpdate()用于物理状态的更新。 每一帧都在调用此方法。当处理Rigibody时FixedUpdate应该代替Update方法,比如,当一个物体需要增加一个力时,应该将这个力的代码写在FixedUpdate()里面。 void FixedUpdate() { rigibody.AddForce(Vector3.up); } 5.LateUpdate()每帧调用一次该方法,(在Update之后调用)。当每一帧的Update方法全部执行完后,此方法开始被调用。举个例子来说吧,当一个角色移动而摄像机也要跟着移动时,摄像机的处理就应该在LateUpdate()里面了。 6.OnGUI OnGUI()在每一帧被调用数次(Several times),家兔MonoBehaviour的enable属性设置为false时,OnGUI()就失去作用了。 7.DontDestroyOnLoad() 进如另一个场景时,保证绑定此脚本的对象的内存不被释放掉。也就是说绑定此脚本的GameObject在下一个场景中依然存在。 二:事件响应函数 OnMouseOver鼠标移入GUI空间或者碰撞体时调用 OnMouseEnter鼠标停留在GUI控件或者碰撞体时调用 OnMouseExit鼠标移出GUI控件或者碰撞体时调用 OnMouseDown鼠标在GUI控件或者碰撞体上按下时调用 OnMouseUp鼠标按键释放时调用 OnTriggerEnter当其他碰撞体进入触发器时调用 OnTriggerExit当其他碰撞体离开触发器时调用 OnTriggerStay当其他碰撞体停留在触发器时调用 OnCollisionEnter当碰撞体与刚体与其他碰撞体或刚体接触时调用 OnCollisionExit当碰撞体与刚体与其他碰撞体或刚体停止接触时调用 OnCollisionStay当碰撞体与刚体与其他碰撞体或刚体保持接触时调用 OnControllerColliderHit当控制器移动时与碰撞体发生碰撞时调用 OnBecomeVisible当任意一个相机可见时调用 OnBecomeInvisible当任意一个相机不可见时调用 OnEnable对象启用或者激活时调用 OnDisable 对象禁用或者取消激活时调用 OnDestroy脚本销毁时调用 OnGUI渲染GUI和处理GUI时调用。
MonoBehaviour中的事件响应函数都是已On开头的,比如:鼠标事件,脚本激活、销毁,碰撞等
OnApplicationFocus:当玩家获得或失去焦点时发送给所有游戏物体。可以作为协同程序,在函数中使用yield语句即可
OnApplicationPause:当玩家暂停时发送到所有的游戏物体。可以作为协同程序,在函数中使用yield语句即可。
OnApplicationQuit:在应用退出之前发送给所有的游戏物体。当用户停止运行模式时在编辑器中调用。当web被关闭时在网络播放器中被调用。
OnBecameInvisible:当renderer(渲染器)在任何相机上都不可见时调用OnBecameInvisible。
OnBecameVisible:当renderer(渲染器)在任何相机上可见时调用OnBecameVisible。
OnCollisionEnter:当此collider/rigidbody与另一个rigidbody/collider接触时调用。
OnCollisionExit:当此collider/rigidbody停止触发另一个rigidbody/collider时。
OnCollisionStay:当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。
OnConnectedToServer:当你成功连接到服务器时,在客户端调用。
OnDisconnectedFromServer:失去连接或从服务器端断开时在客户端调用。
OnFailedToConnectToMasterServer:当连接主服务器出现问题时在客户端或服务器端调用。
OnControllerColliderHit:在移动的时,当controller碰撞到collider时OnControllerColliderHit被调用。
OnDestroy:脚本销毁时调用。
OnDisable:对象禁用或者取消激活时调用。
OnEnable:对象变为可用或激活状态时此函数被调用。
OnDrawGizmosSelected:如果想在物体被选中时绘制gizmos,执行这个函数。
OnGUI:渲染和处理GUI事件时调用。
OnJointBreak:当附在同一对象上的关节被断开时调用。
OnLevelWasLoaded:一个新关卡被载入时此函数被调用。
OnMouseDown、OnMouseDrag、OnMouseEnter、OnMouseExit、OnMouseOver、OnMouseUp:鼠标事件。
OnMouseUpAsButton:只有当鼠标在同一个GUIElement或Collider按下,在释放时调用。
OnTriggerEnter:当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。
OnTriggerExit:当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。
OnTriggerStay:当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。