第3章 角色动画
本章主题:
- 加载动画网格到沙箱;
- 附加网格到动画骨骼;
- 沙箱中战士和武器的动画;
- 混合多个动画;
- 创建Lua动画状态机;
- 创建战士和武器的动画状态机。
当沙箱功能基本就位并能显示一个基本的智能体之后,我们可以着手为它添加动画,使它看起来更像一个真人。虽然目前我们可以给智能体附加一个基础的人物网格,但是如果没有动画它仍然缺乏生气。
动画系统对于AI的表现和功能都非常重要。沙箱AI只能在有动画时才能执行动作,虽然给人的直观感觉并非如此。如果一个动画需要播放5分钟且中途不能打断,则我们的AI在执行动作时就需要考虑到这种情况,否则AI会在这5分钟内失去响应。
3.1 骨骼和网格
首先简单介绍一下沙箱如何表达和使用的动画。
3.1.1 网格骨骼
到目前为止,我们已经知道如何在沙箱中创建网格的表现。现在我们继续处理另一种称为骨骼的资源。Ogre(沙箱的底层渲染器)把骨骼和动画一起存储在单一的.skeleton
文件中。沙箱中每个动画网格引用的动画都放在media/animations
文件夹下,比如我们的战士的动画位置在media/
animations/futuristic\_soldier/futuristic\_soldier.skeleton
。
3.1.2 加载一个动画网格
将一个动画网格加载到沙箱的方法和加载普通网格没有区别。简单地调用Core.CreateMesh
函数就可以创建一个动画网格了。
Sandbox.lua: function Sandbox_Initialize(sandbox) local soldier = Core.CreateMesh( sandbox, "models/futuristic_soldier/" ...
Get Lua游戏AI开发指南 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.