我如何在游戏中改变实例化的 gameObject 的属性?

问题描述 投票:-3回答:1

在我的游戏中,我有一个产卵器,它实例化了一个 gameObject 多次(游戏中它就像一个跑步机)。现在这个 gameObject 有一个剧本,它有 void Start() 在void start中,它有一个函数,使gameobject采取一个随机的颜色。每次我运行游戏,第一个预制件采取一种颜色(如绿色),然后第二个采取另一种颜色(如红色) - 但这第一个对象采取第二个的颜色,就像它有无效启动多次。如何解决这个问题?

c# unity3d
1个回答
0
投票

你可以有一个简单的 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);
}
© www.soinside.com 2019 - 2024. All rights reserved.