Unity中Awake与Start函数的调用情况总结

Unity中Awake与Start函数的调用情况总结


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


1、  Awake函数

        首先,我们来看unity的参考手册中对Awake函数的一些说明情况:

        当脚本实例被加载时会调用Awake函数;Awake函数在所有的游戏对象被初始化完毕之后才会被调用;在脚本实例的整个生命周期中,Awake函数仅执行一次。那么,脚本实例何时被加载,脚本实例的整个生命周期又代表了什么,因为对这些概念存有疑惑,所以在此基础之上,自己又在引擎中进行了一些测试,通过打印输出的方式查看了一下Awake函数的执行情况,总结如下(没有特殊说明,均为在不切换场景的前提下):


       (1)      如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数不会执行;反之,如果游戏对象的初始状态为开启状态,那么Awake函数会执行。并且,值得注意的一点是,Awake函数的执行与否与脚本实例的状态(启用或禁用)并没有关系,而是与脚本实例所绑定的游戏对象的状态有关。


       (2)      在不切换场景的前提下,原本处于关闭状态的游戏对象,当它被首次开启时,Awake函数会执行,并且是只在首次开启时才会执行;而已经开启(激活)的游戏对象(Awake函数已经执行过一次),将它关闭后再次开启,Awake函数不会再次执行。看来这是对应了手册中说明的在脚本实例的整个生命周期中仅执行一次的情况。


       (3)      如果重新加载场景,那么场景内Awake函数的执行情况重新遵循上述两点。


2、  Start函数

        还是先看参考手册中对Start函数的一些说明情况:

        当Update函数第一次被调用前会调用Start函数;Start函数只在脚本实例被启用时才会执行;Start函数总是在Awake函数之后执行。在此基础之上,自己的测试总结如下 (没有特殊说明,均为在不切换场景的前提下):


       (1)      如果游戏对象被关闭,那么Start函数不会执行。想一想这是理所当然的,游戏对象关闭了,脚本实例不会被加载,Awake函数不会执行,Start函数不会执行,Update函数等也不会执行。


       (2)      如果游戏对象开启了,对象上绑定的脚本实例被禁用了,那么Start函数不会执行。这是Start函数的特点,只有在脚本实例被启用时它才会执行,这个说明中有提到。注意,这与Awake函数是有区别的。


       (3)      如果游戏对象开启了,对象上绑定的脚本实例也开启了,那么Start函数会执行。并且Start函数只会在脚本实例首次被开启时才会执行。如果是已经开启过的脚本实例被关闭后再次开启,那么Start函数不会再次执行。


       (4)      如果重新加载场景,那么场景内Start函数的执行情况重新遵循上述三点。

 

        除此之外,还有对Awake函数和Start函数都比较重要的一点,那就是当游戏对象之间存在父子关系时(不论层级的多少)。这时,父游戏对象的状态(开启或关闭)完全决定了子游戏对象上的脚本函数的执行情况。总的来说就是,只有在父游戏对象被开启的状态下,程序才会考虑是否调用子游戏对象上的脚本函数(Awake与Start等)。自上而下,以此类推。

        最后,自己对于Awake与Start函数的使用,一般都是在Awake函数中获取游戏对象或者脚本实例的信息,然后在Start函数中进行一些获取之后的初始化设置。具体情况,还要根据需求灵活变化。总结就到这里了,谢谢大家的阅读,欢迎批评指正。



        本文出自杜晓萌的博客,未经特殊表明皆为本人原创,请勿用于任何商业用途,转载请保持完整性并标明出处:http://blog.youkuaiyun.com/haohan_meng


此插件为跨域插件,打开后可跨域访问接口,旧版浏览器可直接拖到扩展程序中安装,新版浏览器需要将扩展名修改成rar并解压,然后点击“加载已解压的扩展程序”安装。 ======================插件概述谷歌译文====================== 轻松将(Access-Control-Allow-Origin:*)规则添加到响应标头。 允许CORS:通过Access-Control-Allow-Origin,您可以轻松地在Web应用程序中执行跨域Ajax请求。 只需激活插件并执行请求。默认情况下(在JavaScript API中),CORS或跨源资源共享在现代浏览器中被阻止。安装此加载项将使您可以解除阻止此功能。请注意,将插件添加到浏览器后,默认情况下它处于非活动状态(工具栏图标为灰色C字母)。如果要激活加载项,请按一次工具栏图标。图标将变为橙色的C字母。 ======================插件概述谷歌译文====================== ========================插件概述原文======================== Easily add (Access-Control-Allow-Origin: *) rule to the response header. Allow CORS: Access-Control-Allow-Origin lets you easily perform cross-domain Ajax requests in web applications. Simply activate the add-on and perform the request. CORS or Cross Origin Resource Sharing is blocked in modern browsers by default (in JavaScript APIs). Installing this add-on will allow you to unblock this feature. Please note that, when the add-on is added to your browser, it is in-active by default (toolbar icon is grey C letter). If you want to activate the add-on, please press on the toolbar icon once. The icon will turn to orange C letter. ========================插件概述原文========================
Access-Control-Allow-OriginCORS(跨域资源共享)中的一个关键字段。它用于确定哪些源(域)可以访问特定的资源。在CORS中,服务器通过在HTTP响应头中设置Access-Control-Allow-Origin字段来指定允许访问该资源的源。 根据引用,Access-Control-Allow-Origin的值是单数,表示只允许一个源进行访问。如果设为Access-Control-Allow-Origins,则表示允许多个源进行访问。 根据引用,可以通过设置HTTP响应头中的Access-Control-Allow-Origin字段来指定允许访问资源的源。例如,可以设置多个Access-Control-Allow-Origin字段,每个字段对应一个允许访问的源。 根据引用,Access-Control-Allow-Origin字段也可以设置为星号(*),表示允许任意跨源请求。这意味着任何源都可以访问该资源。 总结起来,Access-Control-Allow-OriginCORS中用于确定哪些源可以访问特定资源的字段,它可以单独指定一个源,也可以设置多个源,甚至可以设置为星号表示允许任意跨源请求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Cors跨域(三):Access-Control-Allow-Origin多域名?](https://blog.youkuaiyun.com/f641385712/article/details/117902613)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Access-Control-Allow- 设置跨域资源共享CORS详解](https://blog.youkuaiyun.com/zhangge3663/article/details/117409636)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值