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

数据预处理的分箱操作

数据分箱 介绍 我们在建立模型前,一般需要对特征变量进行离散化,特征离散化后,模型会更稳定,降低模型过拟合的风险。尤其是采用 logsitic 建立评分卡模型时,必须对连续变量进行离散化。而特征离散化处理通常采用的就是分箱法,数据分箱(也称为离散分箱或分段)是一种数据预处理技术,用于减少次要观察误差的影响,提高泛化性。 数据分箱又分为有监督分箱和无监督分箱,是否使用标签进行离散化(分箱)决定了有监督还是无监督的离散化方法。 知识点 无监督分箱 split 分箱 merge 分箱 无监督分箱 这里为了

随笔记 5334

LD14激光雷达与STM32F103C8T6(标准库)获取雷达360度数据(1)

LD14激光雷达与STM32F103C8T6(标准库)获取雷达360度数据(1)

qq_54206194的博客 3899

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

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

Stone的博客 4203

UFS Link Startup全流程解析:从硬件初始化到链路稳定的5个关键阶段

本文详细解析了UFS Link Startup的全流程,从硬件初始化到链路稳定的5个关键阶段,包括初始化阶段、数据通道发现、数据通道重新对齐、链路启动收尾和能力交换阶段。通过时序分析、代码实现和实际案例,帮助开发者掌握UFS协议链路启动的技术细节,确保设备与主机之间的可靠通信。

weixin_30687051的博客 431

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

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

秩沅 500

思科模拟器实战:MQTT协议实现物联网设备通信全流程解析

本文详细解析了如何在思科模拟器中利用MQTT协议实现物联网设备通信的全流程。通过搭建网络拓扑、配置MQTT Broker与客户端,并编写发布/订阅逻辑,手把手指导读者完成一个“开关控制电灯”的经典物联网场景实验,帮助零成本掌握物联网通信核心。

weixin_29294975的博客 382

Fastwhisper + Pyannote 实现 ASR + 说话者识别

最近在研究ASR相关的业务,也是调研了不少模型,踩了不少坑,ASR这块,目前中文普通话效果最好的应该是阿里的modelscope上的中文模型了,英文的话,还是非whisper莫属了,而且whisper很变态,粤语效果也还不错,因此,如果实际业务中需要涉及到不同的语言,还是更推荐whisper多一点faster-whisper是使用CTranslate2对OpenAI的Whisper模型的重新实现,CTranslate2是一个用于Transformer模型的快速推理引擎。

qq_44193969的博客 1万+

Awake、Start 和 Update 函数的调用情

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

Bulling_的博客 658

Android系统去掉长按webview界面弹框中的分享功能

Android 系统去解决长按显示内容,去掉分享功能,不论那个界面,是所有界面都需要满足。如果仅仅去掉系统自带的,那么系统来处理如果客户自定义,部分App自定义的菜单项,不是调用系统的,那么还是需要应用去解决的。之前做过Editext,其实还需要去TextView,最难点的就是WebView中的HTML了 去分享功能了。WebView中涉及到分享功能菜单的界面,/***//***//***//***//***//***//***//***//**

十年饮冰,难凉热血 1019

awake与Start区别(unity)

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

weixin_43846020的博客 412

从码农到生态建造者:我的一人公司运作方案

华哥·OPC 运营方案 v1.0 - 第一次迭代 🚀,搭建闭环生态系统,赋能 AI 时代的超级个体,更好的做自己,同时照亮别人。

AaronZZH 的博客 996

Coze智能体开发:搭建一个解析 PDF 文件的工作流

大模型本身并不具备文件读取和解析的能力,无法直接处理文件字节流。对于支持工具调用(Function calling)的模型,扣子提供插件功能来帮助大模型调用外部工具 API,拓展大模型的能力边界。扣子插件商店提供海量官方插件和第三方插件,例如链接读取插件可以将链接对应的文件内容解析为纯文本传递给大模型。

王国平的博客 2814

Unity Awake() Enable() Start()

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

lMonster81 2302

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

本文由原创⭐。

秩沅 490

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

Awake Start

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

konglingbin66的专栏 502

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

余额充值