U3d生命周期-Awake,Start,OnEnable,Reset

1、MonoBehaviour.Awake() 唤醒

当一个脚本实例被载入时Awake被调用。

Awake被用于在游戏开始之前初始化变量或者游戏情景。在脚本整个生命周期内它仅被调用一次。Awake在所有对象被初始化之后调用,因此你可以安全的与其他对象对话或用诸如 GameObject.FindWithTag 这样的函数访问它们。

:每个游戏物体上的Awke随机的顺序被调用。由于这些,你应该用Awake去设置脚本之间的引用,并用Start反复地传递任何信息。Awake在任何Start函数之前被调用。它不能用来执行协同程序。
Awake()函数所在的脚本的enable是关闭的情况下,Awake()函数仍被调用。

给C#和Boo用户的注释:在物体被建造时,Awake不同于构造函数,没有定义组件的序列化状态。Awake只被调用一次,像构造函数一样。

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    private GameObject target;
    void Awake() {
    //找到一个Tag为"Player"的实体,将其赋值给target
        target = GameObject.FindWithTag("Player");
    }
}

2、MonoBehaviour.Start() 开始

Start被调用一次当脚本设置为enable=true且仅仅在Update类函数之前。

和Awake函数一样,整个脚本生命周期只被调用一次。然而,当脚本初始化时,Awake被调用,无论脚本的enable的值是false或者true。在脚本一次生命周期里,当脚本的enable的值是false,可能Start不被调用,而Awake被调用,在工程中。

当在场景里时,在所有实体的Start函数被调用之前,所有实体的Awake函数被调用。这个情况是有意义的,假设,当A初始化要B已经初始化完成,而B的初始化代码在A的Awake里,A的初始化可以放在自己的Start里。


3、MonoBehaviour.Reset() 重置

重置为默认的值。

当用户点击检视快捷键的Reset按钮或者第一次添加该组件时,Reset被调用。Reset函数仅仅在编辑模式下被调用。Reset最常用于在检视快捷键中给一个最好的默认值。

:按个人习惯,当脚本有修改后,将脚本删除然后再次添加,这样可以避免遗漏。

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public GameObject target;
    void Reset() {
    //如果target为空,找到一个Tag为"Player"的实体,将其赋值给target
        if (!target)
            target = GameObject.FindWithTag("Player");

    }
}

4、MonoBehaviour.OnEnable() 当启用

当对象被启用并激活状态时此函数被调用。

:在游戏需要在不切换场景的情况下重置玩家位置姿态等信息时,可以将玩家的初始位置姿态等信息写在OnEnable()中,然后只需要关闭再打开脚本就可以再执行一次初始化!

using UnityEngine;
using System.Collections;
 
public class ExampleClass : MonoBehaviour {
    void OnEnable() {
        print("script was enabled");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值