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

用FPGA控制步进电机是种什么体验?从状态机到分频器,详解Verilog驱动A4988全流程

本文详细介绍了如何使用FPGA通过Verilog语言控制步进电机,从状态机设计到A4988驱动模块的精准控制全流程。FPGA的并行处理能力和纳秒级响应速度使其在步进电机控制中展现出显著优势,特别适合工业自动化和精密仪器应用。通过实战代码示例,展示了如何实现高效的状态机设计和可编程分频器,为开发者提供了一套完整的FPGA驱动步进电机解决方案。

weixin_30983965的博客 329

【侯俊霞全网最全收集--PLC1200/200SMART(88+93课时) 第1章】

第1章:零基础快速入门西门子S7-1200

问就ycy的博客 2044

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

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

Stone的博客 4203

【NVIDIA驱动的顽固问题】---- /dev/sdax:clean,xxx/xxx files,xxx/xxx blocks ---- 最全解决方法

本文的意义在于整理总结关于此问题的全部解决方法,希望能给大家节约时间。

lc1852109的博客 3128

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

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

秩沅 500

ADI官方例程HDL和No-OS生成Vivado工程

这一步是选择下载源,一般都是选择国内镜像,因为国外的源太慢了,这里选择阿里的镜像,如果没有这个选项可以在下面的User URL里添加就行,选择好源后然后点击下一步。下一步会从你选择的源上下载软件包目录,如果提示Unable to get setup from https://xxxxxx/,返回上一步,选择别的源,例如第二个163网易的源。然后就是你想要安装在哪了,下面的选项好像会决定环境变量存放在哪,不过一般都是个人电脑选择第一个默认的就行,然后点下一步。下好之后双击打开,就是这个界面了,直接点下一步。

代码匠的博客 3832

pytorchDataLoader中调整数据长度不一致问题(lstm等)

数据长度不一致 用pytorch做rnn的时候,如果输入数据不一样长,可以用两种方式解决。 一种是自定义collate方法, #自定义collate_fn dataloader.DataLoader(dataset,4,True,collate_fn=my_collate) 然后里面写数据和标签载入方式即可 def my_collate(batch): data = [item[0] for item in batch] target = [item[1] for item in batc

weixin_48174100的博客 7771

Awake、Start 和 Update 函数的调用情

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

Bulling_的博客 658

CANoe/CAPL ,远程邮件通知

CANoe/CAPL ,远程邮件通知

蚂蚁小兵 3037

awake与Start区别(unity)

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

weixin_43846020的博客 412

Agent应用实践之二十九 - 设计模式:人机协同

本章讲解了一种比较常见的设计模式:人机协同。通过一些场景举例,同时使用AgentScope本身自带的能力实现的人机协同模式,最后通过源码分析了AgentScope中如何实现。通过了解人机协同模式对于实际工程使用也是非常有用的。

代码让AI扣 306

内存越界一定会导致程序崩溃吗?详解内存越界

本文详细解释了内存越界不一定导致内存越界的问题,全面介绍了C++内存越界的相关内容。

dvlinker的技术专栏 2万+

Unity Awake() Enable() Start()

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

lMonster81 2302

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

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

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

本文由原创⭐。

秩沅 490

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Awake Start

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

konglingbin66的专栏 502

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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、付费专栏及课程。

余额充值