unity3d Unity动画在过渡时相互循环

jvlzgdj9  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(135)

我做了一个跑步者,通过按下鼠标角色跑,当我释放它时停止,只需按下鼠标跑步动画打开和关闭,但当按下鼠标角色跑,停止并继续运行。
在视频中,当光标在游戏屏幕上时,我点击鼠标,当我将光标移开时,我没有点击。
Video of problem
移动字符的代码:

using UnityEngine;

public class StickmanMover : MonoBehaviour
{
[SerializeField] private float _maxSpeed;
[SerializeField] private float _speed;

private Rigidbody _rigidbody;

private void Start()
{
    _rigidbody = GetComponent<Rigidbody>();
}

private void Update()
{
    if (Input.GetKey(KeyCode.Mouse0) && _rigidbody.velocity.magnitude < _maxSpeed)
    {
        _rigidbody.AddForce(Vector3.forward * _speed * Time.deltaTime);
    }
}
}

更改动画的代码:

using UnityEngine;

public class StickmanAnimator : MonoBehaviour
{
private Animator _animator;

private void Start()
{
    _animator = GetComponent<Animator>();
}

private void Update()
{
    if (Input.GetKey(KeyCode.Mouse0))
    {
        _animator.SetTrigger("Run");
    }
    else
    {
        _animator.SetTrigger("Idle");
    }
}
}

过渡设置:第一节第一节第一节第一节第一次

8zzbczxx

8zzbczxx1#

触发器可以叠加!

所以基本上会发生的是你堆积了很多触发器,每帧一个,然后它们都被同样多的转换消耗掉了。
对于您的用例,您更希望使用单个Boolean参数(比如Running)并相应地配置转换

Idle --Running == true--> Run
Run --Running == false--> Idle

然后

private void Update()
{
    _animator.SetBool("Running", Input.GetKey(KeyCode.Mouse0));
}

另一种方法(在您的情况下不需要,但只是为了完成)是在进入新状态时主动重置触发器。
我在this post的底部进一步描述了这一点。

相关问题