3.12 Unity程序设计新手建议

Unity是基于组件的编程,和常见的网站应用程序的开发在思路上会有比较大的差别。

1.一个场景还是多个场景

在Unity一个项目中,场景可以是一个,也可以是多个。在一个场景的情况下,可以通过Instantiate等方法加载需要的内容,用Destroy方法销毁不用的内容实现场景中的内容变换。当然也可以用多个场景,在不同场景之间切换,Unity还允许同时运行多个场景。

对于才接触Unity的使用者,建议使用多个场景:将关联度比较高的内容放置在同一个场景,而关联度比较低的内容分配到不同的场景。这样做最大的好处是直观。打开一个场景能够很直观地看到有些什么内容。缺点是当场景特别多的时候,场景之间切换的逻辑会比较复杂。

2.脚本放在哪个游戏对象

在Unity程序中,一个脚本可以在任意位置控制另外一个游戏对象及其组件。这里有个问题,就是脚本放在什么位置。比如,脚本A需要控制一个游戏对象移动或者访问其上脚本组件的方法,脚本A可以是在当前游戏对象,也可以是在父游戏对象、子游戏对象或者毫无关联的游戏对象上。

一个简单的原则是脚本只去影响或者调用本身所在游戏对象或子游戏对象上的内容,不去影响或者调用其父游戏对象上的内容,尽量避免不同游戏对象之间的调用。这样做的好处是,当一个内容或者一组游戏对象需要在另外的场景再次被使用的时候,只需要将其拖出来生成预制件即可方便地重复使用。

3.Empty GameObject模式

Empty GameObject是Unity程序最简单的开发模式。通过建立一个空的游戏对象,将不同游戏对象之间关联调用的逻辑脚本放置在该游戏对象上,实现统一的管理,其他的游戏对象之间没有关联,而只与这个空的游戏对象产生联系。这样做会使整个场景中的逻辑比较清晰,并且容易修改。

其他游戏对象与空的游戏对象联系的方法如果性能要求不高,可以调用SendMessage方法。这样做可以解耦合。

Empty GameObject模式最简单,推荐刚接触Unity程序的开发者使用。

4.有限状态机和行为树

有限状态机和行为树是两种常见的实现代码级AI(人工智能)的模式。这两种方法同样非常适合用来构思如何实现整个场景或者项目的逻辑。当一个Unity项目不知道该从哪里下手时,可以考虑用这两种思维方式去思考并尝试找到解决方法,并不一定要在代码层面严格地实现出来。

如果确实要严格地实现有限状态机或者行为树的时候,推荐购买对应的插件:有限状态机插件PlayMaker或者行为树插件Behavior Designer。这两个在Unity的商城里,虽然是付费的,但是很好用,因为这两个插件都实现了可视化。使用有限状态机或者行为树开发的时候,可视化可以大大地提高开发的效率并减少出错。