Unity Manual之MonoBehaviour

Unity Manual之MonoBehaviour

Namespace: UnityEngine
Inherits from: Behaviour


MonoBehaviour 是每个脚本派生的类的基类。

每个Javascript脚本自动继承MonoBehaviour,使用C#或Boo时,需要显式继承MonoBehaviour.

注意:MonoBehavior对象(编辑器中)的复选框,只有在其有Start(),Awake(),Update(), FixedUpdate()和 OnGUI()函数时显示,没有这些函数时则隐藏。


Unity Manual之MonoBehaviour_第1张图片

Unity Manual之MonoBehaviour_第2张图片

Unity Manual之MonoBehaviour_第3张图片

Unity Manual之MonoBehaviour_第4张图片

Unity Manual之MonoBehaviour_第5张图片

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");
    }
}

Awake不能用作协同程序


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);
    }
}

为了获取自最后一次调用FixedUpdate所用的时间,可以用Time.deltaTime。这个函数只有在Behaviour启用时被调用。实现组件功能时重载这个函数。


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();
 
    }
}

OnCollisionEnter可以被用作协同程序,在函数中调用yield语句。


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);
    }
}

OnCollisionExit 可以被用作协同程序,在函数中调用yield语句。


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);
        }
    }
}

OnCollisionStay 可以被用作协同程序,在函数中调用yield语句。


7、MonoBehaviour.OnDestroy() 当销毁


当MonoBehaviour将被销毁时,这个函数被调用。

OnDestroy被调用只会在预先已经被激活的游戏物体上。

using UnityEngine;
using System.Collections;
 
public class ExampleClass : MonoBehaviour {
    void OnDestroy() {
        print("Script was destroyed");
    }
}

OnDestroy不能用于协同程序。


8、MonoBehaviour.OnDisable() 当禁用


当对象变为不可用或非激活状态时此函数被调用。

当物体被销毁时它将被调用,并且可用于任意清理代码。当脚本编译完成之后被重加载时,OnDisable将被调用,OnEnable在脚本被载入后调用。

using UnityEngine;
using System.Collections;
 
public class ExampleClass : MonoBehaviour {
    void OnDisable() {
        print("script was removed");
    }
}

OnDisable不能用于协同程序。


9、MonoBehaviour.Update() 更新


当MonoBehaviour启用时,其Update在每一帧被调用。

Update是实现各种游戏行为最常用的函数。

using UnityEngine;
using System.Collections;
 
public class ExampleClass : MonoBehaviour {
    void Update() {
        transform.Translate(0, 0, Time.deltaTime * 1);
    }
}

为了获取自最后一次调用Update所用的时间,可以用Time.deltaTime。这个函数只有在Behaviour启用时被调用。实现组件功能时重载这个函数。


你可能感兴趣的:(Unity Manual之MonoBehaviour)