簡體   English   中英

如何更改游戲中實例化游戲對象的屬性?

[英]How can I change the properties of an instantiated gameObject in game?

在我的游戲中,我有一個gameObject器,它多次實例化一個游戲對象(游戲就像一個跑步者)。 現在這個游戲對象有一個腳本,它有void Start()並且在 void start 中它有一個gameObject使游戲對象采用隨機顏色。 每次我運行游戲時,第一個預制件采用一種顏色(例如綠色),然后第二個預制件采用另一種顏色(例如紅色) - 但第一個 object 采用第二個顏色,就像它有 void start multiple次。 如何解決?

你可以有一個簡單的static計數器,例如

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++;
}

或者,如果您希望它像您說的那樣隨機,例如

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM