Como criar um semáforo no Unity

Este tutorial guiará você pelo processo de criação de um sistema de semáforo simples em Unity usando C#. Você aprenderá como configurar os semáforos, adicionar lógica para controlá-los e simular um sistema de semáforo funcional.

Pré-requisitos

  • Conhecimento básico da interface Unity
  • Compreensão básica da programação C#
  • Unity instalado no seu computador (qualquer versão recente)

Etapa 1: Configurando a cena

Primeiro, precisamos configurar a cena em Unity com três luzes (vermelha, amarela e verde) para simular um sistema de semáforo.

  1. Abra Unity e crie um novo projeto.
  2. Na janela Hierarchy, crie três objetos 3D representando os semáforos. Você pode usar Spheres para cada semáforo. Renomeie-os para RedLight, YellowLight e GreenLight.
  3. Coloque-os um em cima do outro na visualização Scene para simular um semáforo vertical. Ajuste a posição e a escala deles conforme necessário.
  4. To make them look like real traffic lights, assign different colors to each sphere:
    • Selecione RedLight e altere a cor do material para vermelho.
    • Selecione YellowLight e altere a cor do material para amarelo.
    • Selecione GreenLight e altere a cor do material para verde.

Etapa 2: Criando o script do semáforo

Agora, escreveremos um script para controlar o comportamento do semáforo. Este script alternará entre as luzes vermelha, amarela e verde em intervalos regulares.

  1. Na pasta Assets, clique com o botão direito e selecione Create > C# Script. Nomeie-o como TrafficLightController.
  2. Abra o script no seu editor de código preferido e escreva o seguinte código:
using System.Collections;
using UnityEngine;

public class TrafficLightController : MonoBehaviour
{
    public GameObject redLight;
    public GameObject yellowLight;
    public GameObject greenLight;
    
    public float redLightDuration = 5f;
    public float yellowLightDuration = 2f;
    public float greenLightDuration = 5f;
    
    private void Start()
    {
        StartCoroutine(TrafficLightCycle());
    }
    
    IEnumerator TrafficLightCycle()
    {
        while (true)
        {
            // Red light on
            redLight.SetActive(true);
            yellowLight.SetActive(false);
            greenLight.SetActive(false);
            yield return new WaitForSeconds(redLightDuration);
            
            // Green light on
            redLight.SetActive(false);
            yellowLight.SetActive(false);
            greenLight.SetActive(true);
            yield return new WaitForSeconds(greenLightDuration);
            
            // Yellow light on
            redLight.SetActive(false);
            yellowLight.SetActive(true);
            greenLight.SetActive(false);
            yield return new WaitForSeconds(yellowLightDuration);
        }
    }
}

Este script define um ciclo simples em que as luzes vermelha, verde e amarela acendem e apagam em sequência.

Etapa 3: Atribuindo as luzes ao script

Agora que o script está pronto, precisamos vincular os objetos de luz ao script para que ele saiba quais luzes controlar.

  1. Selecione Main Camera ou crie um GameObject vazio na cena para guardar o script. Nomeie-o como TrafficLightController.
  2. No Inspector, clique em Adicionar Componente e anexe o script TrafficLightController.
  3. Assign the traffic light spheres to the script:
    • Arraste o objeto RedLight para o campo redLight no script.
    • Arraste o objeto YellowLight para o campo yellowLight.
    • Arraste o objeto GreenLight para o campo greenLight.

Etapa 4: Testando o sistema de semáforo

Agora, é hora de testar o sistema de semáforo e ver se tudo funciona como esperado.

  1. Pressione o botão Play na parte superior do editor Unity.
  2. Observe o sistema de semáforos em ação. As luzes vermelha, verde e amarela devem ciclar com base nos intervalos de tempo que você definiu no script.

Se tudo estiver funcionando, você deverá ver a luz vermelha acendendo por 5 segundos, seguida pela luz verde por 5 segundos e depois a luz amarela por 2 segundos, repetindo em um loop.

Etapa 5: Personalizando o semáforo

Você pode personalizar facilmente o sistema de semáforo alterando os intervalos de tempo para cada luz. Na janela Inspector, modifique os campos redLightDuration, yellowLightDuration e greenLightDuration para alterar o tempo que cada luz permanece acesa.

Por exemplo, você pode fazer com que a luz vermelha permaneça acesa por mais tempo para simular um cruzamento movimentado ou ajustar a duração da luz amarela para uma transição mais rápida.

Conclusão

Você criou com sucesso um sistema de semáforo simples em Unity. Ao seguir este tutorial, você aprendeu como controlar GameObjects com C# e implementar um loop temporizado para simular um sistema do mundo real. A partir daqui, você pode expandir este projeto adicionando mais recursos como semáforos para pedestres, cronômetros de contagem regressiva ou regras de trânsito mais complexas.