团结如何计数转向改变玩家



我想打一个统一的保龄球比赛,我想在球员两次投球后改变球员,整个比赛继续进行4圈。因此,我有两个球,每个球都有一个带有playercontroller的脚本,该剧本在球周围移动,在碰撞后,它们在原始位置重生。因此,对于回合,我制作了一个gamecontroller,该游戏启用player1(球(输入并禁用player2输入,然后启用player2并禁用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;
}

我建议使用两个整数:一个用于存储戏剧数量,另一个用于存储回合的数量。

看起来像这样:

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条件,因为两部分的内容都是相似的,我发现这样阅读更容易。

希望这会有所帮助,

最新更新