Unity引擎编程注意事项

Unity是一个功能强大的游戏开发引擎,但要精通它,必须了解它的工作原理、不适用的地方以及需要避免的事项。正如那句老话所说:“能力越大,责任越大”(以及无疑会不断撞到的低矮架子)。其中一个简单的事实是关于在脚本和代码中命名事物的方式(类名,而不是属性或枚举),将在下面解释。

名字里有什么?

仅仅使用Unity几分钟,就应该清楚有些名字根本不能用来命名Unity中的事物,最明显的是:

  • MonoBehaviour - 因为几乎所有东西都是MonoBehaviour。
  • 基础类型,如Vector2、Point、Canvas - 因为Unity已经拥有这些,虽然可以使用它们,但不会得到基础功能。
  • 保留名称 - 基本上是Unity命名空间内的任何东西。试试创建自己的“UnityEngine”类,看看会发生什么!

还有更多,Unity通常会在做一些它认为愚蠢或不适当的事情时提醒。然而,对于构建的平台,情况并非如此……Unity也会检查这些吗?

可以拥有任何想要的颜色,只要它是红色

这一切都源于帮助一个工作室(这是通常做的)测试他们的项目以及支持他们构建他们的Windows 10 UWP版本(从单一构建中针对多个平台,是的,请)。在他们的项目编译版本中出现了一个错误,它以两种方式之一表现出来:

  • 一个非常有帮助的问题加载项目,出现以下错误:“对象引用未设置为对象的实例”(不是很有帮助)。
  • 项目打开没有问题,但当构建它时,会突然遇到许多错误:
- “类没有名为x的属性”或 - “不能隐式转换类型X为Y”

在这个案例中,正在测试,开发者创建了一个名为“SplashScreen”的类(看起来相当无害),然而当深入研究时,会发现Unity和Microsoft平台都已经有一个名为SplashScreen的类型。Unity能够在内部构建中绕过自己的类型,确保项目中的SplashScreen类与Unity的SplashScreen版本不同(很可能是通过使用不同的命名空间)。然而,当涉及到平台构建时,项目中使用的类将覆盖平台使用的类。

如果测试它,它们就会来

让测试一下,这样就可以更好地准备如果它发生了。据所知,这只会影响所有现代Windows平台,因为它们可以直接从平台访问Unity项目(.NET项目的一个非常有用的特性),尽管这也可能影响到任何插件,除非遵循下一节中的步骤。

要复制这个问题,只需尝试以下步骤:

  1. 创建一个新空白项目。
  2. 创建一个名为SplashScreen的新脚本。
  3. 为任何“Windows Store”平台构建项目。
  4. 在Visual Studio或MonoDevelop中打开构建的项目。
  5. 现在构建它。

会看到与SplashScreen类相关的一系列错误,因为项目现在认为项目中的类应该被使用,而不是为平台保留的类型。

应该避免使用哪些名称?

已经做了一些测试,但并不是很广泛,所以将列出测试并发现问题的名称。如果发现更多,请在下面评论,会将它们添加到列表中。

  • SplashScreen
  • App
  • Application
  • Window
  • UnityPlayer(这个让惊讶,因为Unity本身并不警告它的使用)

如果知道更多,请随时在下面评论。

重要的是要注意这会影响在基础项目中定义的任何类或类型。避免这些麻烦的一个简单方法是在类中使用自己的命名空间,这意味着代码不会被混淆为任何其他同名的代码或类型(除了自己的)。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485