2016-04-08 74 views
-1

//下面是我到目前爲止的代碼。無論我使用哪種控制,我的兩個球都在同時移動。有人能幫我伸出援助之手嗎?我如何阻止我的兩名球員同時移動?

public class PlayerController : MonoBehaviour 

{

public float speed = 80.0f; // Code for how fast the ball can move. Also it will be public so we can change it inside of Unity itself. 
public GameObject player1; //Player 1 Rigidbody 
public GameObject player2; //Player 2 Rigidbody 
private Rigidbody rb; 
private Rigidbody rb2; 

void Start() 
{ 
    rb = GetComponent<Rigidbody>(); 
    rb2 = GetComponent<Rigidbody>(); 
    player1 = GameObject.Find("Player"); 
    player2 = GameObject.Find("Player 2"); 
} 

//Player 1 Code with aswd keys 
void Player1Movement() 
{ 
    if (player1 = GameObject.Find("Player")) 
    { 

     if (Input.GetKey (KeyCode.A)) { 
      rb.AddForce (Vector3.left * speed); 

     } 

     if (Input.GetKey (KeyCode.D)) { 
      rb.AddForce (Vector3.right * speed); 

     } 

     if (Input.GetKey (KeyCode.W)) { 
      rb.AddForce (Vector3.forward * speed); 

     } 

     if (Input.GetKey (KeyCode.S)) { 
      rb.AddForce (Vector3.back * speed); 

     } 
    } 
} 

//Player 2 Code with arrow keys 
void Player2Movement() 
{ 
    if(player2 = GameObject.Find("Player 2")) 
{ 
    if (Input.GetKey(KeyCode.LeftArrow)) 
    { 
     rb2.AddForce(Vector3.left * speed); 

    } 

    if (Input.GetKey(KeyCode.RightArrow)) 
    { 
     rb2.AddForce(Vector3.right * speed); 

    } 

    if (Input.GetKey(KeyCode.UpArrow)) 
    { 
     rb2.AddForce(Vector3.forward * speed); 

    } 

    if (Input.GetKey(KeyCode.DownArrow)) 
    { 
     rb2.AddForce(Vector3.back * speed); 

    } 
} 

}

// Update is called once per frame 
void Update() 
{ 
    Player1Movement(); 
    Player2Movement(); 
} 

}

我如何改變它,我的兩個球員都沒有在同一時間運動?

+0

有人可以幫我嗎? –

回答

1

您以某種方式爲兩個字符使用相同的剛體。 rb1和2是相同的剛體。你應該使用GameObject.Find或類似的東西來讓rb2成爲第二個玩家。

編輯:你可以使用player2.GetComponent()來抓取第二個玩家的剛體。假設這個腳本附加到第一個球員

0

對於Player1和Player2,您都使用相同的轉換代碼。你正以同樣的速度取代兩者。
速度上的差異可以說你想在左邊箭頭上以雙倍速度更新播放器2使用rb2.AddForce(Vector3.left *2* speed);
現在,如果你希望播放器只在一些內部移動,那麼在Update()的範圍內可以包含你的播放器在鼠標下移動或其他事件。
您可以使用RaycastHit來檢查哪個GameObject被點擊並僅更新那個。

相關問題