2017-06-05 68 views
0

我想團結一場保齡球比賽,我想在球員投球兩次之後改變球員,整場比賽繼續進行4回合。 所以我有兩個球,每個球都有一個帶有一個playerController的腳本,它圍繞球移動,碰撞後它們在原始位置重新生成。 所以輪流我做了一個gameController,使player1(球)輸入和禁用player2輸入,然後它使玩家2和禁用player1。 我怎樣才能讓玩家1玩兩次,然後切換到播放器2.統一如何計算輪換球員

的腳本是:

public IEnumerator gamePlay() 
{ 
    if (pl1.hasPlay == false) 
    {    
     pl1.gameObject.SendMessage("Activate"); 
     pl2.gameObject.SendMessage("Deactivate"); 
    } 

    if (pl1.hasPlay == true) 
    { 

     pl2.gameObject.SendMessage("Activate"); 
     pl1.gameObject.SendMessage("Deactivate"); 

    } 
    yield return 0; 
} 

回答

1

我推薦使用兩個整數:一個播放次數和另一個存儲存儲輪次數。

它應該是這樣的:

private int plays; 
private int rounds; 

private void Start() 
{ 
    plays = 0; 
    rounds = 0; 
    StartCoroutine(gamePlay()); 
} 

public void NextBall() 
{ 
    plays++; 
    // Here you can change the logic behind the 2 balls 
    // (I remember it changes depending on whether you did a strike or not, if it's your last play or not, ...) 
    if (plays >= 2) 
    { 
     plays = 0; 
     rounds++; 
     StartCoroutine(gamePlay()); 
    } 
} 

public IEnumerator gamePlay() 
{ 
    // This is based on player 1 being the first player 
    pl1.hasPlay = (rounds % 2 == 0); 
    pl2.hasPlay = !pl1.hasPlay; 

    pl1.gameObject.SendMessage(pl1.hasPlay ? "Activate" : "Deactivate"); 
    pl2.gameObject.SendMessage(pl2.hasPlay ? "Activate" : "Deactivate"); 

    yield return 0; 
} 

而且我不知道爲什麼你聲明gamePlay()的IEnumerator,而不是作爲一種方法,但我想你需要它這樣:)

我將if/else條件改爲ternary operator,因爲兩部分的內容都是相似的,我發現這樣更容易閱讀。

希望這有助於

+0

我覺得這是我所需要的邏輯,但哪裏下一個玩家方法被調用? –

+0

我想,當球重新產生時,你可以稱它。 – Kardux