При использовании одного скрипта в котором генерируется строка в нескольких объектах - строка у всех одинаковая

В скрипте в функции Start() выполняется генерация случайной строки.
До запуска значение itemId пустое

введите сюда описание изображения

Однако после запуска, когда происходит генерация, значения itemId заполняется в обоих объектах одинаковое. И вот что получается при запуске игры

Вот код генерации:

private string generateIID()
    {
        int length = 9;
        StringBuilder stringBuilder = new StringBuilder();
        System.Random random = new System.Random();
        char letter;
        int number;

        for(int i = 0; i < length; i++)
        {
            double flt = random.NextDouble();
            int isNumber = random.Next(3);
            int shift = Convert.ToInt32(Math.Floor(25 * flt));
            if(isNumber <= 1)
            {
                letter = Convert.ToChar(shift + 65);
                stringBuilder.Append(letter);
            } else
            {
                number = random.Next(10);
                stringBuilder.Append(number);
            }
            
        }

        return stringBuilder.ToString();
    }

Почему так может происходить? Я гуглил, но не смог найти ответа.


Ответы (1 шт):

Автор решения: vp_arth

Вероятно, у new Random тот же seed. Он зависит от Ticks, если я не ошибаюсь.

Попробуйте new Random(Guid.NewGuid().GetHashCode());

Но лучше использовать один инстанс Random для всех генераций. Заведите статическое поле:

public static Random rand = new Random();  

Хотя тут возможны проблемы с многопоточностью =)

→ Ссылка