Menu
CoddyTech

Спавн по таймеру

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

Спавнеру, который создаёт что-либо каждые несколько секунд, нужен таймер. Time.deltaTime — это время, затраченное на последний кадр, поэтому его суммирование в поле при каждом вызове Update() даёт количество прошедших секунд. Когда сумма достигает интервала, создайте объект и вычтите интервал из суммы.

Этот фонтан выбрасывает каплю воды каждые полсекунды:

public GameObject dropPrefab;
public float interval = 0.5f;
float timer;

void Update()
{
    timer += Time.deltaTime;
    if (timer >= interval)
    {
        Instantiate(dropPrefab, transform.position, Quaternion.identity);
        timer -= interval;
    }
}

timer -= interval сохраняет остаток: если кадр завершился на отметке 0.51 секунды, отсчёт следующих полсекунды начнётся с 0.01, и капли будут появляться в такт. timer = 0 отбросило бы этот остаток, поэтому каждая капля появлялась бы немного позже, и задержка накапливалась бы в течение долгой игры. timer является закрытым, потому что никому не нужно задавать его значение в Inspector.

challenge icon

Задание

Средне

Создавай ящик каждые interval секунд (2 в Inspector).

  1. Добавь поля float timer; и int count;. В Update() прибавляй Time.deltaTime к timer.
  2. Когда timer >= interval, вызови Instantiate(boxPrefab, transform.position, Quaternion.identity); и вычти interval из timer.
  3. Затем прибавь 1 к count и выведи в журнал "Box " + count.

Нажми «Играть»: ящик падает каждые 2 секунды, а в Console отображаются счётчики Box 1, Box 2. Затем нажми «Проверить».

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

using UnityEngine;

public class BoxDropper : MonoBehaviour
{
    public GameObject boxPrefab;
    public float interval = 1f;

    void Update()
    {
        // Каждые interval секунд: создать коробку и записать в журнал "Box 1", "Box 2"...
    }
}

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

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