统一如何计算轮流改变球员

时间:2017-06-05 14:59:31

标签: c# unity3d unity5 game-engine

我想团结一致打保龄球比赛,我想在他们两次投球之后改变球员,整场比赛继续进行4轮。 所以我有两个球,每个球都有一个脚本,一个玩家控制器在球周围移动,碰撞后他们在原来的位置重生。 所以对于转弯我做了一个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;
}

1 个答案:

答案 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,因为两个部分的内容相似,我觉得这样更容易阅读。

希望这有帮助,