Menu
CoddyTech

Gerar objetos com um temporizador

Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 63 de 85.

Um gerador que cria algo a cada poucos segundos precisa de um temporizador. Time.deltaTime é o tempo que o último quadro levou, então somá-lo em um campo a cada Update() dá o total de segundos que se passaram. Quando o total atingir o intervalo, gere o objeto e subtraia o intervalo do total.

Esta fonte lança uma gota de água a cada meio segundo:

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 preserva o restante: se o quadro terminar em 0.51 segundos, a próxima metade do segundo começa a ser contada a partir de 0.01, e as gotas mantêm o ritmo. timer = 0 descartaria esse restante, então cada gota chegaria um pouco atrasada e o atraso se acumularia ao longo de uma partida longa. timer é privado porque ninguém precisa defini-lo no Inspector.

challenge icon

Desafio

Médio

Solte uma caixa a cada interval segundos (2 no Inspector).

  1. Adicione os campos float timer; e int count;. Em Update(), adicione Time.deltaTime a timer.
  2. Quando timer >= interval, chame Instantiate(boxPrefab, transform.position, Quaternion.identity); e subtraia interval de timer.
  3. Então, adicione 1 a count e registre "Box " + count.

Pressione “Jogar”: uma caixa cai a cada 2 segundos, e o Console conta Box 1, Box 2. Em seguida, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

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

    void Update()
    {
        // A cada interval segundos: solte uma caixa e registre "Box 1", "Box 2"...
    }
}

Todas as lições de Fundamentos de Scripting no Unity

Pratique por conta própria: Playground de Unity