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 因为两部分的内容相似,我觉得这样更容易阅读。
希望对您有所帮助,
我想统一做一个保龄球游戏,我想在投球两次后改变球员,整个比赛持续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 因为两部分的内容相似,我觉得这样更容易阅读。
希望对您有所帮助,