Unity2D射击目标,以便随机颜色匹配 - C#



我正在尝试做一个包含任务的游戏。其中之一是按照随机生成的正确顺序射击彩色目标。我一直在检测玩家是否以正确的顺序击中目标。

比方说,我们有很多球的颜色在 4 个值之间随机化:BlueRedGreyPurple。我们向玩家显示他需要击中它们的顺序,玩家尝试按所述顺序射击目标。

示例:如果球出来,BlueRedGreyPurple,玩家必须按该顺序射出球。

我对编程和 Unity 很陌生,所以我不知道该怎么做。

我给出了我用来随机分配颜色给精灵的代码,让你了解颜色是如何工作的。

public Color[] Colors;
private void Start () 
{
int color = Random.Range(0, Colors.Length);
GetComponent<SpriteRenderer>().color = Colors[color];
}

所以你需要确保玩家以正确的顺序点击颜色吗?

首先,你的代码有问题。Colorize是一个动词,应该只用于函数和方法名称,这就是为什么 StackOverflow 给它一个颜色,它认为它是一个函数。名字听起来很Colors.(我知道,"s"在英语中听起来像"z"很奇怪,但有一个有趣的原因)。

因此,首先,创建一个如下所示的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,并使用Visual Studio上的实践项目,在线教程和Jon Skeet的C# In Depth广泛学习C#。在安装 Unity 之前,我花了几个月的时间编写 C#。

最新更新