我的getkeydown未被识别

时间:2018-07-08 12:21:50

标签: c# unity3d

嘿,这是一个简单的脚本,里面有动画参数,但是我不知道为什么我的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;

    }

}

1 个答案:

答案 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");
    }

,或者第二次只使用!在前面的同一条语句。我希望这会有所帮助:)