C#-Unity Wiki的Singleton如何工作?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-Unity Wiki的Singleton如何工作?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1319字,纯文字阅读大概需要2分钟。
内容图文
![C#-Unity Wiki的Singleton如何工作?](/upload/InfoBanner/zyjiaocheng/667/08189774e582478c8a6adaeb7e7d6207.jpg)
我的场景中有一个“ manager” GameObject,并附加了一个Manager Script组件.
我需要这个Manager脚本是一个单例,因为没有几个经理是没有意义的.
我使用单例实现from the Unity wiki.
我对此有两个问题:
>为什么要创建一个新的GameObject,然后使用GameObject.AddComponent< T>()来实例化单例?为什么不只是新建T()?
>我已经保护了我的Singleton和Manager类构造函数.除了他们自己,没有人应该能够实例化这些类. Unity编辑器如何实例化它们?
解决方法:
正如评论所说:
由于GameObject组件的工作方式,不能用新的T()实例化MonoBehaviour类:它们必须附加到GameObject上!这样,GameObject类提供了一种实例化连接到该GameObject的新MonoBehaviour的方法:AddComponent< T>()可能通过反射进行操作(其他MonoBehaviour方法,例如Start()和Update()aren’t exactly invoked with reflection,而不是运行时的每个帧) ,但比较起来很容易;它几乎是不透明和神奇的,并且开销很大,因此也很可能是反射).
完全阻止构造函数被调用可能只会破坏所有内容,因此不要费心去尝试保护它.由于AddComponent的工作方式(通过反射调用构造函数),您实际上不能阻止创建新实例,但是您可以检测到它发生并采取措施.我的首选方式是脚本运行“哦,实例已经存在,但不是我”并销毁了自己.
此外,由于组件可能需要通过属性指定的其他组件(RigidBody也需要对撞机,MonoBehaviours can specify their own requirements),因此当调用AddComponent< T>()以添加一个组件时,它将搜索类属性以查看是否指定了任何[RequireComponents]并自动添加它们.这也将完成through reflection.
内容总结
以上是互联网集市为您收集整理的C#-Unity Wiki的Singleton如何工作?全部内容,希望文章能够帮你解决C#-Unity Wiki的Singleton如何工作?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。