Unity3D:返回到空闲状态动画
本文关键字:状态 动画 返回 Unity3D | 更新日期: 2023-09-27 17:57:18
我在游戏中返回到空闲状态动画时遇到问题。这个视频是我的问题的一个例子。我的播放器不会返回到空闲状态动画,我确实尝试将其添加到我的代码中:
anim.SetBool ("walking", false);
(这放在我的代码末尾附近)
但这会发生。这不是我想要的。在我向您展示的第一个视频中,它显示了我单击步行参数关闭,以便我可以向您展示如果我的播放器在到达目的地后停止,我的动画会是什么样子。在视频中,你可以看到我的球员在上下走后面对错误的方式,它面对这种方式和那种方式,我也想修复,但不知道如何解决。所以任何人都可以帮助我解决我的两个问题,那就是:
- 一旦我的玩家到达目的地,就会返回到空闲动画。
- 并确保我的玩家按照预期面向正确的方向。我的玩家的精灵图像
这是我的代码:
第二次编辑
private Animator anim;
public float speed = 15f;
private Vector3 target;
private bool touched;
private bool playerMovementRef;
void Start ()
{
target = transform.position;
anim = GetComponent<Animator> ();
}
void Update ()
{
if(transform.position == target)
{
anim.SetBool ("walking", false);
}
if (Input.GetMouseButtonDown (0))
{
Vector3 mousePosition = Input.mousePosition;
mousePosition.z = 10; // distance from the camera
target = Camera.main.ScreenToWorldPoint (mousePosition);
target.z = transform.position.z;
var movementDirection = (target - transform.position).normalized;
Vector3 animDirection = Vector3.zero;
// Use >= to default to horizontal on both being equal
if (movementDirection.x > movementDirection.y)
animDirection.x = 1;
else
animDirection.y = 1;
anim.SetBool ("walking", true);
anim.SetFloat ("SpeedX", movementDirection.x);
anim.SetFloat ("SpeedY", movementDirection.y);
Debug.LogFormat ("X: {0}, Y: {1}", movementDirection.x, movementDirection.y);
if (movementDirection.x > 0)
{
anim.SetFloat ("LastMoveX", 1f);
}
else if (movementDirection.x < 0)
{
anim.SetFloat ("LastMoveX", -1f);
}
else
{
if (movementDirection.y > 0)
{
anim.SetFloat ("LastMoveY", 1f);
}
else if (movementDirection.y < 0)
{
anim.SetFloat ("LastMoveY", -1f);
}
else
{
anim.SetFloat ("LastMoveY", 0f);
}
}
}
else
{
transform.position = Vector3.MoveTowards (transform.position, target, speed * Time.deltaTime);
}
}
检测玩家是否在当前目的地。您可以从target
获取当前目的地。如果它在当前目的地,则使"行走"布尔值为假。面对正确的方向应该可以正常工作。
将此块放入Update()
:
if(transform.position == target)
{
anim.SetBool ("walking", false);
}