我想团结一致打保龄球比赛,我想在他们两次投球之后改变球员,整场比赛继续进行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;
}
答案 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,因为两个部分的内容相似,我觉得这样更容易阅读。
希望这有帮助,