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

Unity游戏开发客户端Unity基础 Unity游戏开发客户端面经 之 Unity 篇 阅读详情

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


Awake函数和Start函数的区别 先说结论:   调用顺序: Awake在脚本实例被创建的时候(无论脚本组件是否被激活),在所有游戏对象被初始化之后执行。 Start在脚本的Enable属性被开启之后,在所有的Awake函数被调用之后,在update之前调用。 一般在Awake函数中对创建的变量初始化,在Start函数中对变量进行赋值。 下面放例子说明: 当我们把maintest脚本组件禁用掉之后,如果在Awake函数 阅读详情

相关推荐

Unity3d中关于Awake()、Start()、OnEnable()等的执行顺序关系

最近在面试中遇到这样的问题,没有能够很好的回答,回来后经过试验和查验资料,发现一篇文章讲解的比较完整,直接搬过来翻译一下吧 原文地址:http://answers.unity3d.com/questions/217941/onenable-awake-start-order.html 直接说说结果吧: 同一个脚本上的这四个方法在初始化时的执行顺序总是如下:

ixianjian的博客 1万+

【Unity】awake和start

生命周期中的awake和start

hoxidohanabi的博客 4459

【Unity每日一记】在Unity中如何导出3D模型(FBX)

在Unity中如何导出3D模型(FBX)

秩沅 4158

Unity 之 Start 与 Awake 的区别

Unity 之 Start 与 Awake 的区别

牛牛博士博客 3080

OV5640调试大坑,关于binning、RES分辨率与EV曝光

OV5640在使用binning模式时,必须考虑使用场景,分辨率下降叠加动态范围压缩,会使目标对象细节在高光环境下大量丢失,2x2的binning模式,分辨率会远低于感光面积的1/4。

chongyun_的专栏 1828

Uniapp-APP后台保活插件(安卓后台保活)

Uniapp-APP后台保活插件(安卓后台保活)亲测有效!

weixin_57844432的博客 1万+

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

在Unity中编写脚本时,有一系列的可重写(override)函数供我们使用,其中的Awake与Start两个函数作为初始化与设置之用,几乎在每个脚本中都要用到。因此,正确的把握这两个函数的调用时机,就能让我们在程序开发过程中避免一些错误,提高开发效率。1、  Awake函数        首先,我们来看unity的参考手册中对Awake函数的一些说明情况:        当脚本实例被加载时会调用...

Stone的博客 4203

Docker容器n8n中 read/write files from disk 无法读取容器内文件解决方案

《n8n文件读写Docker部署常见问题解决方案》摘要:针对n8n 1.90.2版本在Docker环境下文件读写失败问题,本文分析常见错误包括路径错误(ENOENT)、权限不足(EACCES)及节点误用问题。核心解决方案为:1)通过-v参数挂载宿主机目录到容器(如/files);2)使用新版Read/WriteFilesfromDisk节点操作文件;3)确保权限设置正确。提供可直接导入的示例工作流JSON,演示从CSV读取到结构化数据处理的全流程。特别强调已部署用户需重新挂载卷的正确操作方式,并附解决方案对

m0_74822402的博客 2184

【Unity细节】生命函数Start的逻辑比从外部调用方法比起来哪个快

生命函数Start的逻辑比从外部调用方法比起来哪个快

秩沅 500

【CV论文精读】【协同感知综述】Collaborative Perception for Autonomous Driving :Current Status and Future Trend

感知是自动驾驶系统的关键模块之一,近年来取得了很大进展。然而,单个车辆的有限能力导致感知性能提高的瓶颈。为了突破个体感知的局限,协作感知被提出,它使车辆能够共享信息来感知视线和视野之外的环境。本文综述了有前途的协作感知技术的相关工作,包括介绍了基本概念,概括了协作模式,总结了协作感知的关键要素和应用。最后,我们讨论了这一研究领域面临的挑战和问题,并给出了一些潜在的进一步方向。

weixin_44184852的博客 4690

中兴通讯招聘测评答题技巧,真题解析(附真题)

中兴招聘测评、中兴入职测评、中兴线上考试

guang221315221的博客 5803

Awake、Start 和 Update 函数的调用情

Unity场景转换中Awake、Start和Update函数的调用规则:Awake在脚本实例创建时立即调用,用于初始化组件和变量;Start在Awake之后运行,适合依赖其他对象的初始化;Update每帧调用实现实时逻辑。对于DontDestroyOnLoad保留的对象,Awake和Start在新场景不会被再次调用,而Update会持续执行。这些生命周期函数确保游戏对象在场景转换中正确初始化和运行。

Bulling_的博客 658

Coze:手把手教你搭建 小红书二创 智能体

前一篇 “” ,讲了如何针对需求进行拆解,并拆解 ”小红书二创“ 智能体,分为四个内容模块。通过上述步骤,开始一步一步构建 “小红书二创” 智能体。用来测试的小红书地址:http://xhslink.com/a/quxWEDAj3J48。

保持敏感!保持学习! 1436

awake与Start区别(unity)

正式开始学习Unity了。当然,第一个遇到的问题就是Awake和Start的问题,之前在网上查过一下这两者的区别,简单记忆了一下,认为自己知道了两者的区别。不过实际用起来,发现对于这两者到底是什么区别,心里还是没底,而且最关键的是木有Unityt的源代码,所以我们只能是通过文档或者是别人的blog来了解,当然,还有一个办法就是自己做一下实验,实践是检验真理的唯一标准。 官方解释 先来看看Unity...

weixin_43846020的博客 412

基于PLC的茶叶揉捻机自动控制系统设计【附代码】

茶叶揉捻是初茶加工过程中的一道关键工序,通过揉捻可以使鲜茶叶成条、碎茶及叶组织细胞破损等。影响茶叶成条率、碎茶率和叶组织细胞破损的主要因素包括揉捻时间、压力和揉捻桶转速。为了提高茶叶品质的稳定性和减轻工人的劳动强度,本文提出了一种基于PLC自动控制技术的茶叶揉捻机控制系统设计。📊 PLC自动化设计 | 毕业设计指导 | 工业自动化解决方案。✅ 具体问题可以私信或查看文章底部二维码。✅ 感恩科研路上每一位志同道合的伙伴!

lagougongzuoshi的博客 1344

【WRFDA教程第四期】雷达数据同化(Radar Data Assimilation)

雷达数据同化(Radar Data Assimilation)

WW、forever的博客 1760

Unity Awake() Enable() Start()

1、  Awake函数         首先,我们来看unity的参考手册中对Awake函数的一些说明情况:         当脚本实例被加载时会调用Awake函数;Awake函数在所有的游戏对象被初始化完毕之后才会被调用;在脚本实例的整个生命周期中,Awake函数仅执行一次。那么,脚本实例何时被加载,脚本实例的整个生命周期又代表了什么,因为对这些概念存有疑惑,所以在此基础之上,自己又在引擎中...

lMonster81 2302

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Unity细节】论复合函数在Start生命周期中的调用顺序和时间

本文由原创⭐。

秩沅 490

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Awake Start

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

konglingbin66的专栏 502

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

unity生命周期函数

():在固定的时间间隔内调用一次(一般来说是0.02s)用于执行物理计算相关的逻辑。():在Update之后调用,用于在Update逻辑执行完成后的一些额外的操作。():在Awake之后调用,用于对象在被启用前进行初始化操作。():每一帧都会被调用, 用于更新对象的状态和执行逻辑操作。():在对象被创建的时候调用 用于初始化对象的引用和状态。():在对象变为非激活状态时调用,用于清理对象状态和资源。():在对象被销毁的时候进行调用,用于清理对象状态和资源。简述unity生命周期函数一般在什么情况下调用。

2302_80303501的博客 772

【Unity细节】Unexpected timestamp values detected. This can occur in H.264 videos not encoded with the b

本文由原创🟥Unity个实战基础✨🟦 Unity个精华一记✨🟩 Unity个demo案例教程✨🟨 Unity个精华细节BUG✨。

秩沅 3057

【Unity地编细节】为什么Unity笔刷在地形上面刷不出来

+ Raise or Lower Terrain:提升或降低高度地形。选择后需要在下方Brushes中选择一 个笔剧,然后直接在场景中点击提升高度、Shift+点击降低高度 + Set Height: 将地形刷到指定高度 + Smooth Height:让地形高度变化更平滑Stamp Terrain:刻章 + Subtract: 勾选则嵌刻章,香则凸起Paint Textrue:绘制贴图 + Terrain Lyaers中添加贴图层。然后使用国面进行绘制即可 + Paint Texture绘制贴图

秩沅 3445

【Unity细节】InvalidCastException: Specified cast is not valid.(指定的强制转换无效。)

本文由原创🟥Unity个实战基础✨🟦 Unity个精华一记✨🟩 Unity个demo案例教程✨🟨 Unity个精华细节BUG✨。

秩沅 2620
上一篇: Unity中基于高度图的地形系统总结
下一篇: 基于射线检测的物体坐标调整之思路总结
杜晓萌
博客等级 码龄16年 221粉丝 70原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值