Namespace: UnityEngine
Inherits from: Behaviour
MonoBehaviour 是每个脚本派生的类的基类。
每个Javascript脚本自动继承MonoBehaviour,使用C#或Boo时,需要显式继承MonoBehaviour.
注意:MonoBehavior对象(编辑器中)的复选框,只有在其有Start(),Awake(),Update(), FixedUpdate()和 OnGUI()函数时显示,没有这些函数时则隐藏。
1、MonoBehaviour.print 打印
输出日志消息到Unity控制台。等同Debug.Log。
2、MonoBehaviour.Awake() 唤醒
当该脚本实例被载入时Awake被调用。
Awake用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如 GameObject.FindWithTag 这样的函数搜索它们。每个游戏物体上的Awke以随机的顺序被调用。因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息Awake总是在Start之前被调用。它不能用来执行协同程序。
C#和Boo用户注意:使用Awake替代构造函数用来初始化,物体被构造时并没有定义组件的序列化状态。Awake像构造函数一样只被调用一次。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
private GameObject target;
void Awake() {
target = GameObject.FindWithTag("Player");
}
}
3、MonoBehaviour.FixedUpdate() 固定更新
当MonoBehaviour启用时,其 FixedUpdate 在每一帧被调用。
处理Rigidbody时,需要用FixedUpdate代替Update。例如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void FixedUpdate() {
rigidbody.AddForce(Vector3.up);
}
}
4、MonoBehaviour.OnCollisionEnter(Collision) 当进入碰撞
当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionEnter将被调用。
相对于OnTriggerEnter,OnCollisionEnter传递的是Collision类而不是Collider。Collision包含接触点,碰撞速度等细节。如果在函数中不使用碰撞信息,省略collisionInfo参数以避免不必要的运算。注意如果碰撞体附加了一个非动力学刚体,只发送碰撞事件。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void OnCollisionEnter(Collision collision) {
foreach (ContactPoint contact in collision.contacts) {
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
if (collision.relativeVelocity.magnitude > 2)
audio.Play();
}
}
5、MonoBehaviour.OnCollisionExit(Collision) 当退出碰撞
当此collider/rigidbody停止触发另一个rigidbody/collider时,OnCollisionExit将被调用。
相对于OnTriggerExit,OnCollisionExit传递的是Collision类而不是Collider。Collision包含接触点,碰撞速度等细节。如果在函数中不使用碰撞信息,省略collisionInfo参数以避免不必要的运算.注意如果碰撞体附加了一个非动力学刚体,只发送碰撞事件。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void OnCollisionExit(Collision collisionInfo) {
print("No longer in contact with " + collisionInfo.transform.name);
}
}
6、MonoBehaviour.OnCollisionStay(Collision) 当停留碰撞
当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。
相对于OnTriggerExit,OnCollisionExit传递的是Collision类而不是Collider。Collision包含接触点,碰撞速度等细节。如果在函数中不使用碰撞信息,省略collisionInfo参数以避免不必要的运算.注意如果碰撞体附加了一个非动力学刚体,只发送碰撞事件。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void OnCollisionStay(Collision collisionInfo) {
foreach (ContactPoint contact in collisionInfo.contacts) {
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
}
}
7、MonoBehaviour.OnDestroy() 当销毁
当MonoBehaviour将被销毁时,这个函数被调用。
OnDestroy被调用只会在预先已经被激活的游戏物体上。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void OnDestroy() {
print("Script was destroyed");
}
}
8、MonoBehaviour.OnDisable() 当禁用
当对象变为不可用或非激活状态时此函数被调用。
当物体被销毁时它将被调用,并且可用于任意清理代码。当脚本编译完成之后被重加载时,OnDisable将被调用,OnEnable在脚本被载入后调用。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void OnDisable() {
print("script was removed");
}
}
9、MonoBehaviour.Update() 更新
当MonoBehaviour启用时,其Update在每一帧被调用。
Update是实现各种游戏行为最常用的函数。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void Update() {
transform.Translate(0, 0, Time.deltaTime * 1);
}
}