游戏开发:Mecanim角色控制与游戏环境搭建
1. Mecanim控制角色
Mecanim可用于控制场景中的角色,具体操作如下:
-
设置动画类型
:将角色的动画类型设置为Humanoid,配置肌肉后,不同角色可共享动画剪辑,即便角色本身没有动画也能实现。对于不太适配动画的角色,可通过调整各身体部位的范围来优化配置。
-
设置动画剪辑
:Humanoid角色在设置动画剪辑范围时提供了新选项,还有其他控制角色的选项。Mecanim可利用动画剪辑的速度移动角色,或用角速度使其转向。
-
创建状态
:借助Animation Controller(Mecanim强大的状态引擎),使用动画剪辑创建状态。添加参数后,可设置角色从一个状态转换到下一个状态的条件。
-
覆盖动画
:引入Masking和Layers可使用不同动画覆盖角色的部分动作,能让角色融入对话行为。
-
开发AI脚本
:开发简单的AI脚本,使一个角色接近玩家并等待对话邀请。暂停常规文本和鼠标悬停效果后,玩家即可与NPC对话。
2. 搭建游戏环境
2.1 添加最终资产
为将功能应用于实际场景,需导入3D艺术资产,包括:
- 蒂兹布拉特神庙及其守护兽
- 代表蒂兹布拉特万神殿六种自然元素的六块石碑
- 代表元素的六个符文,可作为激活物品的钥匙
- 分散在环境中的六个神龛,每个对应一种元素
- 带有隧道的小型洞穴系统
多数物体配有光照贴图,神庙分为两部分,内殿的光照贴图若非必要,不建议重新烘焙。
2.2 准备新资产
资产将以Unity包的形式导入,无需为每个对象设置材质。因Inventory场景已有很多功能,导入前可先克隆并重命名:
1. 打开Inventory场景。
2. 删除地形和定向光。
3. 确保预制体已更新,删除Kahmi预制体、Collider Start预制体和Gimbok Group预制体。
4. 通过“File ➤ Save Scene As…”将场景保存为MainLevel到Scenes文件夹。
5. 从Assets菜单选择“Import Package ➤ Custom Package”。
6. 从第17章的BookAssets文件夹中选择并导入GameEnvironment.unitypackage。
7. 在对话框中选择“Import”导入所有内容。此包会添加Structures文件夹和GameEnvironment预制体等。
8. 将新的GameEnvironment预制体从Adventure Prefabs文件夹拖到Hierarchy视图。
9. 打开Scene视图中的场景照明开关。
10. 调整Scene视图查看导入的内容。
由于部分主要对象在建模应用中已准备好光照贴图,包中包含了新的定向光。若有Unity Pro且想使用Beast烘焙自己的贴图,可删除“Sun for Lightmaps”定向光并随意旋转对象;本文将使用提供的光照贴图和光源。
接下来,在Hierarchy视图中打开GameEnvironment预制体但不全部展开,设置功能和特效时,保持对象在场景中相对靠近。以下是后续操作:
1. 选择Hierarchy视图中除新GameEnvironment预制体、Inventory Group和Terrain Boundaries之外的所有对象,将其移到神庙和神龛附近,它们应已处于神庙前地形的正确高度。
2. 点击“Play”查看新资产。
3. 保存场景。
3. 重新审视材质和光照贴图
在进入神庙前,了解一下包中的材质选项。随着Beast的加入,Unity 3.x中的光照贴图解决方案使使用光照贴图的着色器受到影响。尽管理论上仍有如Bumped Specular等选项,但实际只有常规漫反射纹理与光照贴图较暗部分的叠加效果,白色部分被忽略。这种着色器完全自发光,不响应场景光照,缺乏高光,视觉效果不佳。
通常,使用光照贴图时会创建一个名为Lightmapped的层,将对象排除在场景光照之外以节省资源,但这样会使物体看起来缺乏光泽和平整度。
Beast在Unity的免费版和专业版中都可用。专业版可使用全局光照(GI)功能精细调整光照解决方案;免费版可烘焙简单阴影并选择阴影深度。可以通过月球和沙漠的光照差异来理解GI的作用,月球和沙漠的阴影清晰,明暗对比强烈,而潮湿环境中,水分会散射光线,产生更柔和的阴影和更小的明暗对比,GI模拟的就是这种潮湿环境的光照效果。
游戏环境更接近亚热带而非沙漠,但并非所有人都有专业版,因此主要结构配有预烘焙的光照贴图和独特材质。
灰色石头纹理的材质使用了Strumpy Shader Editor创建的自定义着色器,除水神龛需要有光泽的湿外观外,其他神龛使用棕色石头纹理,与传统光照贴图着色器搭配效果良好。
若想使用Beast,可保留对象的现有材质并更改着色器。Unity支持两个映射通道,第一个用于漫反射纹理,第二个用于光照贴图。场景中的主要对象(神庙、神龛和石碑)都有映射通道2,且展开的几何体完全在映射边界内。使用漫反射加光照贴图时,漫反射纹理通常会多次平铺,而光照贴图要求每个面在贴图上有唯一位置以保存光照信息,目前Unity仅支持两个映射通道。
使用Beast创建光照解决方案的优势在于,无需为每个光照贴图对象创建独特材质,Unity会在内部将生成的光照贴图添加到对象的常规材质中,减少了材质设置工作。游戏结构中实际上只有两种基本材质:灰色石块材质和棕色石头材质。提供预烘焙光照贴图则需要为每个主要对象创建独特材质。
在进行光照贴图和材质研究时,需遵循一些规则,任何要投射阴影并接收光照贴图的对象都必须标记为Static。以下是具体操作步骤:
1. 从Scene视图中选择“Temple Outside”对象,调整Scene视图以获得良好的观察视角。若Scene视图中灯光、相机等图标过多,可在Scene视图的Gizmos下拉菜单中切换图标显示。观察调整视角时镜面高光的效果。
2. 在Inspector的右上角,可看到该对象标记为Static。
3. 停用“Temple Outside”,选择神庙内部“Temple of Tizzleblat”。
4. 取消勾选神庙内部的Static选项。因其内部光照贴图已在建模应用中使用V-Ray渲染器创建,使用Beast重新创建需要在场景中创建和调整多个灯光,且耗时较长。由于内部被外部遮挡,无需自身投射阴影,取消Static可将其从光照烘焙解决方案中移除。
5. 注意其Mesh Renderer未设置为接收阴影。
6. 将两个神庙守护者Gertrude和Harvey设置为Static,使其投射烘焙阴影。
7. 激活“Temple Outside”。该对象使用“Temple Outside 1”材质和自定义着色器,可从场景光照中添加镜面高光,虽能避免传统全自发光着色器的粉笔感,但计算光照时会消耗更多资源。
若使用Unity Pro,可能会看到动态阴影,在实验光照贴图时可暂时关闭:
1. 若使用Pro,通过“Edit ➤ Project Settings ➤ Quality, Shadows”记录当前值,然后将Shadow Distance设置为0。
2. 同样在Pro中,通过“Edit ➤ Project Settings ➤ Player ➤ Other Settings”将Rendering Path设置为Forward,这样只能看到烘焙阴影。Shadow Distance表示动态阴影开始计算的距离,设置为0可防止动态阴影。
3. 选择“Temple Outside”。
4. 在其Mesh Renderer组件中,点击Element 0材质,在Project视图中快速定位“Temple Outside 1”材质。
5. 复制该材质并命名为“Temple Outside”。
6. 将新材质拖到场景中的神庙上或直接拖到Element 0插槽。
7. 将其着色器更改为“Legacy Shaders/Lightmapped/Diffuse”,并将主颜色设置为中灰色。此时阴影区域不太明显,因为传统着色器为材质提供了大部分光照。
为查看情况,可关闭场景灯光:
1. 选择GameEnvironment预制体中“Temple Group”上方的“Sun for Lightmaps”灯光对象。若需按名称定位对象,可使用Project视图顶部的搜索功能,输入名称选择对象后,点击旁边的X返回常规视图。
2. 禁用该灯光。由于地形尚未烘焙光照,此时会显示为黑色;若地形已烘焙光照,会与神庙一样自发光。
3. 再次启用“Sun for Lightmaps”灯光。
4. 将其阴影类型设置为Soft Shadows。
为查看无GI时Beast烘焙的光照效果,可使用基础石头材质测试“Temple Outside”对象,该材质使用Bumped Specular着色器:
1. 从Structures ➤ Materials文件夹中选择stonetexture材质。
2. 将该材质应用于“Temple Outside”。由于基础材质不使用神庙外部的光照贴图,且动态阴影已禁用,此时不再有窗台的阴影。
3. 选择“Temple Outside”对象。
4. 从Window菜单打开Lightmapping。
5. 在Bake部分选择Low Quality并设置为Single Lightmaps。
6. 若使用Pro,将Bounces设置为0以禁用GI。
7. 在Bake部分点击“Bake Scene”。烘焙完成后,可看到类似图17 - 6的效果,地形已烘焙,新的光照贴图已内部添加。使用Beast生成的光照贴图,无需为使用相同纹理的不同对象生成材质,但缺点是场景中不再计算对象的镜面反射,凹凸贴图也不再使用,对象无法接收GI的反射光和颜色,看起来与场景不太融合。
8. 再次选择石头纹理材质。
9. 尝试调整Specular Color和Shininess。
10. 撤销操作恢复原始值。此时墙的材质会发生变化,但神庙不再响应,尽管它当前使用相同的材质。
生成的光照贴图的alpha通道也值得关注。使用传统光照贴图着色器时,需将主颜色调整为深中灰色以获得正确外观。在Unity中生成光照贴图时,这种颜色调整会添加到贴图副本的alpha通道中。要查看生成的光照贴图,可在为场景保存光照贴图的文件夹或Lightmapping窗口中查看:
1. 从Project视图的Scenes文件夹中打开新添加的MainLevel文件夹。
2. 在Project视图中选择LightmapFar - 0。
3. 在Inspector中切换alpha/diffuse按钮,查看添加到alpha通道的深色阴影。
4. 探索专业版光照贴图功能
在Unity Pro中,可利用Beast的GI功能使用Dual Lightmaps。Far版本包含GI和常规阴影,Near版本仅包含GI,实时阴影在Shadow Distance内添加:
1. 在Unity Pro的Lightmapping窗口的Bake部分,将Mode设置为Dual Lightmaps。
2. 将Bounces设置回1以查看GI效果。
3. 点击“Bake Scene”。这次烘焙时间更长,烘焙完成后,神庙窗台下方的阴影更柔和,且有反射光的变化。
接下来查看激活动态照明后的情况。只要Lightmapping窗口仍打开,可在Scene视图的Lightmap Display中临时调整Shadow Distance:
1. 在Lightmap Display中将Shadow Distance设置为约40,此时无变化。要使用动态照明,还需使用专业版的Deferred Lighting功能。
2. 通过“Edit ➤ Project Settings ➤ Player ➤ Other Settings”将Rendering Path设置为Deferred Lighting。此时烘焙阴影会被实时光照取代,材质再次显示其凹凸和镜面反射效果。
3. 尝试减小Shadow Distance,可看到烘焙阴影逐渐融合。随着动态光照起作用,材质恢复原始状态,再次看到石头上的镜面高光。
烘焙光照贴图后,需使动态阴影与之匹配:
1. 选择“Sun for Lightmaps”对象,调整其阴影强度,使在来回调整Shadow Distance值时,动态阴影与烘焙阴影看起来大致相同。
以下是操作流程的mermaid流程图:
graph LR
A[开始] --> B[Mecanim控制角色]
B --> C[设置动画类型]
B --> D[设置动画剪辑]
B --> E[创建状态]
B --> F[覆盖动画]
B --> G[开发AI脚本]
A --> H[搭建游戏环境]
H --> I[添加最终资产]
H --> J[准备新资产]
J --> K[打开Inventory场景]
K --> L[删除地形和定向光]
L --> M[更新并删除预制体]
M --> N[保存场景为MainLevel]
N --> O[导入Unity包]
O --> P[调整场景设置]
H --> Q[重新审视材质和光照贴图]
Q --> R[了解材质选项]
R --> S[使用Beast测试]
S --> T[调整材质和光照]
H --> U[探索专业版光照贴图功能]
U --> V[设置Dual Lightmaps]
V --> W[烘焙场景]
W --> X[调整动态阴影]
X --> Y[结束]
通过以上步骤,可完成角色控制和游戏环境的搭建,同时对光照贴图和材质有更深入的了解,根据不同需求优化游戏的视觉效果。
游戏开发:Mecanim角色控制与游戏环境搭建
5. 光照贴图与材质效果总结
为了更清晰地对比不同光照贴图和材质设置下的效果,我们可以通过一个表格来总结上述操作中的关键信息:
| 操作 | 材质与着色器 | 光照设置 | 效果 |
| — | — | — | — |
| 使用传统光照贴图着色器 | Legacy Shaders/Lightmapped/Diffuse,主颜色调整为深中灰色 | 场景光开启 | 阴影区域不太明显,物体缺乏高光,视觉效果偏平淡 |
| 使用自定义着色器(Temple Outside 1) | 自定义着色器添加镜面高光 | 场景光开启 | 减少了传统全自发光着色器的粉笔感,但计算光照消耗更多资源 |
| 使用Beast生成Single Lightmaps(无GI) | Bumped Specular着色器 | Bounces设置为0,Shadow Distance为0 | 地形烘焙完成,新光照贴图内部添加;场景中不再计算镜面反射,凹凸贴图不使用,物体与场景融合度差 |
| 使用Beast生成Dual Lightmaps(有GI) | 物体原有材质 | Bounces设置为1,Shadow Distance按需调整,Rendering Path为Deferred Lighting | 阴影更柔和,有反射光变化;动态光照起作用时,材质恢复凹凸和镜面反射效果 |
通过这个表格,我们可以直观地看到不同设置下的优缺点,开发者可以根据项目需求和资源情况进行选择。
6. 实际应用中的注意事项
在实际的游戏开发过程中,还有一些额外的注意事项需要牢记:
-
Shader兼容性
:由于Unity游戏引擎不断发展,Strumpy Shader Editor作为第三方插件,其创建的自定义着色器可能需要偶尔更新以兼容新版本的Unity。如果结构显示为鲜艳的品红色,可能需要使用标准着色器版本的材质,这些材质位于对应章节资产的Legacy Shader Materials文件夹中,名称相同但不带有“1”后缀。开发者应定期检查相关资源的更新情况。
-
光照烘焙时间
:使用Beast进行光照烘焙时,尤其是在使用Dual Lightmaps和开启GI功能时,烘焙时间会显著增加。因此,在开发过程中应合理安排时间,避免频繁进行不必要的烘焙操作。可以在关键阶段进行全面烘焙,或者先使用低质量设置进行初步测试。
-
资源管理
:虽然使用Beast生成光照贴图可以减少材质设置工作,但生成的光照贴图文件可能会占用一定的存储空间。开发者需要对场景中的光照贴图资源进行合理管理,避免因资源过多导致项目体积过大。
7. 拓展与优化建议
除了上述的基本操作和注意事项,我们还可以对游戏环境进行进一步的拓展和优化:
-
动态光照的优化
:在使用动态光照时,可以根据场景的实际情况调整Shadow Distance的值,避免在不必要的区域计算动态阴影,从而提高性能。例如,在玩家活动范围较小的场景中,可以适当减小Shadow Distance。
-
材质的多样化
:可以尝试为不同的物体添加更多不同的材质和纹理,以增加游戏环境的丰富度和真实感。例如,为神庙的不同部分使用不同的石头纹理,或者为神龛添加独特的装饰纹理。
-
场景布局的调整
:根据游戏的玩法和剧情需求,对场景中的物体布局进行优化。例如,合理安排神庙、神龛和石碑的位置,使玩家在探索过程中更有乐趣和挑战性。
以下是一个简单的优化操作步骤列表:
1. 打开场景,定位需要优化的区域。
2. 根据上述优化建议,对动态光照、材质或场景布局进行调整。
3. 进行光照烘焙或测试,观察效果。
4. 根据测试结果,进一步调整参数,直到达到满意的效果。
8. 总结与展望
通过本文介绍的Mecanim角色控制和游戏环境搭建的方法,开发者可以创建出具有丰富视觉效果和交互性的游戏场景。从角色的动画控制到游戏环境的资产导入、光照贴图和材质的设置,每一个环节都对最终的游戏质量有着重要的影响。
在未来的游戏开发中,随着技术的不断进步,我们可以期待更高效、更强大的工具和功能出现。例如,更智能的光照烘焙算法可以减少烘焙时间,同时提高光照效果的质量;更丰富的材质库和着色器选项可以让开发者轻松实现各种独特的视觉风格。
希望本文能够为游戏开发者提供有价值的参考,帮助他们在游戏开发的道路上取得更好的成果。
以下是一个总结操作流程的mermaid流程图:
graph LR
A[开始开发] --> B[Mecanim角色控制]
B --> C[设置动画与状态]
A --> D[游戏环境搭建]
D --> E[导入资产]
E --> F[调整场景布局]
D --> G[材质与光照设置]
G --> H[选择着色器与光照模式]
H --> I[光照烘焙]
I --> J[测试与优化]
J --> K[检查Shader兼容性]
J --> L[优化动态光照]
J --> M[多样化材质]
J --> N[调整场景布局]
N --> O[最终测试]
O --> P[发布游戏]
P --> Q[持续优化与更新]
这个流程图展示了从游戏开发的开始到最终发布以及后续持续优化的整个过程,涵盖了本文介绍的各个关键步骤。开发者可以根据这个流程,有条不紊地进行游戏开发工作。
超级会员免费看

被折叠的 条评论
为什么被折叠?



