嘿,这是一个简单的脚本,里面有动画参数,但是我不知道为什么我的getkeydown不能执行!如果没有按下键,它只是想播放一个闲置的动画,但是那没有发生,而是只是没有通过代码的那部分。
public class PlayerMovement : MonoBehaviour {
private Rigidbody2D rigidbodyMurrilo;
public float speed;
public Animator anim;
public bool FacingRigth;
public Transform transform;
private void Start()
{
rigidbodyMurrilo = GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
FacingRigth = true;
}
void FixedUpdate()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
HandleMovement(horizontal);
Flip(horizontal);
}
void HandleMovement(float horizontal)
{
rigidbodyMurrilo.velocity = new Vector2(horizontal * speed, rigidbodyMurrilo.velocity.y);
}
private void Update()
{
if (Input.GetKeyDown("d") || Input.GetKeyDown("left") || Input.GetKeyDown("a") || Input.GetKeyDown("rigth"))
{
anim.Play("MoveRigth");
}
Debug.Log(Input.GetKey("d"));
if (Input.GetKeyUp("d") || Input.GetKeyUp("left") || Input.GetKeyUp("a") || Input.GetKeyUp("rigth"))
{
anim.Play("Idle");
}
}
private void Flip (float horizontal){
if(horizontal > 0 && !FacingRigth || horizontal<0 && FacingRigth)
{
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
FacingRigth = !FacingRigth;
}
}
答案 0 :(得分:4)
这样做的原因是因为Input.GetKeyUp()
方法无法按照您认为的方式工作:)。 Input.GetKeyUp()
的工作方式如下:
该方法在用户释放键的帧期间返回true 通过名称标识。
我建议您像这样修改if语句:
if (Input.GetKeyDown("d") || Input.GetKeyDown("left") || Input.GetKeyDown("a") || Input.GetKeyDown("rigth"))
{
anim.Play("MoveRigth");
}
else
{
anim.Play("Idle");
}
,或者第二次只使用!
在前面的同一条语句。我希望这会有所帮助:)