我想打一个统一的保龄球比赛,我想在球员两次投球后改变球员,整个比赛继续进行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
条件,因为两部分的内容都是相似的,我发现这样阅读更容易。
希望这会有所帮助,