文章目录

新建一个 C# 脚本,在 MonoDevelop 中打开脚本,我们会发现,只要在 Unity 中国年创建的脚本,默认都是集成自 MonoBehaviour的,像这种集成自MonoBehaviour的类或者脚本称之为运行时类,继承自MonoBehaviour的类都不能手动进行实例化,当然在脚本中也可以创建一个类不继承MonoBehaviour

脚本创建完成后,系统会默认创建两个方法,分别是Start ()Update (),但是这两个方法并不是 MonoBehaviour 中定义的方法,这两个方法是通过反射调用的一些事件,会在特定的时间调用,由系统决定,方法名一定不能写错,方法名写错,系统并不会报错。这些方法定义了一个脚本从被加载到被销毁的过程中脚本的生命周期,除了这两个方法,还有几个方法,分别是 Awake()OnEnable()LateUpdate()OnDisable()OnDestroy(),包括还有其他的方法,比如说OnGUI()FixedUpdate()。运行脚本可以查看输出,Awake()OnEnable()OnDisable()OnDestroy()只输出一次,Start ()LateUpdate()Update ()会循环打印。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

// Use this for initialization
//在第一次调用 Update 之前会调用一次
//有时也会在 Start 方法中做一些初始化操作
void Start () {
//初始化 private 成员
print ("Start");
}

// Update is called once per frame
// 每帧调用一次,接近 60帧/s
void Update () {
print ("Update");
}
//每当脚本被加载时调用
//习惯在 Awake 中做一些初始化操作
void Awake() {
//初始化 public 成员
print ("Awake");
}
//每次激活脚本时都会调用
void OnEnable () {
print ("OnEnable");
}
// 在 update 方法调用完之后调用,一般来处理画面的逻辑
void LateUpdate () {
print ("LateUpdate");
}
// 取消激活状态后调用
void OnDisable () {
print ("OnDisable");
}
// 脚本被销毁时调用一次
// 比如游戏中的怪物死亡之后,会掉落一些装备,可以在 Destroy 里写相应的逻辑
void OnDestroy (){
print ("OnDestroy");
}
// 基本处于激活状态,持续调用的方法,一般用来做编辑器扩展或 Debug 时使用, IMGUI 代码也要写在 OnGUI 中
void OnGUI () {
print ("OnGUI");
}
// 以固定的频率调用,不会受到图像刷新速率的影响,一般把处理物理的代码放到 FixedUpdate 中
void FixedUpdate() {
print ("FixedUpdate");
}
}

//可以创建一个不继承自MonoBehaviour的类
public class A {
public void test() {
//不能使用 new 手动创建一个MonoBehaviour对象
//NewBehaviourScript *script =new NewBehaviourScript();
}
}

脚本的生命周期

运行脚本

文章目录