Menu
CoddyTech

Случайный спавн

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 68 из 85.

Random.Range(min, max) выбирает случайное число, и то, что он может вернуть, зависит от типа переданных ему чисел. Для чисел с плавающей точкой может получиться любое значение от min до max включительно. Для целых чисел само значение max не включается. Поэтому для броска кубика задают диапазон от 1 до 7:

int roll = Random.Range(1, 7);   // 1, 2, 3, 4, 5 или 6
Debug.Log("You rolled " + roll);

Версия для целых чисел не включает max, поэтому Random.Range(0, names.Length) всегда возвращает допустимый индекс массива. Это также означает, что Random.Range(-5, 5) даёт только целые числа от -5 до 4, даже если сохранить результат в переменную типа float. Для любого значения в этом диапазоне используйте Random.Range(-5f, 5f).

Для точек и направлений в 3D в Unity есть два готовых случайных вектора. Random.insideUnitSphere — это случайная точка внутри шара радиусом 1 с центром в (0, 0, 0). Random.onUnitSphere — случайная точка на поверхности этого шара, то есть случайное направление длиной 1. transform.position + Random.insideUnitSphere * 2f задаёт точку на расстоянии до 2 единиц в любом направлении, в том числе вверх и вниз.

challenge icon

Задание

Средне

Каждый щелчок сбрасывает ящик со случайной точки над полом.

  1. Внутри блока if для щелчка выбери float x = Random.Range(-4f, 4f); и таким же образом задай float z.
  2. Вызови Instantiate(cratePrefab, new Vector3(x, 5, z), Quaternion.identity);.

Нажми «Играть» и щёлкни несколько раз: ящики будут падать в разных местах. Затем нажми «Проверить».

Попробуйте сами

using UnityEngine;

public class CrateDropper : MonoBehaviour
{
    public GameObject cratePrefab;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            // Сбросить ящик из случайной точки: x и z от -4 до 4, y = 5
        }
    }
}

Все уроки раздела Основы скриптинга в Unity

Потренируйтесь самостоятельно: Песочница Unity