生命周期
# 生命周期
- 初始化阶段
- Awake
- onEnable
- Start
- 物理阶段
- FixedUpdate
- WaitForFixedUpdate
- OnTriggerXXX
- OnCollisionXXX
- 输入事件
- onMouseXXX
- 游戏逻辑
- Update
- LateUpdate
# 初始化阶段
# Awake
执行时机:创建游戏对象 -> 立即执行(早于Start) 作用: 初始化,仅执行一次 开始游戏的一刻执行,游戏会先将所有物件的Awake事件执行一次,然后再执行下一个生命周期。
在Unity 2020.3.27版本中,以倒序方式执行,即
- Awake Directional Light
- Awake Main Camera
- Start - Directional Light
- Start - Main Camera
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyScript : MonoBehaviour
{
private void Awake()
{
Debug.Log("AWAKE" + Time.time + "---"+this.name);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# onEnable
执行时机:每次启用脚本时 作用: 初始化
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyScript : MonoBehaviour
{
private int i;
private void Start()
{
Debug.Log("Start" + Time.time + "---"+this.name);
i = Random.Range(1,200);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# Start
执行时机:创建游戏对象 -> 脚本启用 -> 才执行 作用: 初始化,仅执行一次
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyScript : MonoBehaviour
{
private int i;
private void Start()
{
Debug.Log("Start" + Time.time + "---"+this.name);
i = Random.Range(1,200);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 物理阶段
# FixedUpdate
执行时机:固定时间执行一次,通常0.02秒(不建议修改时间) **作用:适用于做物理操作,例如物件的旋转、移动等行为,不受到渲染影响 ** 设置频率: "Edit"-> "Project Setting" -> "Time" -> "Fixed Timestep"
当Time.timeScale=0
时,FixedUpdate将不会再执行。但Update
则仍然会执行!这种差异能用于制作时停效果!其原理相当于将Time.deltaTime
设置为0,如果你希望某个物体(玩家)能在时停时照常移动,可以使用fixedDeltaTime
# 输入事件
# onMouseXXX
绑定的物品必须要有碰撞器(Collider)才能触发
- OnMouseEnter 鼠标移入
- OnMouseOver 鼠标经过
- OnMouseExit 鼠标离开
- OnMouseDown 鼠标按下
- OnMouseUp 鼠标抬起
# 游戏逻辑阶段
# Update
执行时机:渲染帧执行,执行间隔不固定 **作用:适用于做游戏逻辑 **
# LateUpdate
执行时机:Update函数被调用后执行 **作用:适用于跟随 **
# 场景渲染阶段
# OnBecameVisible / OnBecameInvisible
执行时机:当相机看到/看不到某物品的Mesh render时触发,以一帧为单位
# 结束阶段
# OnDisable
执行时机:当对象变为不可用或者附属游戏对象非激活状态时,此函数被调用
# OnDestroy
当脚本销毁或者附属游戏对象被销毁时调用
# OnApplicationQuit
程序退出时调用