为了能使用 UDK 制作出一款像模像样的游戏,自定义自己的游戏角色是必不可缺的要点所在,而这涉及到很多方面的内容。不过我今天要说的是很多童鞋在调试游戏时遇到的一个小问题:明明已经在编辑器设置好了 AnimTree,也在 Pawn 类中写了代码,可怎么运行游戏后角色却没有任何动画或者部分动画丢失。

如上图所示,这里的一个 AnimTree 使用了 5 个不同的 AnimSet,下面在Pawn类中调用 :

===========================省略代码=========================

//创建人体躯干骨架网格物体组件 Begin Object Name=BodySkeletalMeshComponent SkeletalMesh=SkeletalMesh'BSA_People.BodySkeletalMesh.00002_StartClothes_KunN' AnimTreeTemplate=AnimTree'BSA_People.BodyAnimTree.BladeMaster_Kun_AnimTree' PhysicsAsset=PhysicsAsset'BSA_People.BodyPhAsset.00002_StartClothes_KunN_Physics' AnimSets(0)=AnimSet'BSA_People.BodyAnimSet.Move_BladeMaster_Kun_AnimSet' Translation=(Z=-49) Rotation=(Yaw=0,Pitch=0,Roll=0) Scale=2


===========================省略代码=========================

表面上看起来,完全正确没有任何问题。然而实际运行的话,就会出现角色动画大量丢失的问题。而原因就出在代码中的AnimSets部分,由于UDN上有关自定义角色的示例使用的AnimTree中只放入了一个AnimSet,因此其示例Pawn类代码中也只有一个AnimSets。但事实上如果您的AnimTree中放入了不止一个AnimSet,那么在Pawn类中必须写上与之相对应的AnimSets。因此本例中正确的Pawn类写法应该是:

===========================省略代码=========================

//创建人体躯干骨架网格物体组件 Begin Object Name=BodySkeletalMeshComponent SkeletalMesh=SkeletalMesh'BSA_People.BodySkeletalMesh.00002_StartClothes_KunN' AnimTreeTemplate=AnimTree'BSA_People.BodyAnimTree.BladeMaster_Kun_AnimTree' PhysicsAsset=PhysicsAsset'BSA_People.BodyPhAsset.00002_StartClothes_KunN_Physics' AnimSets(0)=AnimSet'BSA_People.BodyAnimSet.Move_BladeMaster_Kun_AnimSet' AnimSets(1)=AnimSet'BSA_People.BodyAnimSet.MoveState_Kun_AnimSet' AnimSets(2)=AnimSet'BSA_People.BodyAnimSet.MoveSpecial_Kun_AnimSet' AnimSets(3)=AnimSet'BSA_People.BodyAnimSet.Idle_Social_Kun_AnimSet' AnimSets(4)=AnimSet'BSA_People.BodyAnimSet.SkillStandard_Kun_AnimSet' Translation=(Z=-49) Rotation=(Yaw=0,Pitch=0,Roll=0) Scale=2

===========================省略代码=========================

如您所见,五个AnimSet必须全部写入代码,这样再运行游戏的话应该就会一切正常。

不过,角色动画丢失的问题可能有很多原因引起,这里我只是给出其中一种问题的解决方式,希望对您有用。