第3章 角色动画

本章主题:

  • 加载动画网格到沙箱;
  • 附加网格到动画骨骼;
  • 沙箱中战士和武器的动画;
  • 混合多个动画;
  • 创建Lua动画状态机;
  • 创建战士和武器的动画状态机。

当沙箱功能基本就位并能显示一个基本的智能体之后,我们可以着手为它添加动画,使它看起来更像一个真人。虽然目前我们可以给智能体附加一个基础的人物网格,但是如果没有动画它仍然缺乏生气。

动画系统对于AI的表现和功能都非常重要。沙箱AI只能在有动画时才能执行动作,虽然给人的直观感觉并非如此。如果一个动画需要播放5分钟且中途不能打断,则我们的AI在执行动作时就需要考虑到这种情况,否则AI会在这5分钟内失去响应。

首先简单介绍一下沙箱如何表达和使用的动画。

到目前为止,我们已经知道如何在沙箱中创建网格的表现。现在我们继续处理另一种称为骨骼的资源。Ogre(沙箱的底层渲染器)把骨骼和动画一起存储在单一的.skeleton文件中。沙箱中每个动画网格引用的动画都放在media/animations文件夹下,比如我们的战士的动画位置在media/ animations/futuristic\_soldier/futuristic\_soldier.skeleton

将一个动画网格加载到沙箱的方法和加载普通网格没有区别。简单地调用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.