引言
最近在尝试制作二次元ACT游戏,在处理角色急停动画时研究下如何使动画更加自然,流畅;能根据移动状态下角色脚步来判断急停时所使用的动画。
动画

首先,需要两个动画,一个是左脚急停,一个是右脚急停。


如何判断
其实原理很简单,我只要在我松开移动键的时候判断左右脚的相对位置即可决定急停的动画;要是移动最后一帧是左脚在前,那角色急停结束后就会是右脚在前。
当然,判断相对位置需要找到一个合适的相对坐标,在这里,我用模型的Hip位置来当作坐标原点。
当移动动画最后一帧右脚在前时,播放的急停动画则会是左脚向前。

当移动动画最后一帧左脚在前时,播放的急停动画则会是右脚在前

这样,角色的移动和停顿就会更加自然。
判断代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| private Vector3 GetRelativePosition(Transform hip, Transform foot) { Vector3 distance = foot.position - hip.position; Vector3 relativePosition = Vector3.zero; relativePosition.x = Vector3.Dot(distance, hip.right.normalized); relativePosition.y = Vector3.Dot(distance, hip.up.normalized); relativePosition.z = Vector3.Dot(distance, hip.forward.normalized); return relativePosition; }
public bool GetFootPosition() { Vector3 leftPos = GetRelativePosition(hip, leftFoot); Vector3 rightPos = GetRelativePosition(hip, rightFoot); if(leftPos.z > 0 && rightPos.z < 0) { return true; } return false; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| switch (moveState) { case MoveChildState.Move: player.PlayerAnimation("Move"); break; case MoveChildState.RunStop: if (player.GetFootPosition()) { pos = "L"; } else { pos = "R"; } player.PlayerAnimation("RunStop_"+pos); break; }
|
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~