首页 > 其他分享 >[Unity]为什么不要在Unity中使用构造函数

[Unity]为什么不要在Unity中使用构造函数

时间:2023-08-11 15:33:39浏览次数:36  
标签:初始化 调用 为什么 Start Unity Awake 构造函数

MonoBehaviour派生出来的类会作为Unity3D中的Component挂载在GameObject上,而GameObject会在编辑器的多个地方被显示,如场景编辑器内、Prefab选中时等,这些时候都需要调用它们的构造函数来初始化成员变量的默认值,以便在编辑器中显示它们,也就是说,构造函数的调用次数和调用时机是“完全未知的”,不符合初始化一次成员变量的使用初衷,而Awake和Start只会在游戏运行时被调用,调用时机是固定的且保证只调用一次,所以要使用Awake和Start进行初始化操作。
不过仅限于MonoBehaviour及其子类不要使用构造函数进行初始化,其他类型是可以正常作为C#对象进行初始化的。
另外就是,MonoBehaviour的构造函数和析构函数都是在另外一个线程调用的,不是游戏的主线程,这里不能调用任何UnityEngine相关的API,因为UnityEngine相关的API都不是线程安全的(个别Unity允许的api除外),而Awake,Start,还有Destory则保证都是游戏主线程调用,没有上述问题。

整理自知乎

标签:初始化,调用,为什么,Start,Unity,Awake,构造函数
From: https://www.cnblogs.com/m1ds/p/17623124.html

相关文章

  • Http 文件服务器搭建 —— 作为 Unity Addressable 远程服务器使用
    方式一通过HFS:HFS-超好用的本地文件分享利器,快速从电脑传文件到手机等设备 方式二通过IIS:WindowIIS搭建Http文件服务器    ......
  • C++ 构造函数初始化:提高代码可读性和执行效率
    在C++中,构造函数是用来初始化对象数据成员的。一个对象在创建的时候,构造函数会被自动调用,以便为该对象的数据成员赋初值。传统的初始化方式是在构造函数内部对数据成员逐一进行初始化,这种方式虽然可行,但是代码复杂度高且效率低下。本文将介绍如何使用构造函数初始化列表来提高......
  • 有了 IP 地址,为什么还要用MAC地址?
    来源:网络技术平台IP地址和MAC地址可以类比生活中寄快递的过程。“在整个网络中数据被封装成数据报文进行发送,就像我们生活中寄快递时将物品放进包裹中。而数据在路由器之间的跳转也可以看作是不同地区快递小哥对物流的交接。IP地址ip地址等价于快递包裹上的收件人地址。“快递......
  • 为什么要建物化视图日志
    本文转载自:https://so66.cn/66787.html 建立物化视图日志:提高数据库性能的必要手段当今,数据已成为企业发展的重要资产,而数据库则是数据管理的核心。与此同时,随着业务量越来越大,数据库性能问题也变得越来越突出。在这种情况下,物化视图日志成为了对数据库优化的一种必要手段。......
  • 【Unity3D】高斯模糊特效
    1高斯模糊原理​边缘检测特效中使用了卷积运算进行了边缘检测,本文实现的高斯模糊特效同样使用了卷积运算,关于卷积核和卷积运算的概念,读者可以参考边缘检测特效。​本文完整资源见→Unity3D高斯模糊特效。​我们将用于模糊处理的卷积核称为模糊算子,它一般满足以下......
  • 【Unity3D】边缘检测特效
    1边缘检测原理​边缘检测的原理是:检测每个像素周围的像素亮度差,如果亮度差异较大,就将该像素识别为边缘,并进行边缘着色。​本文完整资源见→Unity3D边缘检测特效。​使用过卷积神经网络(CNN)的人,一定知道卷积运算,笔者之前有写过相关文章(使用CNN实现MNIST数据集分类、......
  • Unity的AssetPostprocessor之Model:深入解析与实用案例 1
    UnityAssetPostprocessor模型相关函数详解在Unity中,AssetPostprocessor是一个非常有用的工具,它可以在导入资源时自动执行一些操作。在本文中,我们将重点介绍AssetPostprocessor中与模型相关的函数,并提供多个使用例子。OnPostprocessModelOnPostprocessModel是AssetPostprocesso......
  • 【车载测试】为什么说网络成本和总线带宽是制约汽车总线发展的关键因素?
    【上半场电动化,下半场智能化】对于未来智能化的汽车发展来说,车载网络的需求越来越多,对于典型的CAN网络总线,最大吞吐量只有1MB/s是难以满足科技变换的需求的。虽然FlexRay总线网络的传输速度为10Mb/s,具有双冗余拓扑结构和显著增强的同步能力。但FlexRay仍然存在明显的缺陷,相对于C......
  • 中电金信:国际结算系统的“王冠”,为什么十年都戴在“它”的头上
    2001年,中国正式加入WTO,在此后的二十多年里,中国出口席卷全球,迅速成长为一个贸易大国。作为跨国贸易不可或缺的一环,无论是商品交易、服务提供、资金分配还是国际借贷等,都需要通过银行办理的外汇收支业务,这就是国际结算。而支撑其运行和交付的IT系统,就是国际结算系统。“也是在2000......
  • 使用Visual Studio打开Unity脚本,VS提示“未能完成操作,参数错误“
    使用VisualStudio打开Unity脚本,VS提示"未能完成操作,参数错误".是蛮突然的,但我猜测跟公司这两天动不动突然停电,非法关机导致的.上网搜了各种办法,列举下来:1.https://blog.csdn.net/thksdhr/article/details/126287647链接里这位大哥提供的解决方法要删除这些文件,重新生成,不......