我制作了一个跑步者,通过按下鼠标角色运行,当我释放它时停止,只需按下鼠标运行动画打开和关闭,但是当按下鼠标时角色运行,停止并继续运行。
在视频中,当光标在游戏屏幕上时,我点击鼠标,当我将光标移开时,我没有点击。
移动角色的代码:
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");
}
}
}
触发器可以叠加!
所以发生的事情基本上是你堆积了很多触发器,每帧一个,后来它们都被同样多的过渡消耗了。
对于您的用例,您宁愿使用单个
Boolean
参数 - 让我们说 Running
- 并相应地配置您的转换
Idle --Running == true--> Run
Run --Running == false--> Idle
然后做
private void Update()
{
_animator.SetBool("Running", Input.GetKey(KeyCode.Mouse0));
}