2017-06-02 5 views
0

UIキャンバスボタンを使用して、オブジェクトをポインタで左右に動かしようとしています。しかし、右に移動するスイッチケースだけが実行され、オブジェクトは左に移動しません(ただし、ステートメントは印刷されます)。ユニティゲームのタッチボタン - オブジェクトは左にではなく右に移動する

このコードは左のボタンに関連付けられています。ポインタ上でMoveLeft()が呼び出され、ポインタ上でNoLeft()が呼び出されます(イベントトリガを使用してインスペクタを介して)。 boolean 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が左と右の2つのボタンで構成されているのかどうか疑問に思っている場合です。彼らは両方ともお互いに鏡映する独自のスクリプトLeftButton(上記)とRightButtonを持っています。

ご協力いただきありがとうございます。

答えて

1

これを過度に複製しています。これは間違っています。単純に、正または負の浮動小数点値をとる方法があります。あなたの状況では、isLeftとisRightは常にtrueまたはfalseです。したがって、FixedUpdateが実行されると、両方のスイッチが実行され、一致する状態が出力されます。

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

移動は、両方のボタンに割り当ててから、インスペクタに極性(1または-1)を与える方法です。

+0

Worked great。不必要なコードを取り除いた、多くのありがとう! –

関連する問題