я получаю любое число, кроме 1

Это код, который я написал для порождения чего-то случайным образом между двумя позициями, но он всегда порождает это в «spawnpoint2» и IDK, что делать

{
public Transform spawnpoint1;
public Transform spawnpoint2;
public GameObject enemyprefab;

private void Start()
{
    InvokeRepeating("spawn", 3f, 5f);
}

void spawn()
{
    float randomizer= Random.Range(0f, 3f);
    if (randomizer == 1f)
        Instantiate(enemyprefab, spawnpoint1);
    else
        Instantiate(enemyprefab, spawnpoint2);
}

}

Всего 2 ответа


Это плавающая версия метода Random.Range . Иногда у вас будет 1.0f, но это довольно редко.

Вам лучше использовать версию int.

// Random.Range(0f, 3f); // float version
Random.Range(0, 3); // int version

Если вы попытаетесь получить число с плавающей запятой от 0 до 3 (включительно), на самом деле существует небольшая возможность получить ровно 1,0 между всеми возможными промежуточными значениями.
Вы должны использовать целочисленную версию из Random.Range, но в этой версии исключен верхний предел, поэтому вы должны использовать 4 в качестве верхнего предела, чтобы получить любое значение от 0 до 3.
Хотя это кажется второстепенным (вы выбираете только 1, поэтому вы получите 1, даже если верхний предел равен 2), используя верхний предел 3, вы изменяете частоты результатов 1 по сравнению с другими числами, поэтому ваша точка появления 1 будет более частой.

void spawn()
{
    int randomizer= Random.Range(0, 4);
    if (randomizer == 1)
        Instantiate(enemyprefab, spawnpoint1);
    else
        Instantiate(enemyprefab, spawnpoint2);
}

Есть идеи?

10000