1、 18.1.1主流3D建模软件的介绍Autodesk 3D Studio MaxAutodesk MayaCinema 4D28.1.1主流3D建模软件的介绍Autodesk 3D Studio MaxAutodesk MayaCinema 4D38.1.2Unity与建模软件单位的比例关系为了让模型在导入为了让模型在导入Unity后能够保持其本来的尺寸,就需要调整建后能够保持其本来的尺寸,就需要调整建模软件的系统单位或者尺寸。在模软件的系统单位或者尺寸。在3D建模软件中,应尽量使用建模软件中,应尽量使用“米米”制单位。表制单位。表8-1中展示了建模软件的系统单位在设置成中展示了建模软件的系统
2、单位在设置成“米米”制单位制单位后,与后,与Unity系统单位的对应比例。系统单位的对应比例。建模软件建模软件内部米制尺寸/m导入Unity中的尺寸/m与Unity单位的比例关系3ds Max10.01100:1Maya11001:100Cinema 4D11001:10048.1.2Unity与建模软件单位的比例关系下面将以下面将以3ds Max为例,介绍一下参数设置调整的过程为例,介绍一下参数设置调整的过程(1)打开)打开3ds Max软件后,打开软件后,打开“自定义自定义”菜单下的菜单下的“单位设置单位设置”选项,如图选项,如图8-1所示。所示。(2)在弹出的)在弹出的“单位设置单位设置
3、”对话框中,将对话框中,将“显示单位比例显示单位比例”下的下的“公制公制”选项修改为选项修改为“厘米厘米”。如图。如图8-2所示。所示。(3)点击对话框顶部的)点击对话框顶部的“系统单位设置系统单位设置”按钮,在弹出的按钮,在弹出的“系统单位设置系统单位设置”对话框中将单位修改为对话框中将单位修改为“厘米厘米”,如图如图8-3所示。修改完成后单击确定完成参数设置调整。所示。修改完成后单击确定完成参数设置调整。图8-1 自定义菜单图8-2 单位设置菜单图8-3 系统单位设置菜单58.1.3将3D模型导入Unity下面以下面以3ds Max为例,为读者演示一遍从建模到将模型导入为例,为读者演示一遍
4、从建模到将模型导入Unity的过程。具体步骤如下。的过程。具体步骤如下。(1)首先打开)首先打开3ds Max,点击右侧,点击右侧“AEC Extended”(AEC 扩展)中扩展)中“Foliage”(树)按钮,在下方的列表中的模型中任意选择一种,创建一个树模型。如图(树)按钮,在下方的列表中的模型中任意选择一种,创建一个树模型。如图8-4所示,所示,这时就完成了一个最基本的建模工作。这时就完成了一个最基本的建模工作。68.1.3将3D模型导入Unity(2)点击窗口左上角的)点击窗口左上角的3ds Max标志,标志,打开下拉菜单。单击导出选项,如图打开下拉菜单。单击导出选项,如图8-5所示
5、。然后会弹出对话框,选择导出所示。然后会弹出对话框,选择导出的路径并且为导出的文件命名(注意保的路径并且为导出的文件命名(注意保存类型选择存类型选择.FBX),点击保存按钮即),点击保存按钮即可导出。可导出。(3)将模型导入)将模型导入Unity中,点击中,点击Unity中菜单栏单击中菜单栏单击“Assets”“Import New Assets.”,会弹出导入资源对话,会弹出导入资源对话框,按照模型的路径找到并选中模型,框,按照模型的路径找到并选中模型,点击导入按钮,完成导入。导入的模型点击导入按钮,完成导入。导入的模型会保存在会保存在Assets文件夹中,开发者可文件夹中,开发者可以在以在
6、Assets面板中查看以及使用。面板中查看以及使用。78.2.1网格过滤器(Mesh Filter)网格过滤器中有一个重要的属性网格过滤器中有一个重要的属性“Mesh”,用于,用于储存物体的网格数据,它可以从资源中拿出网格并储存物体的网格数据,它可以从资源中拿出网格并将网格传递给将网格传递给网格渲染器网格渲染器(Mesh Renderer),并在,并在屏幕上渲染。在导入模型资源时,屏幕上渲染。在导入模型资源时,Unity 会自动创会自动创建一个建一个网格过滤器网格过滤器,如图,如图8-6所示。所示。图8-6 网格过滤器组件88.2.2Mesh属性和方法介绍(1)Mesh中有一些用于储存物体的网
7、格数据的属性,这些属性主要用于储存网格中各中有一些用于储存物体的网格数据的属性,这些属性主要用于储存网格中各种数据,并且均以数组的形式出现,详细说明如表种数据,并且均以数组的形式出现,详细说明如表8-2所示。所示。属性说明属性说明vertices网格的顶点数组normals网格的法线数组tangents网格的切线数组uv网格的基础纹理坐标uv2如果存在,这是为网格设定的第二个纹理坐标subMeshCount子网格的数量。每种材质都有一个独立的网格列表bounds网格的包围体colors网格的顶点颜色数组triangles包含所有三角形顶点索引的数组vertexCount网格中顶点的数量(只读)
8、boneWeights每个顶点的骨骼权重bindposes绑定的姿势。每个索引绑定的姿势使用具有相同索引的骨骼98.2.2Mesh属性和方法介绍(2)Mesh中有生成或修改物体网格的方法,这些方法主要用于中有生成或修改物体网格的方法,这些方法主要用于设置储存网格各种数据,并且均以数组的形式出现,详细说明如设置储存网格各种数据,并且均以数组的形式出现,详细说明如表表8-3所示。所示。方法说明方法说明Clear清空所有顶点数据和所有三角形索引RecalculateBounds重新计算从网格包围体的顶点RecalculateNormals重新计算网格的法线Optimize显示优化的网格GetTria
9、ngles返回网格的三角形列表SetTriangles为网格设定三角形列表CombineMeshes组合多个网格到同一个网格108.2.3Mesh的使用(1)首先创建一个工程项目,并命名为)首先创建一个工程项目,并命名为“BNUMeshes”。然后创。然后创建地形。建地形。(2)创建水。选中)创建水。选中“Assets”文件夹,右键选择文件夹,右键选择Import PackageWater(Pro Only)导入标准水资源包,如图导入标准水资源包,如图8-7所示。所示。然后拖拽然后拖拽Daylight Water到场景中,并调整水和地形的位置参数,到场景中,并调整水和地形的位置参数,如图如图8
10、-9和图和图8-10所示,最终实现如图所示,最终实现如图8-8的位置效果。的位置效果。图8-9 水位置参数图8-10 地形位置参数118.2.3Mesh的使用 图8-7 导入标准水资源包图8-8 地形与水面的位置128.2.3Mesh的使用(3)创建两个空对象,分别命名为)创建两个空对象,分别命名为“Expansion”和和“Triangle”,具体步骤为,具体步骤为“GameObject”“Create Empty”,如图,如图8-11所示。然后两个空对象添加网格过滤器,所示。然后两个空对象添加网格过滤器,先选中对象然后单击菜单先选中对象然后单击菜单“Component”“Mesh”“Mes
11、h Filter”为对象添加网格过为对象添加网格过滤器,如图滤器,如图8-12所示。所示。图8-11 创建空对象 图8-12 添加网格过滤器138.2.3Mesh的使用(4)下面向两个空对象的网格过滤器组件中添加网格属性。将)下面向两个空对象的网格过滤器组件中添加网格属性。将“AssetsMeshes”文件文件夹下的夹下的“Triangle.FBX”和和“Expansion.FBX”模型文件中的网格模型文件中的网格“Box01”,如图,如图8-13,分,分别拖拽到别拖拽到“Expansion”和和“Triangle”对象的网格过滤器组件的对象的网格过滤器组件的“Mesh”属性中,如图属性中,如
12、图8-14所示。所示。图8-13模型文件中的网格“Box01”图8-14 网格过滤器组件148.2.3Mesh的使用(5)创建一个空对象,并且命名为)创建一个空对象,并且命名为“Obj1”,调整该对象的位置和大小,具体参数如图,调整该对象的位置和大小,具体参数如图8-15所示。然后为所示。然后为“Obj1”对象添加网格过滤器和网格渲染器,具体步骤为选中对象然后对象添加网格过滤器和网格渲染器,具体步骤为选中对象然后单击菜单单击菜单“Component”“Mesh”“Mesh Renderer”为对象添加网格渲染器,如图为对象添加网格渲染器,如图8-16所示。所示。图8-15“Obj1”对象的位置
13、和大小图8-16 添加网格渲染器158.2.3Mesh的使用(6)然后)然后“Obj1”对象添加纹理。将对象添加纹理。将“AssetsTextures”文件夹下的文件夹下的“wenli.tga”纹理文件拖拽到纹理文件拖拽到“Obj1”对对象上,然后按照相同的方法再创建象上,然后按照相同的方法再创建4个个对象,并分别命名为对象,并分别命名为“Obj2”、“Obj3”、“Obj4”、“Obj5”,拖拽后的五个对象,拖拽后的五个对象的网格渲染器的的网格渲染器的“material”属性就均被属性就均被设置为设置为“wenli”材质材质,如图,如图8-17所示。所示。图8-17“Obj1”对象的网格渲染
14、器组件 168.2.3Mesh的使用(7)单击鼠标右键,在弹出的菜单中选择)单击鼠标右键,在弹出的菜单中选择“Create”“C#Script”创建脚本。命名为创建脚本。命名为“BNUMesh.cs”,然后双击打开脚本,开始,然后双击打开脚本,开始“BNUMesh.cs”脚本的编写,本脚本主要用脚本的编写,本脚本主要用于通过控制网格属性来实现物体变形的效果于通过控制网格属性来实现物体变形的效果 4 public class BNUMesh:MonoBehaviour 5 Mesh mesh;/物体的网格对象物体的网格对象6 int time;/用于记录时间用于记录时间7 public Game
15、Object g;/包含网格的对象数组包含网格的对象数组8 Mesh m;/网格对象数组网格对象数组9 public List vertice;/网格的顶点数组网格的顶点数组10 public List triangle;/包含所有三角形顶点索引的数组包含所有三角形顶点索引的数组11 public List uv;/网格的基础纹理坐标网格的基础纹理坐标12 public List normal;/网格的法线数组网格的法线数组13 public List tangent;/网格的切线数组网格的切线数组14 bool bian=true;/物体一次变形是否完成物体一次变形是否完成15 int s=
16、0;/物体变形形状标志位物体变形形状标志位178.2.3Mesh的使用(8)在)在“BNUMesh.cs”脚本中脚本中Start方法的主要功能是系统通过在方法的主要功能是系统通过在场景加载时调用此方法来实现物体网格的细化,场景加载时调用此方法来实现物体网格的细化,Start方法的具体方法的具体代码如下。详见课本代码如下。详见课本(9)在)在“BNUMesh.cs”脚本中脚本中Update方法的主要功能是系统通方法的主要功能是系统通过调用此方法来不断改变网格数据使物体不断变形过调用此方法来不断改变网格数据使物体不断变形。188.2.3Mesh的使用(10)将脚本)将脚本“BNUMesh.cs”分
17、别拖拽到上面创建的六个游戏对分别拖拽到上面创建的六个游戏对象上。然后单击游戏对象,在属性查看器中可看到脚本组件的内象上。然后单击游戏对象,在属性查看器中可看到脚本组件的内容,然后设置参数,如图容,然后设置参数,如图8-18所示。所示。图8-18 脚本参数设置198.2.3Mesh的使用(11)单击游戏运行按钮,观察效果。在)单击游戏运行按钮,观察效果。在Game窗口中可以看到地窗口中可以看到地形和不断变形的六个物体。如图形和不断变形的六个物体。如图8-19和图和图8-20所示。所示。图8-19 案例运行效果图1图8-20 案例运行效果图220Avatar是是Mecanim动画系统中自带的人形骨
18、骼结构与模型文件中动画系统中自带的人形骨骼结构与模型文件中的骨骼结构之间的映射,将带有动画的模型文件资源导入的骨骼结构之间的映射,将带有动画的模型文件资源导入Unity 3D后,系统会自动为模型文件生成一个后,系统会自动为模型文件生成一个Avatar文件作为其子对象,文件作为其子对象,如图如图8-21所示。所示。图8-21 Avatar文件图218.3.1Avatar的创建单击刚刚的人形角色模型文件,在单击刚刚的人形角色模型文件,在Inspector视口中选择视口中选择Rig选项,如图选项,如图8-22所示。单击所示。单击Aimation Type下拉按钮,选择下拉按钮,选择Humanoid选
19、项,然后点击选项,然后点击Apply按钮,视口变成如图按钮,视口变成如图8-23所示。完成后该模型文件已经被设置为人形角色模型,并且系统会为其创建所示。完成后该模型文件已经被设置为人形角色模型,并且系统会为其创建Avatar文文件。件。8-22 Rig选项图8-23 Humanoid模式228.3.2Avatar的配置(1)在)在Assets面板中单击模型文件下子对象面板中单击模型文件下子对象Avatar文件,然后单击文件,然后单击Inspector面板中的面板中的“Configure Avatar”按钮,如图按钮,如图8-24所示。此时所示。此时系统会关闭原场景窗口,进入系统会关闭原场景窗口
20、,进入Avatar的配置窗口。的配置窗口。配置窗口是系统开启的一个临时配置窗口是系统开启的一个临时Scene视口,并视口,并且配置结束后该临时窗口会自动关闭。且配置结束后该临时窗口会自动关闭。图8-24 图8-25 238.3.2Avatar的配置(2)配置窗口的)配置窗口的Scene窗窗口中会出现导入人物模型的口中会出现导入人物模型的骨骼,如图骨骼,如图8-26所示。右侧所示。右侧为为Avatar的的Inspector面板,面板,配置窗口与平时开发用的配置窗口与平时开发用的Scene窗口相同,更改窗口相同,更改Inspector中的参数后也会中的参数后也会改变显示在改变显示在Scene视口中
21、的视口中的模型。模型。图8-26 Scene视口248.3.2Avatar的配置(3)在配置窗口右侧的)在配置窗口右侧的Avatar配配置面板中可以按部位对人形角色模置面板中可以按部位对人形角色模型进行配置,此面板中共分为型进行配置,此面板中共分为“Body”、“Head”、“Left Hand”和和“Right Hand”四个方面,分别四个方面,分别对应四个按钮,如图对应四个按钮,如图8-25所示。点所示。点击不同的按钮会出现不同部位的骨击不同的按钮会出现不同部位的骨骼配置窗口,并且各个部位的配置骼配置窗口,并且各个部位的配置互不影响,如图互不影响,如图8-27和图和图8-28所示。所示。图
22、8-27 头部骨骼配置窗口图8-28手部骨骼配置窗口258.3.2Avatar的配置(4)一般情况下开发者创建了)一般情况下开发者创建了Avatar后后Uniy 3D都会对其正确的都会对其正确的初始化,但有时候如果出于模型文初始化,但有时候如果出于模型文件本身的问题,件本身的问题,Unity 3D 无法识别无法识别到每个部位相应的骨骼,此时错误到每个部位相应的骨骼,此时错误部位就会呈现红色,如图部位就会呈现红色,如图8-29所示。所示。图8-29 错误部位呈红色 268.3.2 Avatar的配置(5)开发者此时需要手动更改错误)开发者此时需要手动更改错误部位的骨骼。首先在部位的骨骼。首先在H
23、ierarchy窗口窗口的骨骼列表中找到正确的骨骼,如的骨骼列表中找到正确的骨骼,如图图8-30所示。然后将正确的骨骼拖所示。然后将正确的骨骼拖拽到拽到Inspector视口中该骨骼相对应视口中该骨骼相对应的位置上,若拖拽到正确位置后,的位置上,若拖拽到正确位置后,错误的部位会变回绿色,错误的部位会变回绿色,Avatar的的也就配置完成了。也就配置完成了。图8-30 Hierarchy窗口中的骨骼列表278.3.3Muscle的配置(1)点击)点击Avatar视口中的视口中的Muscles按钮进入按钮进入Muscle的配置窗口。该窗的配置窗口。该窗口和刚刚的骨骼配置窗口类似,由口和刚刚的骨骼配
24、置窗口类似,由预览窗口、设置窗口及附加配置窗预览窗口、设置窗口及附加配置窗口三部分组成。口三部分组成。(2)下面以左胳膊的骨骼为例对参)下面以左胳膊的骨骼为例对参数调节进行讲解,首先选中设置窗数调节进行讲解,首先选中设置窗口中口中Left Arm参数,其附带的子参参数,其附带的子参数也会随之展开,包括肩部的上下数也会随之展开,包括肩部的上下和前后移动,胳膊的上下、前后移和前后移动,胳膊的上下、前后移动和转动等等,如图动和转动等等,如图8-31所示。所示。图8-31 Muscle配置窗口 288.3.3 Muscle的配置(3)读者可以通过拖动参数对应的)读者可以通过拖动参数对应的拖拉条,调节相
25、对应部位骨骼的运拖拉条,调节相对应部位骨骼的运动范围,同时在动范围,同时在Scene窗口中对应窗口中对应的骨骼上会出现一个扇形区域,表的骨骼上会出现一个扇形区域,表示骨骼旋转过的范围,如图示骨骼旋转过的范围,如图8-32所所示,能够帮助开发者调节骨骼的动示,能够帮助开发者调节骨骼的动作范围。作范围。图8-32 Scene视图298.3.3 Muscle的配置(4)在 下 方)在 下 方 A d d i t i o n a l Setting窗口中还可以进行其它窗口中还可以进行其它的设置,比如的设置,比如Upper Arm Twist参数,如图参数,如图8-33所示。所示。读者可通过拖动其拖拉条
26、该骨读者可通过拖动其拖拉条该骨骼的运动范围进行调整。设置骼的运动范围进行调整。设置完毕之后点击配置窗口右下角完毕之后点击配置窗口右下角的的“Done”按钮结束按钮结束Muscle的的配置。配置。图8-33 其它设置窗口 308.3.3Muscle的配置(5)返回播放任务模型的动画,在)返回播放任务模型的动画,在Assets面板中找到导入的模型资源,面板中找到导入的模型资源,点击其中的动画文件,如图点击其中的动画文件,如图8-34所所示。在动画的示。在动画的Inspetor面板下方会面板下方会播放该动画,点击上方的进度条可播放该动画,点击上方的进度条可以按时间查看动画每帧的动作,如以按时间查看动
27、画每帧的动作,如图图8-35所示。所示。8-34模型文件下的动画文件 318.3.3Muscle的配置8-35 播放动画文件328.4.1创建动画控制器在在Assets面板中单击鼠标右键面板中单击鼠标右键“Create”“Animator Controller”,创建一个动画控制,创建一个动画控制器,如图器,如图8-36所示。动画控制器的显示和修改在独立的动画编辑界面,双击该动画控所示。动画控制器的显示和修改在独立的动画编辑界面,双击该动画控制器,进入动画控制器编辑窗口,如图制器,进入动画控制器编辑窗口,如图8-37所示所示 图8-36 创建动画控制器图8-37 动画控制器编辑窗口338.4.
28、2 动画控制器的配置1、动画状态机和过渡条件、动画状态机和过渡条件动画状态机:动画状态机:一个角色在游戏中的不同状态下可以作出不同的动作,状态机来更为方便地控制角色动画。状态机来更为方便地控制角色动画。每一个动画控制器中的状态机会有不同的颜色,每一个动画状态机都每一个动画控制器中的状态机会有不同的颜色,每一个动画状态机都对应一个动作。对应一个动作。动画状态机的参数含义如表动画状态机的参数含义如表8-4所示所示 348.4.2动画控制器的配置动画状态机之间的箭头表示两个动画之间的连接,将鼠标箭头放在动画状态单元上,右键点击“Make Transition”创建动画过渡条件,并再次点击另一个动画状
29、态单元上,完成动画过渡条件的连接 名称说明StateMachine动画状态机,可包含若干个动画状态单元State动画状态单元,动画状态机机制中的最小单元Sub-State Machine子动画状态机,可包含若干个动画状态单元或子动画状态机Blend Tree动画混合树,一种特殊的动画状态单元Any State特殊的状态单元,表示任意动画状态Entry本动画状态机的入口Exit本动画状态机的出口358.4.2动画控制器的配置2、过渡条件的参数设置、过渡条件的参数设置创建过渡条件的参数的方法,在动画状态机窗口左侧中的创建过渡条件的参数的方法,在动画状态机窗口左侧中的Parameters视口,点击右
30、上角的视口,点击右上角的“+”号可选择想要添加的参数类型,如图号可选择想要添加的参数类型,如图8-39所示。然后可以为参数命名,并为其设置初始值,如所示。然后可以为参数命名,并为其设置初始值,如图图8-40所示。所示。图8-39 新建参数图8-40 参数设置368.4.2动画控制器的配置单击想要添加参数的过渡条件,然后在单击想要添加参数的过渡条件,然后在Inspector视口中的视口中的Conditions列表中单击列表中单击“+”号创建参号创建参数,选择所需的参数,如图数,选择所需的参数,如图8-41。然后为参数添加对比条件,不同类型的参数对比条件也不同,。然后为参数添加对比条件,不同类型的
31、参数对比条件也不同,比如比如Float类型参数的对比条件有类型参数的对比条件有“Greater”和和“Less”,如图,如图8-42所示。所示。图8-41 为过渡条件创建参数 图8-42 为参数添加对比条件378.4.2动画控制器的配置3、通过代码对动画控制器进行操控、通过代码对动画控制器进行操控(1)首先创建一个工程项目,并命名为)首先创建一个工程项目,并命名为“BNUAnimator”。然后将随书。然后将随书光盘的资源目录下第光盘的资源目录下第8章的章的“BNUAnimator”工程文件下的工程文件下的“Animations”、“Models”、“Textures”等文件夹依次拷备进项目中
32、的等文件夹依次拷备进项目中的“Assets”资源文资源文件夹下。然后创建一个名为件夹下。然后创建一个名为“AniControllers”的空文件夹,用于存放项的空文件夹,用于存放项目所需的动画控制器文件。目所需的动画控制器文件。(2)在)在AniControllers文件夹下单击鼠标右键文件夹下单击鼠标右键“Create”“Animator Controller”创建一个动画控制器,并命名为创建一个动画控制器,并命名为“AnimatorController”。双。双击该动画控制器,进入动画控制器编辑窗口。击该动画控制器,进入动画控制器编辑窗口。(3)向编辑窗口拖拽进)向编辑窗口拖拽进“BoyF
33、orwardKick”、“BoyKickBack”和和“BoyIdle”三个动画文件三个动画文件 388.4.2动画控制器的配置3、通过代码对动画控制器进行操控、通过代码对动画控制器进行操控(4)将)将Idle动画状态单元设置为默认动画单元。右键点击动画状态单元设置为默认动画单元。右键点击Idle动画状态单元,在菜单中选择动画状态单元,在菜单中选择“Set as Layer Defult State”,如图,如图8-43所示。修改完成后所示。修改完成后Idle动画状态单元会变为黄色,然后动画状态单元会变为黄色,然后为各个动画状态单元添加过渡条件,如图为各个动画状态单元添加过渡条件,如图8-44
34、所示。所示。图8-43 添加动画单元 8-44 为动画单元添加过渡398.4.2动画控制器的配置3、通过代码对动画控制器进行操控、通过代码对动画控制器进行操控(5)动画单元和过渡添加完毕后,)动画单元和过渡添加完毕后,下面向游戏控制器中添加实现过渡条下面向游戏控制器中添加实现过渡条件所需的参数。单击件所需的参数。单击Parameters视视口上的口上的“+”号,添加一个号,添加一个Float类型的类型的参数,并命名为参数,并命名为“AniFlag”,设置其,设置其初始值为初始值为-1.0,如图,如图8-45所示。所示。图8-45 创建参数 408.4.2动画控制器的配置3、通过代码对动画控制器
35、进行操控、通过代码对动画控制器进行操控(6)然后选中任意一个过渡条件,)然后选中任意一个过渡条件,在在Inspector视口中的视口中的Conditions列列表中点击表中点击“+”号创建参数并进行参数号创建参数并进行参数的设置的设置(7)在)在Assets面板下新建一个场景,面板下新建一个场景,双击打开场景。在场景中创建一个地双击打开场景。在场景中创建一个地形,给地形添加绿色草地纹理,然后形,给地形添加绿色草地纹理,然后为其添加天空盒,并调整光照方向至为其添加天空盒,并调整光照方向至合适角度,如图合适角度,如图8-46所示。所示。418.4.2动画控制器的配置3、通过代码对动画控制器进行操控
36、、通过代码对动画控制器进行操控(8)向场景中添加人物模型,将)向场景中添加人物模型,将Models文件夹下的文件夹下的fighter模型文件模型文件拖拽到场景中,然后为其添加贴图,拖拽到场景中,然后为其添加贴图,如图如图8-47所示。所示。图8-47 添加人物模型 428.4.2动画控制器的配置3、通过代码对动画控制器进行操控、通过代码对动画控制器进行操控(9)接下来需要创建)接下来需要创建UI界面,点击界面,点击“GameObject”“UI”“Button”创建两个创建两个按钮,并分别命名为按钮,并分别命名为“Button1”和和“Button2”按钮。这两个按钮分别用于对两个动画的控按钮
37、。这两个按钮分别用于对两个动画的控制,当按下任意一个按钮时,系统将启动对制,当按下任意一个按钮时,系统将启动对应的动画过渡。应的动画过渡。(10)下面为人物模型添加动画组件。选中)下面为人物模型添加动画组件。选中“fighter”游戏对象,将之前创建的游戏对象,将之前创建的“AnimatorController”动画控制器拖拽到动画控制器拖拽到Animator组件下的组件下的“Controller”框中,如图框中,如图8-48所示。所示。代码见课本代码见课本438.4.2动画控制器的配置3、通过代码对动画控制器进行操控、通过代码对动画控制器进行操控(10)代码编写完成后将其挂载到)代码编写完成
38、后将其挂载到fighter游戏对象上,然后点击游戏对象上,然后点击Button1和和Button2两个按钮对象,两个按钮对象,将将fighter对象拖拽到对象拖拽到Inspector面板面板下方的下方的OnClick方法的目标对象上,方法的目标对象上,然后选择相应的方法,如图然后选择相应的方法,如图8-49所示。所示。图8-49 挂载脚本和方法448.4.2动画控制器的配置3、通过代码对动画控制器进行操控、通过代码对动画控制器进行操控(11)点击运行按钮之后,案例的运行效果会显示在)点击运行按钮之后,案例的运行效果会显示在Game窗口中,点击屏幕上窗口中,点击屏幕上的两个按钮,可以使场景中的小
39、男孩做出不同的动作,如图的两个按钮,可以使场景中的小男孩做出不同的动作,如图8-50和和8-51所示。所示。图8-50 案例运行效果一图8-51 案例运行效果二45Unity 3D提供了一套用于人形角色动画的重定向机制。游戏美工开发人员可以独立地制作好所有角色模型,游戏动画开发人员也可独立地进行动画的制作,两者不互干涉,8.5.1重定向的原理Mecanim动画系统提供了一套简化过的人形角色骨骼架构。简单来说,动画系统提供了一套简化过的人形角色骨骼架构。简单来说,Avatar文件就是模型骨骼架构与系统自带骨骼架构间的桥梁,重定向的模型骨骼架构文件就是模型骨骼架构与系统自带骨骼架构间的桥梁,重定向
40、的模型骨骼架构都要通过都要通过Avatar与自带骨骼架构搭建映射。与自带骨骼架构搭建映射。映射后的模型骨骼可能通过映射后的模型骨骼可能通过Avatar驱动系统自带骨骼运动,这样就会产生一套驱动系统自带骨骼运动,这样就会产生一套通用的骨骼动画,其他角色模型只需借助这套通用的骨骼动画,就可以做出与通用的骨骼动画,其他角色模型只需借助这套通用的骨骼动画,就可以做出与原模型相同的动作,即实现角色动画的重定向。原模型相同的动作,即实现角色动画的重定向。468.5.2重定向的应用(1)首先创建一个工程项目,并命名为)首先创建一个工程项目,并命名为“BNUAiControl”,然后将随书光盘的资源目,然后将
41、随书光盘的资源目录下第录下第8章的章的“BNUAnimator”工程文件下的工程文件下的“Animations”、“Models”、“Textures”等文等文件夹依次拷备进项目中的件夹依次拷备进项目中的“Assets”资源文件夹资源文件夹下。然后创建一个名为下。然后创建一个名为“AniControllers”的空的空文件夹,用于存放项目所需的动画控制器文件。文件夹,用于存放项目所需的动画控制器文件。(2)在)在AniControllers文件夹下单击鼠标右键文件夹下单击鼠标右键“Create”“Animator Controller”创建一个动创建一个动画控制器,并命名为画控制器,并命名为“
42、AnimatorController”。双击该动画控制器,然后将双击该动画控制器,然后将“BoyJumpTurnKick”和和“BoyRaceSideKick”两个动画文件拖拽进窗两个动画文件拖拽进窗口,创建两个动画状态单元,如图口,创建两个动画状态单元,如图8-52所示。所示。图8-52 创建动画控制器 478.5.2重定向的应用(3)动画单元和过渡添加完毕后,)动画单元和过渡添加完毕后,下面向游戏控制器中添加实现过渡下面向游戏控制器中添加实现过渡条件所需的参数。单击条件所需的参数。单击Parameters视口上的视口上的“+”号,添加两个号,添加两个Bool类类型的参数,并分别命名为型的参
43、数,并分别命名为“JtoR”和和“RtoJ”,设置其初始值为,设置其初始值为false,如,如图图8-53所示。所示。(4)然后选中任意一个过渡条件,)然后选中任意一个过渡条件,在在Inspector视口中的视口中的Conditions列表中点击列表中点击“+”号创建参数,并进号创建参数,并进行参数的设置。行参数的设置。488.5.2重定向的应用(5)在)在Assets面板下新建一个场面板下新建一个场景,双击打开场景。在场景中创建景,双击打开场景。在场景中创建一个地形,给地形添加绿色草地纹一个地形,给地形添加绿色草地纹理,然后为其添加天空盒,并调整理,然后为其添加天空盒,并调整光照方向至合适角
44、度,如图光照方向至合适角度,如图8-54所所示。示。图8-54 添加地形和天空盒图 498.5.2重定向的应用(6)向场景中添加人物模型,将)向场景中添加人物模型,将Models文件夹下的文件夹下的Boy模型文件和模型文件和Girl模型文件拖拽到场景中,然后模型文件拖拽到场景中,然后为其添加贴图,如图为其添加贴图,如图8-55所示。所示。508.5.2重定向的应用(7)接下来需要创建)接下来需要创建UI界面,点击界面,点击“GameObject”“UI”“Button”创建两个按钮,并分别命名为创建两个按钮,并分别命名为“Button1”和和“Button2”按钮。这两个按钮分别用于对两个动画
45、的按钮。这两个按钮分别用于对两个动画的控制,当按下任意一个按钮时,系统将启动对应的动画过渡。控制,当按下任意一个按钮时,系统将启动对应的动画过渡。(8)下面为人物模型添加动画组件。选中)下面为人物模型添加动画组件。选中“Boy”和和“Girl”游戏对象,游戏对象,将之前创建的将之前创建的“AnimatorController”动画控制器拖拽到动画控制器拖拽到Animator组件下的组件下的“Controller”框中,然后再新建一个框中,然后再新建一个C#脚脚本,并将其命名为本,并将其命名为“BNUAniControl.cs”。详细代码见课本。详细代码见课本。518.5.2重定向的应用(9)代
46、码编写完成后将其挂载到)代码编写完成后将其挂载到Boy游戏对象上,然后点击游戏对象上,然后点击Button1和和Button2两个按钮对象,将两个按钮对象,将Boy对象拖拽到对象拖拽到Inspector面面板下方的两个按钮的板下方的两个按钮的OnClick方法的目标对象上,然后选择相应的方法的目标对象上,然后选择相应的方法,如图方法,如图8-56所示。所示。图8-56 挂载脚本528.5.2重定向的应用(10)接下来点击运行按钮,其运行效果就会呈现在)接下来点击运行按钮,其运行效果就会呈现在Game窗口中,当读者点击窗口中,当读者点击任意一个按钮时,两个游戏角色对象就会做出相同的动作,如图任意一个按钮时,两个游戏角色对象就会做出相同的动作,如图8-57和图和图8-58所所示。两个角色对象通过示。两个角色对象通过Mecanim中的动画重定向功能,同时播放同一个动画。中的动画重定向功能,同时播放同一个动画。图8-57 案例运行效果一图8-58 案例运行效果二53