Lua游戏AI开发指南_【美】David Young_AZW3_MOBI_EPUB_PDF_电子书(无页码)_【美】David Young
内容节选
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/" .. "futuristic_soldier_dark_anim.mesh"); 3.1.3 显示骨骼 默认情况下,标准网格和动画网格在沙箱中看不出区别,除非把骨骼渲染出来。沙箱提供了一个SetDisplaySkeleton函数来显示骨骼,用于简单的调试显示。Sandbox.lua: function Sandbox_Initialize(sandbox) ... Animation.SetDisplaySkeleton(soldier, true); 图3-1显示了士兵网格和绘制的调试骨骼信息。默认情况下,如果没有在骨骼上应用动画,动画网格通常就会呈现一个T字形姿势。 图3-1 显示调试骨骼信息的动画网格 3.2 附加网格到骨骼上 附加网格到一根骨头上非常容易。当动画更新骨骼时,网格将更新它的位置来和它附加的骨骼保持同步。沙箱提供了Animation.AttachToBone函数来附加网格到骨骼上,还允许提供骨骼的位置和旋转偏移量。 网格一旦附加到骨骼上,你应该丢弃指向网格的变量,因为它已经无效了。最好把这个变量设为nil以避免出错。 给战士附加武器 只需简单调用Animation.AttachToBone函数就能给我们的战士附加一把武器。通过设置偏移量就可以让战士手握狙击枪了。Sandbox.lua: function Sandbox_Initialize(sandbox) ... local weapon = Core.CreateMesh( sandbox, "models/futuristic_soldier/" .. "soldier_weapon.mesh"); Animation.AttachToBone( soldier, "b_RightHand", weapon, Vector.new(0.04, 0.05, -0.01), -- position offset Vector.new(98.0, 97.0, 0)); -- rotation offset in angles weapon = nil; 现在运行沙箱就能看的我们的战士右手握着一把武器了,如图3-2所示。 图3-2 附加带偏移量的武器到战士网格 3.3 动画片段 现在我们有了一个带骨骼的网格,下面将讨论如何让骨骼动起来。Ogre的动画系统是基于动画片段和正向动力学的。基本上,它就是使用一个骨骼的层级结构,每根子骨骼保存了相对于它的父骨骼的位置和方向的偏移。 每个动画片段保存了一组关键帧,每个关键帧是整个骨架在一个特定时间点的姿势。Ogre会在这些关键帧之间对每根骨头的位置进行插值来创建一个带动画的骨架。 3.3.1 播放战士动画 为战士播放动画需要3个重要的步骤。首先,需要根据名称获取动画;接下来,启动动画;最后,在沙箱的更新循环中更新动画。 沙箱会根据更新循环的时间间隔来步进动画。 动画的获取是通过Animation.GetAnimation函数来完成,动画的启动是通过Animation.SetEnabled函数完成,动画的步进则是通过Animation.StepAnimation函数来完成的。Sandbox.lua: local idleAnimation; function Sandbox_Initialize(sandbox) ... idleAnimation = Animation.GetAnimation( soldier, "stand_run_forward_weapon"); -- Allow the animation to affect the soldier's skeleton. Animation.SetEnabled (idleAnima......
- 信息
- 内容提要
- 作者简介
- 技术评审简介
- 前言
- 第1章 从构建沙箱开始
- 1.1 AI沙箱简介
- 第2章 创建并移动智能体
- 2.1 新建一个沙箱项目
- 第3章 角色动画
- 3.1 骨骼和网格
- 第4章 意识体控制
- 4.1 创建身体
- 第5章 导航
- 5.1 寻路
- 第6章 决策制定
- 6.1 创建自定义类型
- 第7章 知识表达
- 7.1 知识源
- 第8章 感知
- 8.1 事件
- 第9章 策略
- 9.1 影响力地图