我正在尝试使用其中的任务进行游戏。其中一个是拍摄彩色目标,以便随机生成正确的顺序。我一直在检测玩家是否按照正确的顺序击中目标。
比方说,我们有很多球的颜色在4个值之间随机化:Blue
,Red
,Grey
和Purple
。我们向玩家展示他需要击中他们的顺序,并且玩家尝试以所述顺序射击目标。
示例:如果球出现,Blue
,Red
,Grey
和Purple
球员必须按顺序击球。
我是编程和Unity的新手,所以我不知道该怎么做。
我正在使用我用来随机为精灵分配颜色的代码,让你知道颜色是如何工作的。
public Color[] Colors;
private void Start ()
{
int color = Random.Range(0, Colors.Length);
GetComponent<SpriteRenderer>().color = Colors[color];
}
答案 0 :(得分:0)
所以你需要确保玩家按照正确的顺序击中颜色?
首先,您的代码存在问题。 Colorize
是一个动词,它只能用于函数和方法名称,这就是为什么StackOverflow给它一个颜色,它认为它是一个函数。名称为Colors
。 (我知道,#34; s&#34;听起来很像英语中的#34; z&#34;但这是一个有趣的原因)。
首先,像这样创建一个enum
:
public class BallUtilities
{
enum BallColors { Red, Blue, Green, Yellow, Pink, Purple ... };
public static Color32 ToColor(this BallColor ballColor) =>
{
switch (ballColor)
{
case BallColor.Red: return new Color32 (255, 50, 50);
case BallColor.Blue: return new Color32 (50, 50, 255);
case BallColor.Green: ...
.
.
.
(etc.)
}
}
}
现在,我们需要跟踪所有创建的球,所以:
public class BallManager
{
public static List<BallColor> BallColorsSpawned = new List<BallColor>();
}
然后,将当前脚本更改为:
public void Start()
{
Color = (BallColor)Random.Range(0, Enum.GetNames(typeof(BallColor)).Length - 1)
GetComponent<SpriteRenderer>().Color = Color.ToColor();
Ballmanager.SpawnBallsColor.Add(Color);
}
现在我们按照玩家需要的顺序列出所有颜色。所以现在,无论球员在哪里击球,都要做这样的事情:
Ball ballHit = GetBallHit(); // Leaving it up to you to find out how to get whatever
// ball was just hit stored as a variable
if (BallManager.BallColorsSpawned[0].Color == ballHit.Color)
{
if (BallManager.BallColorsSpawned.Length == 1)
// That was the last ball remaining, so the player wins
else BallManager.BallColorsSpawned.RemoveAt(0); // Remove it as no longer important
}
else
{
// Player hit the wrong ball, so the player loses
}
如果您不知道enum
的内容或扩展方法或我使用的任何其他内容,请暂时停止使用Unity,并使用实践项目广泛学习C# Visual Studio,在线教程和Jon Skeet的C#In Depth。在我安装Unity之前,我花了几个月编写C#。