Unity游戏触摸按钮 - 对象仅向右移动,而不是向左移动

时间:2017-06-02 16:39:52

标签: unity3d input touch transform

使用UI画布按钮,我试图用指针向下左右移动我的对象,并且在向上指针时,移动应该停止。但是只有向右移动的开关盒执行,而我的对象不向左移动(它会打印语句)

此代码附在左侧按钮上。在指针向下调用MoveLeft()时,在指针向上,调用NoLeft()(通过检查器使用事件触发器)。布尔值isLeft控制左移动是否发生。

public class LeftButton : MonoBehaviour {

public GameObject playerC;

public void MoveLeft(){
    Debug.Log ("Moving left");
    playerC.GetComponent<PlayerController>().isLeft = true;

}

public void NoLeft(){
    Debug.Log ("Not moving left");
    playerC.GetComponent<PlayerController> ().isLeft = false;
}
}

以下代码附在播放器上,这就是问题所在,我怀疑,我只能向右移动。然而,isLeft的日志语句将打印出来。

public class PlayerController : MonoBehaviour {

private Rigidbody playerRigidBody;
[SerializeField]
public float movementSpeed;

public bool isLeft;
public bool isRight;


void Start () {

    playerRigidBody = GetComponent<Rigidbody> ();
}

void FixedUpdate () {

    switch (isLeft) {
    case true:

        print ("Move left is true");
        playerRigidBody.MovePosition(transform.position + transform.forward * 0.5f);
        break;

    case false:

        print ("No longer left");
        playerRigidBody.MovePosition (transform.position + transform.forward * 0f);
        break;

    }

    switch (isRight) {
    case true:

        print ("Move right is true");
        playerRigidBody.MovePosition (transform.position - transform.forward * 0.5f);
        break;

    case false:

        print ("No longer right");
        playerRigidBody.MovePosition (transform.position - transform.forward * 0);
        break;

    }

}

即使我从未触摸过右键并将其释放,也会打印出“不再正确”的声明。

如果您想知道UI由两个按钮组成,左和右。它们都有自己的脚本LeftButton(上面)和RightButton,它们只是相互镜像。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你过度复杂了,这就是出错的地方。只需要一个采用浮动值为正或负的方法。在你的情况下,isLeft和isRight总是真或假。因此,FixedUpdate运行,它将运行两个开关并打印匹配状态。

public class PlayerController : MonoBehaviour 
{
    public void Move(float polarity) {
        playerRigidBody.MovePosition(transform.position + transform.forward * polarity);
    }
}

移动是指定给两个按钮的方法,然后将极性(1或-1)提供给检查员。