2017-06-05 72 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