2.5 添加玩家动画
通过添加玩家包络模型,玩家包络将可以真实地在场景中移动,但是目前只有一个玩家包络,此节我们将为游戏加入真实的玩家模型。在游戏中,玩家模型应是玩家动画,在光核引擎中,可以用动画帧播放动画,或使用骨骼动画执行动画。这里我们使用动画帧播放动画,骨骼动画详见高级篇。
2.5.1 游戏玩家动画配适
在游戏中,玩家动画可以有很多种类,如待机动画、攻击动画、躲闪动画、死亡动画等等。我们以待机动画为例,说明玩家动画的添加方法。将玩家的包络模型与待机动画第一帧原点对齐,如图2.9所示。

图2.9 玩家包络模型与原始动画帧模型
缩小玩家模型,使得模型全部进入包络内部,同时记录缩放系数,如图2.10所示,缩放系数为38.089。

![]()
图2.10 玩家模型缩放入玩家包络
2.5.3 游戏玩家动画配置信息
在光核引擎中,玩家动画同样使用PT物体表示,在配置玩家动画的PT物体前,同样先要填写这个PT物体的基物体(即DT物体)的配置信息,配置项如下所示。在Anim文件夹下,添加standby文件夹,用于放置待机的动画帧。在添加动画配置信息前,同样需要为这个DT物体设置模型(mod.obj)、贴图(mod.bmp)和材质(mod.mtl)的文件路径。模型、贴图和材质可以是待机动画的第一帧模型和对应的贴图以及对应的模型材质,也可以是一个简单的物体,具体是何种方式,取决于如何使用待机动画。这里我们添加的是待机动画的第一帧模型。
…
[DTMod3]
texnum = 1
mtl=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\mod.mtl
mod=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\mod.obj
tex1=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\mod.bmp
[DTMod]
num = 3
…
配置完成基本DT物体项后,在这个DT物体项中开始添加这个玩家的动画信息,如下所示。UseAnim设置是否使用动画功能,这里开启。AnimTypeN设置总共的动画类型数,当前只有一个待机动画,因此设置为1。AnimType1FrameN设置1号动画的帧数,在这里即为待机动画的帧数,共13帧(0.obj~12.obj共13个帧物体)。AnimType1Frame1~AnimType1Frame13依次设置这13个帧物体的obj模型路径。
…
[DTMod3]
texnum = 1
mtl=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\mod.mtl
mod=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\mod.obj
tex1=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\mod.bmp
UseAnim=1
AnimTypeN=1
AnimType1FrameN=13
AnimType1Frame1=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\0.obj
AnimType1Frame2=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\1.obj
AnimType1Frame3=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\2.obj
AnimType1Frame4=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\3.obj
AnimType1Frame5=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\4.obj
AnimType1Frame6=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\5.obj
AnimType1Frame7=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\6.obj
AnimType1Frame8=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\7.obj
AnimType1Frame9=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\8.obj
AnimType1Frame10=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\9.obj
AnimType1Frame11=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\10.obj
AnimType1Frame12=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\11.obj
AnimType1Frame13=model\\LearnLC3D\\Chapter1\\DT\\Anim\\standby\\12.obj
[DTMod]
num = 3
…
设置完DT物体后,开始设置此DT物体派生出的PT物体。然后在[ScenePTMod1]字段中添加第3个PT物体信息如下:
…
3x=0.0
3y=0.0
3z=0.0
3sx=0.38089
3sy=0.38089
3sz=0.38089
3AbsPos=1
3ShowTip=0
3type=3
3SelMode=0
3DyPhyCtrlMod=1
3DyPhyCtrlModID=2
num = 3
…
之前我们讲过,用户控制玩家,是控制玩家的包络模型,因为如果直接控制玩家的动画模型,玩家动画模型的面数过多、是否为封闭物体这些因素都是不可控因素,都将导致玩家的碰撞检测可能出现问题,因此我们直接控制玩家包络模型。那么如何让玩家的动画模型跟随着包络模型?这里只需要设置此玩家的动画模型受物理模型控制即可。
此字段中,DyPhyCtrlMod设置此动画模型是一个受物理物体控制的物体,DyPhyCtrlModID设置这个物体具体受哪个物理物体控制,为物体的ID即序号,这里为2即玩家的包络模型。type为此物体的DT物体类型(序号),即为3号。sx、sy、sz设置此模型的缩放系数x分量、y分量和z分量,2.5.1节中已经把玩家的动画模型缩放入包络模型中,缩放比例为38.089%,因此这里设置缩放为0.38089。
AbsPos设置这个物体的位置为绝对位置,那么这个物体的初始位置即为x、y、z位置所表示,若不设置为绝对位置,那么这个物体的初始位置即为x+场景偏移x、y+场景偏移y、z+场景偏移z的位置所表示(场景偏移见应用篇)。
因为此物体完全由玩家包络模型控制,那么此物体的姿态将与玩家包络模型完全一致,此时x、y、z将表示此物体相对于被控物理模型的位置偏移,这里x、y、z设置为0表示没有偏移,与包络模型完全一致。但偏移还取决于是否设置绝对位置(AbsPos),当设置了则偏移为x、y、z表示,若不设置则偏移为x+场景偏移x、y+场景偏移y、z+场景偏移。
随后在组中添加此3号PT物体,如下所示:
…
[Scene1Group]
Group1ID1=1
Group1ID2=2
Group1ID3=3
Group1Num=3
…
到此用户控制玩家包络的运动时,将同时控制玩家动画模型,但是玩家是不应该看到包络模型的,因此需要隐藏包络模型,我们为2号包络PT物体添加如下配置项:
…
2x=-114.234
2y=39.009
2z=127.017
2ShowTip=0
2type=2
2SelMode=0
2DyPhyMod=1
2ModCanColldSelfRot=0
2HideMod=1
…
HideMod设置此物体隐藏(并非不绘制),这时包络不可见,只有玩家动画模型。运行测试如下图所示,图2.11显示了待机动画模型的第一帧动画。

图2.11 玩家待机动画模型第一帧模型
2.5.4 为玩家的动作添加待机动画
上一节我们为玩家添加了待机动画,但玩家只能移动第一帧模型,并没有实际动画产生。这一节我们为玩家的动作加入动画。由于玩家动作多样,形式也各不相同,无法通过配置项产生动画,因此需要进行二次开发。
光核引擎有丰富的二次开发接口,原生支持C、C++开发,也可支持C#、Phython等语言编程。光核引擎的二次开发方式有两种:
·开发一个EXE可执行程序,在程序中实现用户自定义功能。此方法高度定制化,可开发完全自主界面的游戏、三维应用程序。
·开发插件供引擎调用,实现用户自定义功能。此方法快捷、简单,支持大团队多人协
光核引擎游戏开发从入门到精通[集成开发环境版]:
https://space.bilibili.com/3706942159588199




