4.3 导入外部的游戏资源
如果要使用在Unity之外所创建的各类游戏资源,我们就必须把这些资源直接保存或复制到项目的Assets文件夹中。Unity支持将很多种常见格式的资源直接保存到Assets文件夹,无须做任何转换工作。
每当新建一个项目时,Unity会自动创建一个名为Assets的文件夹,如图4-31所示。
图4-31 Project视图中的Assets文件夹
在Unity编辑器中,每当将文件保存或复制到Assets文件夹时,都会在Project视图的Assets文件夹中显示。此外,当我们把文件从电脑硬盘拖到Unity编辑器的Project视图时,该文件会自动复制到Assets文件夹,并显示在Project窗口中。同样,当从Unity编辑器的Project视图中删除某个文件时,电脑硬盘上对应位置的文件也会被直接删除。简单来说,Project视图中的所有文件与电脑硬盘上的文件对应。
需要注意的是,在电脑硬盘的对应位置会有.meta文件,但是在Unity的Project视图中却看不到。Unity会为每一个游戏资源创建.meta文件,如图4-32所示。
图4-32 项目所在文件夹对应位置的.meta文件
这些.meta文件保存了游戏资源的重要信息,因此其名称和路径不能轻易改变。当我们在文件管理器中更改了某个资源文件的名称和路径时,必须更改对应.meta文件的名称和路径。
最简单的方式是直接在Unity的Project视图中更改资源的名称和路径。如果你对其背后的原理感兴趣,可以参考官方文档中的相关说明。
4.3.1 2D图像文件的导入和设置
Unity支持大多数的常规图像文件格式,如BMP、TIF、TGA、JPG和PSD。如果我们将分层psd文件直接拖到Assets文件夹中,该文件将会自动合并。
这里需要特别注意的是,如果我们希望在2D游戏中将2D图像文件作为精灵,或者作为3D游戏中的UI图片元素,必须手动将其Texture Type更改为Sprite(2D and UI)。
另外需要强调的是,为了提高运行效率,Unity所使用的图片的尺寸通常是2的n次幂,例如32、64、256、1024等。对于非2的n次幂尺寸的图片,Unity会将其转化为非压缩的RGBA32位格式,这大大降低了加载速度,增大了游戏发布包的大小。对于非2的n次幂尺寸的图片,我们需要在导入设置中使用NonPower2 Sizes Up将其调整到2的n次幂尺寸,但这可能会导致图片质量下降。因此,强烈建议开发者按照2的n次幂尺寸规格来制作图片。
关于导入2D图片文件的更多内容,读者还可以参考以下两个官方链接:
- https://docs.unity3d.com/Manual/HOWTO-alphamaps.html
- https://docs.unity3d.com/Manual/SpriteEditor.html
4.3.2 3D模型的导入和设置
通常,将3D模型文件导入Unity有如下两种方式。
1)直接将3D模型文件拖到Unity的Project视图对应的文件夹中。
2)将3D模型文件复制到项目所在的Assets文件夹下。
Unity支持使用大多数常规3D建模软件(包括Maya、Cinema4D、3DS Max、Cheetah3D、Modo、Lightwave、Blender和SketchUp等)来创建模型。
Unity支持两种不同类型的网格模型文件:一种是从3D建模软件中导出的.fbx或.obj格式的文件,这类文件可以在很多第三方软件中导入和编辑;另一种则是部分3D建模软件的原生格式,如3DS Max中的.max文件或是Blender中的.blend文件,这类文件在导入Unity时需要经过一定的转换。当然,有一种例外是SketchUp的.skp文件,其可以在SketchUp和Unity中随意打开和编辑。
目前,Unity所支持的导出模型文件的通用格式包括.fbx、.dae(Collada)、.3ds、.dxf、.obj、.skp。使用通用格式的好处在于:
1)无须将整个模型导入Unity,只需将项目中所需的那一部分导入即可;
2)所导出的通用格式文件相比原生格式文件体积通常要小一些;
3)可以导入Unity自身不支持的一些3D建模软件;
4).fbx/.obj格式的文件后续可以重新导回到3D建模软件,以确保所导出的信息正确无误。
当然,使用通用格式不好的地方也很明显:
1)原始文件只要发生改变,就必须重新导出;
2)需要随时跟踪源文件版本和导入Unity的资源的文件版本信息。
目前,支持原生格式的3D建模软件包括3DS Max、Maya、Blender、Cinema4D、Modo、Lightwave & Cheetah3D。在将原生格式文件导入Unity的过程中,Unity会自动将其转换成.fbx文件。
使用原生格式的好处是:
1)原始模型的任何改变将自动导入Unity;
2)操作起来比较简单。
使用原生格式不方便的地方是:
1)必须在所有开发此Unity项目的电脑上安装对应建模软件的授权版本;
2)所有开发此Unity项目的电脑上的建模软件版本必须完全一致,否则会导致严重的错误发生;
3)文件中会存在一些不必要的冗余信息;
4)如果原生格式文件过大,Unity项目和资源的导入速度会大大下降,因为我们需要在导入模型的同时打开对应的建模软件;
5)Unity自身需要将这些文件转换成.fbx文件,从而会出现一些未知的错误。
笔者从自身经验来看,建议采用第一种方式,也就是先从3D建模软件中导出通用的.fbx格式文件,然后导入Unity。
关于该部分更详细的内容,读者请参考:https://docs.unity3d.com/Manual/HOWTO-importObject.html。
4.3.3 3D动画的导入和设置
将第三方软件所制作的动画导入Unity的过程和普通的3D模型文件类似,我们可以考虑使用通用的.fbx格式文件。
要想将某个动画导入Unity,只需要从文件管理器中把该文件拖到Unity编辑器的Project视图中的Assets文件夹中。
在有些情况下,我们需要将使用动画的游戏对象和动画本身存放在同一个文件中。而在有些情况下,动画可能和3D模型本身是分开的。这是因为某些动画只能被某个特定的3D模型所使用。
但有时候我们希望有一个动画库,其中的动画可以被不同的3D模型所使用。比如不同的人类角色都可以使用相似的行走和奔跑动作。此时,我们通常在动画文件中使用一个简单的占位模型,以预览其效果。我们甚至还可以使用完全没有网格的模型—只有动画数据的动画文件(包含动捕技术所得到的信息)。
在导入多个动画时,这些动画可以使用单独的文件存放在项目文件夹中,或者是保存在.fbx格式的单个文件中。当我们使用Motion Builder或Maya/3DS Max等软件制作动画时,通常会在.fbx格式的单个文件中保存多个动画片段。Unity内置了动画裁剪工具,便于我们轻松地将不同的动画片段分割开使用。
关于该部分更详细的内容,读者请参考:https://docs.unity3d.com/Manual/Importing-ModelFiles.html。
4.3.4 音频和视频的导入和设置
Unity支持导入几乎所有的通用音乐格式文件,具体如表4-1所示。
表4-1 Unity所支持导入的音乐文件格式
任何导入Unity的音效资源文件都可以在脚本中以Audio Clip的实例形式被调用,从而实现播放、暂停和停止音效。
关于该部分内容,更详细的知识请参考:https://docs.unity3d.com/Manual/AudioFiles.html。
4.3.5 Unity资源包的导入和导出
Unity资源包对于分享和重用Unity项目中的游戏资源非常有帮助。我们之前所导入的Unity Standard Assets(Unity标准资源包)和Asset Store中的游戏资源都是以Unity资源包的形式提供的。
Unity资源包是Unity项目中若干文件和数据的集合,经过压缩后存储在一个独立的文件中。Unity资源包中存储了原始数据的目录结构以及资源的相关数据文件(比如导入设置以及到其他游戏资源的链接)。
在Unity的菜单栏中依次选择Asset→Export Package命令即可压缩和存储所选的游戏资源,而依次选择Asset→Import Package命令则可以将Unity资源包导入当前的项目。
关于该部分更详细的内容,读者请参考:https://docs.unity3d.com/Manual/AssetPackages.html。
在4.4节中,我们将学习如何给游戏场景添加光照效果。