1.3 基本的Unity概念
在1.1节中,我们已经讨论了一些Unity概念。在这里会更详细地介绍其中一些概念,因为有一些内容你可能已经用过。Unity非常注重游戏开发环境中各项内容的模块化。
1.3.1 资源
Unity将每个文件都视为一个资源,包括3D模型、纹理文件、Sprite、粒子系统等。在你的项目中,将有一个Assets文件夹作为根文件夹来存放所有项目资源。这些资源可能是纹理、3D模型、粒子系统、材质、着色器、动画、Sprite等。随着我们向项目中添加更多内容,应该做好Assets文件夹的整理工作以应对文件数量的增长。强烈建议把文件夹结构保持得井井有条,这样你或你的团队就不会花太多时间去找一个不小心放在一个随机的文件夹中的纹理。
1.3.2 场景
场景中包含所有游戏逻辑、游戏对象、过场动画以及游戏中会引用的用于进行渲染或交互的所有其他内容。
场景也被用来削减游戏部分以减少加载时间。如果你每次加载游戏时都要尝试加载每一项资源,那将花费太多宝贵的游戏时间。
1.3.3 游戏对象
场景中引用的大多数资源都是游戏对象(GameObject,GO)。在某些情况下,一个资源只是游戏对象的一个组件。你会发现所有游戏对象都有一个共同点,即它们都具有Transform组件。正如我们在本章开头所讲到的,Transform保存了局部位置、旋转和缩放。全局Transform是根据它们的层级结构计算出来的。游戏对象可以连接很多组件,用于脚本中的功能或数据,以增加游戏玩法的复杂性。
1.3.4 组件
游戏对象能够容纳“组件”的多个功能。每个组件都有自己独有的属性。你可以添加的组件有很多,如图1.17所示。
图1.17 组件列表
每个组件中都有更小的子组件。我们将在本书中讨论其中的一些组件。当你将资源添加到需要组件的场景层级结构中时,Unity默认会添加这些子组件。一个例子是,当你将3D网格拖入层级结构时,游戏对象将自动将网格渲染器组件附加到这个对象上。
1.3.5 脚本
经常在游戏对象上使用的组件是脚本。脚本将所有逻辑和玩法都构建到你的游戏对象上。无论是想改变颜色、跳跃方式、时间,还是收集物品,你都需要在对象的脚本中添加该逻辑。
在Unity中,主要的脚本语言是C#。这是一种强类型编程语言,意味着必须为被操作的变量指定一个类型。
我们将以多种方式使用脚本。我知道你很希望能够直接进入编码阶段,但首先,我们需要进入其他Unity标准流程。
1.3.6 预制件
利用Unity的模块化和强大的面向对象特性,我们可以将一组在其组件上设置了默认值的游戏对象放在一起,这些游戏对象可以随时在场景中实例化并拥有自己的值。
要制作预制件,请将游戏对象从场景中的层级结构拖到资源浏览器中。Unity将创建一个新的预制件,并将该游戏对象转换为新创建的预制件。它也会在层级结构中默认变为蓝色以突出显示,如图1.18所示。
图1.18 层级结构中的预制件
1.3.7 包
要将模块化组件提升到一个全新的抽象高度,Unity可以生成一个包含所有依赖项的包,将包导出,以便你可以将它们引入其他项目!更强大的是,你可以从Unity Asset Store将你的包卖给其他游戏开发者!