Jak stworzyć sygnalizację świetlną w Unity
Ten samouczek przeprowadzi Cię przez proces tworzenia prostego systemu sygnalizacji świetlnej w Unity przy użyciu języka C#. Nauczysz się, jak skonfigurować sygnalizację świetlną, dodać logikę do jej sterowania i symulować działający system sygnalizacji świetlnej.
Wymagania wstępne
- Podstawowa znajomość interfejsu Unity
- Podstawowa znajomość programowania w języku C#
- Unity zainstalowana na twoim komputerze (dowolna nowsza wersja)
Krok 1: Ustawienie sceny
Najpierw musimy skonfigurować scenę w Unity z trzema światłami (czerwonym, żółtym i zielonym), aby symulować system sygnalizacji świetlnej.
- Otwórz Unity i utwórz nowy projekt.
- W oknie Hierarchy utwórz trzy obiekty 3D reprezentujące sygnalizację świetlną. Możesz użyć Spheres dla każdej sygnalizacji świetlnej. Zmień ich nazwy na RedLight, YellowLight i GreenLight.
- Umieść je jeden na drugim w widoku Scene, aby symulować pionową sygnalizację świetlną. Dostosuj ich położenie i skalę w razie potrzeby.
- To make them look like real traffic lights, assign different colors to each sphere:
- Wybierz RedLight i zmień kolor jego materiału na czerwony.
- Wybierz YellowLight i zmień kolor jego materiału na żółty.
- Wybierz GreenLight i zmień kolor jego materiału na zielony.
Krok 2: Tworzenie skryptu sygnalizacji świetlnej
Teraz napiszemy skrypt, aby kontrolować zachowanie sygnalizacji świetlnej. Ten skrypt będzie cyklicznie przełączał czerwone, żółte i zielone światła w regularnych odstępach czasu.
- W folderze Assets kliknij prawym przyciskiem myszy i wybierz opcję Utwórz > Skrypt C#. Nadaj mu nazwę TrafficLightController.
- Otwórz skrypt w preferowanym edytorze kodu i napisz następujący kod:
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);
}
}
}
Ten skrypt definiuje prosty cykl, w którym światła czerwone, zielone i żółte włączają się i wyłączają po kolei.
Krok 3: Przypisywanie świateł do skryptu
Teraz, gdy skrypt jest już gotowy, musimy połączyć obiekty świetlne ze skryptem, aby wiedział, którymi światłami sterować.
- Wybierz Main Camera lub utwórz pusty GameObject w scenie, aby pomieścić skrypt. Nazwij go TrafficLightController.
- W Inspector kliknij Dodaj komponent i dołącz skrypt TrafficLightController.
- Assign the traffic light spheres to the script:
- Przeciągnij obiekt RedLight do pola redLight w skrypcie.
- Przeciągnij obiekt YellowLight do pola yellowLight.
- Przeciągnij obiekt GreenLight do pola greenLight.
Krok 4: Testowanie systemu sygnalizacji świetlnej
Teraz nadszedł czas na przetestowanie systemu sygnalizacji świetlnej i sprawdzenie, czy wszystko działa zgodnie z oczekiwaniami.
- Naciśnij przycisk Odtwórz znajdujący się u góry edytora Unity.
- Obserwuj działanie systemu sygnalizacji świetlnej. Czerwone, zielone i żółte światła powinny zmieniać się cyklicznie w oparciu o przedziały czasowe zdefiniowane w skrypcie.
Jeśli wszystko działa prawidłowo, powinno zapalić się czerwone światło na 5 sekund, następnie zielone światło na 5 sekund, a potem żółte światło na 2 sekundy – wszystko to powtarza się w pętli.
Krok 5: Dostosowywanie sygnalizacji świetlnej
Możesz łatwo dostosować system sygnalizacji świetlnej, zmieniając interwały czasowe dla każdego światła. W oknie Inspector zmodyfikuj pola redLightDuration, yellowLightDuration i greenLightDuration, aby zmienić czas świecenia każdego światła.
Możesz na przykład sprawić, by czerwone światło paliło się dłużej, symulując ruchliwe skrzyżowanie, lub dostosować czas trwania żółtego światła, aby przyspieszyć zmianę pasa ruchu.
Wniosek
Udało Ci się stworzyć prosty system sygnalizacji świetlnej w Unity. Dzięki temu samouczkowi nauczyłeś się kontrolować GameObjects za pomocą C# i implementować pętlę czasową, aby symulować system w świecie rzeczywistym. Stąd możesz rozszerzyć ten projekt, dodając więcej funkcji, takich jak sygnalizacja świetlna dla pieszych, liczniki czasu lub bardziej złożone przepisy ruchu drogowego.