Как я могу изменить свойства созданного экземпляра gameObject в игре? - PullRequest
0 голосов
/ 29 мая 2020

В моей игре у меня есть спаунер, который несколько раз создает экземпляр gameObject (игра похожа на раннер). Теперь у этого gameObject есть скрипт, который имеет void Start(), а при пустом запуске он имеет функцию, которая заставляет игровой объект принимать случайный цвет. Каждый раз, когда я запускаю игру, первый префаб принимает цвет (например, зеленый), а затем второй - другой цвет (например, красный), но этот первый объект принимает цвет второго, как будто у него есть пустое начало множественного раз. Как это исправить?

1 Ответ

0 голосов
/ 29 мая 2020

У вас может быть простой счетчик 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...