在我的游戏中,我有一个产卵器,它实例化了一个 gameObject
多次(游戏中它就像一个跑步机)。现在这个 gameObject
有一个剧本,它有 void Start()
在void start中,它有一个函数,使gameobject采取一个随机的颜色。每次我运行游戏,第一个预制件采取一种颜色(如绿色),然后第二个采取另一种颜色(如红色) - 但这第一个对象采取第二个的颜色,就像它有无效启动多次。如何解决这个问题?
你可以有一个简单的 static
计数器,如e.g.
private static Color[] colors = new []{
Color.green,
Color.red,
Color.blue,
Color.yellow,
Color.black
};
private static int index = 0;
private void Start()
{
if(index => colors.Length)
{
Debug.LogError("Not enough colors!", this);
return;
}
GetComponent<Renderer>().material.color = colors[index];
index++;
}
或者如果你想让它像你说的那样是随机的,你可以这样做,如:e.g.
private static Color[] colors = new []{
Color.green,
Color.red,
Color.blue,
Color.yellow,
Color.black
};
private static int index = 0;
private void Start()
{
if(index => colors.Length)
{
Debug.LogError("Not enough colors!", this);
return;
}
if(index == 0)
{
// the first time shuffle up the array
var rnd = new Random();
colors = colors.OrderBy((c) => rnd.Next()).ToArray();
}
GetComponent<Renderer>().material.color = colors[index];
index++;
}
或者,如果你真的想让它完全随机,你可以简单地做(可能会有多个 "相同 "或非常相似的结果,但
private void Start()
{
GetComponent<Renderer>().material.color = GetCompletelyRandomColor();
}
private static Color GetCompletelyRandomColor()
{
var r = Random.Range(0f, 1f);
var g = Random.Range(0f, 1f);
var b = Random.Range(0f, 1f);
return new Color(r, g, b);
}