unity 脚本的生命周期与执行顺序

432 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

脚本初始化

脚本挂载在游戏物体上 ,在游戏运行时会立即执行初始化方法Awake() ,接下来就会执行Start()方法

初始化脚本在整个生命周期只会执行一次

脚本销毁

游戏对象被删除就会执行onDestroy() 方法

脚本的禁用与启用

image-20221010110521306

如图 脚本上的 checkBox ,勾上就会 调用 OnEnable()方法 ,反之 OnDisable()

脚本的 更新方法

  • Update() 方法 会在游戏的每一帧调用一次 ,具体速度取决于电脑的配置
  • LateUpdate() :Update ()方法执行完成之后就会被调用
  • FixedUpdate(): 固定时间调用一次 默认为0.02秒一次 ,也可以手动修改image-20221010111609499
//第一次被调用
private void Awake()
{
  Debug.Log("Awake is called");
}
​
//脚本被启用时被调用
private void OnEnable()
{
    Debug.Log("move Script is Active");
}
​
// Start is called before the first frame update   
//第一帧会被调用
void Start()
{
    
}
​
// Update is called once per frame
//每一帧被调用一次
void Update()
{
    
}
//update调用后会被调用
private void LateUpdate()
{
​
}
//每间隔固定的时间被调用一次 
private void FixedUpdate()
{
   // Debug.Log("fix Update");
}
​
private void OnDisable()
{
    Debug.Log("script 非激活时调用");
}
​
private void OnDestroy()
{
    Debug.Log("Script 被取消时调用");
}

多脚本的执行顺序

在游戏启动之后,Unity对所有游戏脚本进行处理

它会先处理所有脚本的Awake方法 让后start 以此类推

那么让哪个脚本的Awake 等等方法先执行呢?

点击脚本的Execution Order

image-20221010113530900

image-20221010113639996

在这里我们就可以定制脚本的执行顺序

一般情况下在Awake方法中完成数据的初始化工作

这样在Start 中访问数据的时候就不会出现 空指针异常

注:

避免在脚本中写空方法 ,因为unity需要遍历调用所有的脚本,在发反射调用每一个脚本的生命周期方法,然而放射是一个很费时的操作

参考:unity3D游戏开发(第二版)