在Unity游戏引擎中,尽管MonoBehaviour类的默认构造函数是公共的,但不能使用new()运算符构造所有源自MonoBehaviour类的类.这样做会在Unity日志中返回警告,并且不会实例化该对象,而将引用保留为空.
我很好奇它们在构造函数调用时如何防止对象被创建.我进行了一些研究,听说在对象的构造函数中抛出异常会阻止其创建,因此我自己进行了尝试,并且在构造函数之外处理异常时它可以工作.但是,我仍然不了解它们如何使用正确的方法(AddComponent< T>())实例化该类.
有任何想法吗?
解决方法:
在普通香草C#中,new运算符不可能返回null.它将返回有效的非null引用,或者将引发异常.
但是请注意,Unity不是“普通香草C#”. Unity基于Mono(后者又基于.NET),但已针对其自身目的进行了自定义.
控制编译器和运行时意味着您可以执行各种非标准的事情.像这样,提供一种机制,如果新运算符与无效类型一起使用(例如,MonoBehavior的任何子类),则允许该运算符返回null.并且,例如,提供AddComponent T()可以使用的替代分配机制.
对于Stack Overflow而言,所有这些内部工作的详细描述都太广泛了(无论如何,我不知道具体细节).但是考虑到Mono是开源的,我认为该许可证是要求Unity对该开源进行修改的许可证之一.即如果您真的想了解所有细节,则只需浏览实际的源代码,然后查看它们的工作方式即可.
原文地址:https://codeday.me/bug/20191028/1950910.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。