Unity是一个功能强大的游戏开发引擎,但要精通它,必须了解它的工作原理、不适用的地方以及需要避免的事项。正如那句老话所说:“能力越大,责任越大”(以及无疑会不断撞到的低矮架子)。其中一个简单的事实是关于在脚本和代码中命名事物的方式(类名,而不是属性或枚举),将在下面解释。
仅仅使用Unity几分钟,就应该清楚有些名字根本不能用来命名Unity中的事物,最明显的是:
还有更多,Unity通常会在做一些它认为愚蠢或不适当的事情时提醒。然而,对于构建的平台,情况并非如此……Unity也会检查这些吗?
这一切都源于帮助一个工作室(这是通常做的)测试他们的项目以及支持他们构建他们的Windows 10 UWP版本(从单一构建中针对多个平台,是的,请)。在他们的项目编译版本中出现了一个错误,它以两种方式之一表现出来:
- “类没有名为x的属性”或
- “不能隐式转换类型X为Y”
在这个案例中,正在测试,开发者创建了一个名为“SplashScreen”的类(看起来相当无害),然而当深入研究时,会发现Unity和Microsoft平台都已经有一个名为SplashScreen的类型。Unity能够在内部构建中绕过自己的类型,确保项目中的SplashScreen类与Unity的SplashScreen版本不同(很可能是通过使用不同的命名空间)。然而,当涉及到平台构建时,项目中使用的类将覆盖平台使用的类。
让测试一下,这样就可以更好地准备如果它发生了。据所知,这只会影响所有现代Windows平台,因为它们可以直接从平台访问Unity项目(.NET项目的一个非常有用的特性),尽管这也可能影响到任何插件,除非遵循下一节中的步骤。
要复制这个问题,只需尝试以下步骤:
会看到与SplashScreen类相关的一系列错误,因为项目现在认为项目中的类应该被使用,而不是为平台保留的类型。
已经做了一些测试,但并不是很广泛,所以将列出测试并发现问题的名称。如果发现更多,请在下面评论,会将它们添加到列表中。
如果知道更多,请随时在下面评论。
重要的是要注意这会影响在基础项目中定义的任何类或类型。避免这些麻烦的一个简单方法是在类中使用自己的命名空间,这意味着代码不会被混淆为任何其他同名的代码或类型(除了自己的)。