Unity2D射击目标是为了随机颜色的匹配 - C#

时间:2018-05-06 18:22:50

标签: c# unity3d arraylist game-physics

我正在尝试使用其中的任务进行游戏。其中一个是拍摄彩色目标,以便随机生成正确的顺序。我一直在检测玩家是否按照正确的顺序击中目标。

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

示例:如果球出现,BlueRedGreyPurple球员必须按顺序击球。

我是编程和Unity的新手,所以我不知道该怎么做。

我正在使用我用来随机为精灵分配颜色的代码,让你知道颜色是如何工作的。

public Color[] Colors;

private void Start () 
{
    int color = Random.Range(0, Colors.Length);

    GetComponent<SpriteRenderer>().color = Colors[color];
}

1 个答案:

答案 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#。