awake等瞰 unity3d
2017-03-27 21:58:25 ZHM_YX 阅读数 327
1.两个函数都只会被调用一次;
2.Awake方法在所有游戏对象初始化完之后才会被调用,所以可以安全的在Awake方法中引用或请求其它游戏对象数据;
3.在Unity中用Awake来代替c#中的构造函数,所以:
1可以用Awake来初始化变量和游戏状态;
2各脚本的Awake的调用顺序是未定义的。

4.Start只有在脚本被启用的时候才会被调用
5.在任何对象的Start调用之前,其他所有的对象的Awake都已经被调用(后来才生成的对象除外)
6.“Where objects are instantiated during gameplay, their Awake function will naturally be called after the Start functions of scene objects have already completed.”
例如,screen上有5个gameObject----A、B、C、D、E,现在Unity为我们随机到的执行顺序是C、E、A、D、B。
假如此时我们在A中的Start中Instantiate一个新的gameObejct----F,这个F的Awake是会跟着A的Start后执行的。具体这个是要看A的执行顺序。




相关文档
http://blog.csdn.net/xi_niuniu/article/details/49760695
http://jingyan.baidu.com/article/d71306352f1c5b13fdf47586.html
官方API
https://docs.unity3d.com/ScriptReference/MonoBehaviour.Awake.html
https://docs.unity3d.com/ScriptReference/MonoBehaviour.Start.html
2015-06-18 14:41:59 yaoyuan110 阅读数 230

unity3d Awake和 Start 区别<<<>>>

1,经过使用脚本测试. Awake() 在编译其实就执行。(不管你的代码有没有被激活,前提是脚本挂在对象上)

2,Start 是在Awake后面执行。(此方法执行创建实例后)

2015-11-10 17:05:01 xi_niuniu 阅读数 3494


       在Unity3d游戏程序运行时所有附加到游戏对象上的脚本组件都会运行, Awake方法和Start方法都只会运行一次,多用于数据初始化。 这两个方法的执行顺序是: 先执行Awake方法,再执行Start方法




当脚本设置为不可用时

Awake方法仍然会执行一次,而Start方法则不会执行!



在游戏开始之前Awake用来初始化变量或游戏状态。 Awake方法在脚本生命周期中只会被调用一次。Awake方法在所有游戏对象初始化完之后才会被调用,所以可以安全的在Awake方法中引用或请求其它游戏对象数据。 所有游戏对象的Awake方法调用顺序是随机的。所以应该全用Awake方法来设置脚本之间的引用,而使用Start方法来互相来回传递信息。Awake方法总是在任何的Start方法调用之前调用。Awake不能做为协同(coroutine)使用

在Unity中使用Awake方法做为初始化器,而不是使用C#语法中的构造函数。在构造函数中进行初始化组件的序列化状态是未定义的。就像构造函数一样,Awake只调用一次。

2018-12-04 09:38:19 A13155283231 阅读数 66

Awake

只会调用一次,无论挂载的对象active是不是true都会调用

Start

只会调用一次,只有挂载的对象active是true才会调用

OnEnable

每次挂载的对象active被设置为true调用一次

怎样多次调用 Awake Start

在OnEnable里调用 或者设成public自己从别的地方调用

执行顺序

2016-02-25 16:10:49 ixianjian 阅读数 10198
最近在面试中遇到这样的问题,没有能够很好的回答,回来后经过试验和查验资料,发现一篇文章讲解的比较完整,直接搬过来翻译一下吧

原文地址:http://answers.unity3d.com/questions/217941/onenable-awake-start-order.html

直接说说结果吧:

同一个脚本上的这四个方法在初始化时的执行顺序总是如下:

Awake()->OnEnable()->OnLevelWasLoaded()(仅在场景改变时)->Start();

但如果这个脚本.Enable=false;顺序就会变了:

OnLevelWasLoaded()(仅在场景改变时)会最先执行,然后是Awake(),而OnEnale()和Start()直到Enable=true时才执行;

对于不同的脚本的四类方法的执行顺序是交错的,假设我们声明一个特殊的自定义的顺序:A<B,那么执行顺序:

A.Awake()->A.OnEnable()->B.Awake()->B.OnEnable()->?.OnLevelWasLoaded()->?.OnLevelWasLoaded()->A.Start()->B.Start()
?表示无法确定谁先执行

如果一个脚本是DontDestroyOnLoad(),则情况会更加复杂,执行顺序会如下,而自定义的顺序将不再遵守

Awake()仅在最初始状态执行一次,之后不再执行;
OnEnable()->OnLevelWasLoaded();//当DontDestroyOnLoad为false时,这2个顺序相反;
Start()仅在最初始状态执行一次,之后不再执行;

此外,对于自定义的执行顺序A<B 还存在一个Bug,
如果A有OnEnable()而B没有:A.Awake()->A.OnEnable()->B.Awake();
如果B有OnEnable()而A没有: B.Awake()->B.OnEnable()-<A.Awake()!!!!!!


当然,那是12年的一篇文章,现在Unity版本进入5时代,还是要多测试

总之:Awake和OnEnable总是先于Start执行,至于不同脚本间的Awake和OnEnable之间并没有确定的先后关系。

[Unity3D]Start和Awake方法的区别

阅读数 299

Start和Awake方法的区别和使用1.AwakeAwakeiscalledwhenthescriptinstanceisbeingloaded.Awake方法在脚本实例正在被加载的时候调用Awake方法在脚本的生命周期中只调用一次Awake方法会在所有object都初始化后调用,所以不用担心object还没有加载出来,GameObject的f...

博文 来自: wayway0554

[Unity3D]脚本中Start()和Awake()的区别

阅读数 328

Unity3D初学者经常把Awake和Start混淆。简单说明一下,Awake在MonoBehavior创建后就立刻调用,Start将在MonoBehavior创建后在该帧Update之前,在该Monobehavior.enabled==true的情况下执行。void Awake (){  }       //初始化函数,在游戏开始时系统自动调用。一般用来创建变

博文 来自: sh15285118586

unity3d中awake和start函数的理解。

阅读数 696

在Unity中编写脚本时,有一系列的可重写(override)函数供我们使用,其中的Awake与Start两个函数作为初始化与设置之用,几乎在每个脚本中都要用到。因此,正确的把握这两个函数的调用时机,就能让我们在程序开发过程中避免一些错误,提高开发效率。比较懒,所以就没有上图,欢迎大家的批评指正:)1、 Awake函数    首先,我们来看unity的参考手

博文 来自: qq_18536721

Unity3d中的Awake()、OnEnable()、Start()等默认函数的执行顺序和生命周期

阅读数 660

Awake()在MonoBehavior创建后就立刻调用,在脚本实例的整个生命周期中,Awake函数仅执行一次;如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数不会执行;如果游戏对象的初始状态为开启状态,那么Awake函数会执行;值得注意的一点是,Awake函数的执行与否与脚本实例的状态(启用或禁用)并没有关系,而是与脚本实例所绑定的游戏对象的开关状态有关。

博文 来自: liuyangsds

Unity3d中的Awake()、OnEnable()、Start()等默认函数的执行顺序和生命周期

阅读数 536

Awake()在MonoBehavior创建后就立刻调用,在脚本实例的整个生命周期中,Awake函数仅执行一次;如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数不会执行;如果游戏对象的初始状态为开启状态,那么Awake函数会执行;值得注意的一点是,Awake函数的执行与否与脚本实例的状态(启用或禁用)并没有关系,而是与脚本实例所绑定的游戏对象的开关状态有关。如

博文 来自: fuemocheng
没有更多推荐了,返回首页