Samouczek Unity Cinemachine i osi czasu
Cinemachine to pakiet dla Unity, który zapewnia programistom profesjonalną kontrolę nad kamerą i zwiększa możliwości tworzenia kinowych przerywników filmowych.
W tym samouczku omówione zostaną następujące tematy:
- Instalacja kinomaszyna
- Konfiguracja kamery trzeciej osoby
- Tworzenie przerywników filmowych na osi czasu
Instalacja kinomaszyna
Aby zainstalować Cinemachine, wykonaj poniższe czynności:
- W Unity przejdź do Okno -> Menedżer pakietów
- Zmień pakiety na „Unity Rejestr”
- Wybierz "Cinemachine" z listy i kliknij "Install"
Cinemachine jest teraz gotowa do użycia.
Konfiguracja kamery trzeciej osoby
Poniżej pokażę, jak skonfigurować kamerę trzecioosobową za pomocą kamery wirtualnej Cinemachine.
Kamera wirtualna to uproszczona wersja kamery Unity, która nie renderuje samodzielnie, lecz służy jedynie jako punkt odniesienia dla kamery głównej.
Jako przykład w tym samouczku użyję kontrolera trzeciej osoby, z wyjątkiem tego, że nie będzie konfigurowania kolizji kamery ani przesuwania kamery w hierarchii graczy:
Jak widać, gracz się porusza, ale kamera za nim nie podąża.
Konfigurowanie kamery trzeciej osoby za pomocą Cinemachine jest naprawdę łatwe:
- Przejdź do GameObject -> Cinemachine -> Kamera wirtualna, aby utworzyć nową wirtualną kamerę
- Nadaj nazwę wirtualnej kamerze "TPS Camera"
- Wybierz kamerę TPS i w CinemachineVirtualCamera przypisz zmienną Follow (w moim przypadku będzie to obiekt "CameraParent", który znajduje się w hierarchii graczy i reprezentuje rotację wyglądu w pionie)
- Ustaw wartość Treść na "3rd Person Follow"
- Ustaw Ignore Tag na "Player", a także wybierz główny obiekt gracza i ustaw jego tag na "Player" (jeśli w hierarchii odtwarzacza znajdują się jakieś zderzacze podrzędne, pamiętaj o zmianie ich tagów również na "Player")
- Dostosuj inne wartości w CinemachineVirtualCamera, takie jak odległość kamery, bok kamery, przesunięcie ramion i tłumienie, aż będziesz zadowolony z wyniku.
- Ustaw wartość Celowania CameraParent na "Do nothing"
Kamera powinna teraz podążać za graczem:
Tworzenie przerywników filmowych na osi czasu
Tutaj pokażę, jak skomponować przerywnik filmowy przy użyciu osi czasu Unity's.
Oś czasu to wbudowany edytor, który umożliwia programistom komponowanie przerywników filmowych poprzez animację kamery, a także wykorzystanie istniejących animacji (np. spaceru postaci) oraz zdarzeń i sygnałów poprzez ułożenie ich w sposób sekwencyjny.
Pakiet Cinemachine dodaje kilka dodatkowych opcji do edytora osi czasu, takich jak możliwość przełączania pomiędzy kamerami wirtualnymi.
Aby utworzyć przerywnik filmowy, wykonaj poniższe czynności:
- Utwórz nowy obiekt GameObject i wywołaj go "TimelineManager"
- Otwórz okno Oś czasu, przechodząc do Okno -> Sekwencjonowanie -> Oś czasu
- Wybierz obiekt "TimelineManager" i w oknie Oś czasu powinna pojawić się opcja utworzenia komponentu Director i zasobu Osi czasu, kliknij ją.
- Po utworzeniu komponentu Director i zasobu Timeline powinno pojawić się puste okno Timeline (upewnij się, że obiekt TimelineManager jest zaznaczony, aby móc go edytować).
- Możemy teraz rozpocząć dodawanie komponentów do osi czasu, klikając okno prawym przyciskiem myszy.
Jak widać, okno Oś czasu ma różne opcje:
- Grupa śledzenia — jest to grupa, która może zawierać działania na osi czasu i jest przydatna do organizowania.
- Ścieżka Aktywacji - definiuje obiekt, który powinien być aktywny tylko w określonym przedziale czasowym.
- Ścieżka animacji — odtwarza określoną animację w ustalonych ramach czasowych.
- Ścieżka audio — odtwarza określony dźwięk w ustalonych ramach czasowych.
- Control Track - ścieżka, której klipy kontrolują elementy związane z czasem w GameObject.
- Signal Track - umożliwia wykonanie szerokiej gamy akcji na konkretnym obiekcie gry w określonym czasie (np. aktywacja skryptu ruchu gracza lub wywołanie określonej funkcji, gdy oś czasu osiągnie określoną klatkę itp.)
- Odtwarzany utwór — utwór, którego klipy można odtwarzać samodzielnie.
- Ścieżka Cinemachine — pozwala na połączenie wielu wirtualnych kamer Cinemachine.
Na potrzeby tego samouczka będę używać tylko ścieżki animacji i ścieżki sygnału.
Organizować coś
- Utwórz kolejną wirtualną kamerę i nadaj jej nazwę "CutsceneCamera" i ustaw jej wartość "Priority" na jeden poziom powyżej "TPS Camera" (np. 11)
- Kliknij prawym przyciskiem myszy w widoku projektu -> Utwórz -> Sygnał i nazwij go "DisablePlayer"
- Zduplikuj sygnał "DisablePlayer" i zmień jego nazwę na "EnablePlayer"
- Utwórz nowy obiekt GameObject na scenie i nadaj mu nazwę "SignalReceiver"
- Dołącz komponent SignalReceiver do obiektu "SignalReceiver"
- Kliknij "Add Reaction" 2 razy
- Przypisz "DisablePlayer" do pierwszej reakcji i "EnablePlayer" do drugiej reakcji
"DisablePlayer" aktywuje kamerę przerywnikową, dezaktywuje kamerę gracza i skrypt sterujący graczem i zostanie umieszczony na początku osi czasu.
"EnablePlayer" wyłączy kamerę przerywnikową, aktywuje kamerę gracza i skrypt sterujący graczem i zostanie umieszczony na końcu osi czasu.
- Kliknij (+), aby dodać miejsce na reakcję, a następnie przypisz obiekt, którego skrypt lub komponent wymagał aktywacji/dezaktywacji.
Wskazówka: Aby utworzyć sygnał przeciwny, możesz po prostu ustawić reakcje dla "DisablePlayer", a następnie kliknąć ikonę koła zębatego -> Duplikuj, zmienić sygnał na "EnablePlayer" i odwrócić pola wyboru.
- Wybierz obiekt "TimelineManager", a następnie w oknie Oś czasu dodaj nową ścieżkę sygnału, klikając prawym przyciskiem myszy -> Ścieżka sygnału, a następnie przypisz do niego obiekt "SignalReceiver".
- Przeciągnij i upuść "DisablePlayer" zasób sygnału na początku osi czasu oraz "EnablePlayer" do klatki, w której chcesz zakończyć przerywnik filmowy:
Spowoduje to, że skrypt kontrolera gracza i kamera zostaną dezaktywowane na początku, a następnie ponownie aktywowane, gdy oś czasu dotrze do końca.
Na koniec stworzymy prostą animację kamery.
- Kliknij prawym przyciskiem myszy Oś czasu -> Ścieżka animacji, a następnie przypisz "CutsceneCamera" (spowoduje to monit o dodanie komponentu Animator do obiektu, jeśli go nie ma)
- Kliknij przycisk nagrywania
- Przesuń nieznacznie "CutsceneCamera", aby zastosować klatkę kluczową, następnie przesuń uchwyt klatki osi czasu do końca, a na koniec przesuń kamerę do nowej pozycji, a następnie kliknij przycisk Zatrzymaj nagrywanie.
Naciśnijmy przycisk odtwarzania i zobaczmy wynik:
Na początku gry odtwarzana jest scenka przerywnikowa.