Unity键输入控制语句不正确

时间:2016-02-05 19:31:58

标签: unity3d

这是我用于在Unity3D 5.1.2f1 Personal中制作的Endless Runner游戏的移动脚本。向右移动完全有效。向左移动不起作用,但debug.log确实有效。在检查器中,我可以看到当向右移动时'leftrightSpeed'设置为2,但当向左移动时浮子没有任何反应。我在这里做错了什么?

(检查员中的浮动速度设置为5)。

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

    public float speed;
    public float leftrightSpeed;
    private Rigidbody rb;

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

    void FixedUpdate()
    {
        //LEFT
        if (Input.GetKey("left"))
        {
            leftrightSpeed = -2f;
            Debug.Log ("LEFT");
        }
        else
        {
            leftrightSpeed = 0f;
        }

         //RIGHT
        if (Input.GetKey("right"))
        {
            leftrightSpeed = 2f;
            Debug.Log ("RIGHT");
        }
        else
        {
            leftrightSpeed = 0f;
        }

    Vector3 movement = new Vector3 (-2f, 0.0f, leftrightSpeed);

    rb.AddForce (movement * speed);
    }
}

2 个答案:

答案 0 :(得分:1)

Jerry是正确的,如果你的左移动取消了你的第二个判断。您可以通过简单地使用FixedUpdate来改善GetAxis方法:

void FixedUpdate()
{
    leftrightSpeed = Input.GetAxis("Horizontal") * 2;
    Vector3 movement = new Vector3 (-2f, 0.0f, leftrightSpeed);
    rb.AddForce (movement * speed);
}

基本上,GetAxis将给出介于-1和1之间的数字,具体取决于与“水平”轴相关的按键。这将适用于游戏控制器,箭头键,甚至默认情况下w / a / s / d移动。

查看GetAxis的文档。

答案 1 :(得分:0)

当您按下其他任何内容然后按右键时,您在其他第二个条件中将leftrightSpeed设置为0。这就是为什么它适用于正确的原因。就是这样。

要做得对,请将其更改为

if (Input.GetKey("right"))
    {
        leftrightSpeed = 2f;
        Debug.Log ("RIGHT");
    }
    else if (Input.GetKey("left"))
    {
        leftrightSpeed = -2f;
        Debug.Log ("LEFT");
    }       
    else
    {
        leftrightSpeed = 0f;
    }