使用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,它们只是相互镜像。
提前感谢您的帮助。
答案 0 :(得分:1)
你过度复杂了,这就是出错的地方。只需要一个采用浮动值为正或负的方法。在你的情况下,isLeft和isRight总是真或假。因此,FixedUpdate运行,它将运行两个开关并打印匹配状态。
public class PlayerController : MonoBehaviour
{
public void Move(float polarity) {
playerRigidBody.MovePosition(transform.position + transform.forward * polarity);
}
}
移动是指定给两个按钮的方法,然后将极性(1或-1)提供给检查员。