unity 如何计算轮换玩家

unity how to count turns to change players

我想统一做一个保龄球游戏,我想在投球两次后改变球员,整个比赛持续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 条件改成了 ternary operator 因为两部分的内容相似,我觉得这样更容易阅读。

希望对您有所帮助,