Umiejętne manipulowanie kamerą podczas tworzenia cutscenek to podstawa. W tym tutorialu postaram się Wam przybliżyć sposoby zarządzania kamerą. Na wstępie chciałbym zaznaczyć, że przy każdym opcodzie jest link do jego szczegółowego opisu w naszej
bazie opcodów. Tam znajdziecie szczegółowe opisy parametrów każdej z funkcji.
Podczas tworzenia cutscenek zazwyczaj jest potrzeba ustawienia kamery w konkretnym miejscu. Do tego wystarczy jeden opcode, który jako parametry przyjmuje współrzedne XYZ oraz rotację XYZ.
Kod:
015F: set_camera_position 664.9277 -479.6112 16.1668 rotation 0.0 0.0 0.0
Szczegółowy opis opcode'u 015F.
Oprócz ustawienia kamery w danych współrzędnych, można ją też "przyczepić" do pojazdu lub aktora:
Kod:
0679: put_camera_on_car
161@ with_offset 0.0 -2.0
$Z_CAMERA rotation 0.0 0.0
204@ tilt 0.0 mode 2
Szczegółowy opis opcode'u 0679.
Kod:
067C: put_camera_on_actor
$PLAYER_ACTOR with_offset 0.0 2.0 -2.0 rotation 0.0 0.0 0.0 tilt 0.0 mode 2
Szczegółowy opis opcode'u 067C.
Domyślnie, kamera skupia się na punkcie, który jest wyznaczony przez obrót kamery. Samodzielne obliczanie obrotu jest uciążliwe i mało dynamiczne. Z pomocą przychodzą funkcje, które umożliwiają ustawienie fokusa kamery na konkretny punkt, pojazd lub aktora.
Fokus na konkretny punkt:
Kod:
0160: set_camera_point_at 665.8948 -479.5685 16.4175 mode 2
Szczegółowy opis opcode'u 0160.
Fokus na pojazd:
Kod:
0158: camera_on_car
34@ 18 2
Szczegółowy opis opcode'u 0158.
Fokus na aktora:
Kod:
0159: camera_on_ped
215@ 15 2
Szczegółowy opis opcode'u 0159.
W celu płynnego przemieszczenia kamery z jednego punktu do drugiego można użyć poniższego opcode'u:
Kod:
0936: set_camera 2358.656 -1246.348 28.7884 position_to 2358.656 -1246.348 28.7884 time 7000 drop_mode 1
0160: set_camera_point_at 665.8948 -479.5685 16.4175 mode 1
Szczegółowy opis opcode'u 0936.
Należy zauważyć, że jeśli chcemy przenieść kamerę zachowując fokus na konkretny punkt, trzeba ponownie użyć opcode'u
0160 (set_camera_on_point) z trybem ustawionym na
1 (mode 1).
Nieraz chcemy przedstawić coś w większym powiększeniu, więc zamiast ręcznie ustawiać nowe współrzędne kamery, można skorzystać z opcode'u do przybliżania/oddalania obrazu:
Kod:
0922: set_camera_zoom_in_factor 70.0 out_factor 100.0 timelimit 10000 mode 1
Szczegółowy opis opcode'u 0922.
Po zakończeniu cutscenki należy ustawić kamerę z powrotem na domyślną (za graczem). Można ją przywrócić płynnym przejściem z naszej kamery do domyślnej:
Kod:
lub natychmiastowo, bez płynnego przejścia:
Kod:
02EB: restore_camera_with_jumpcut
Kiedy korzystamy z płynnych przejść, czasem chcemy wykonać kolejne operacje dopiero po zakończeniu ruchu kamery. Warto na końcu swojego skryptu dodać dwie procedury, które później można wykorzystać w dowolnej części kodu:
Kod:
:CameraPositionManipulated
wait 0
if
0933: camera_position_manipulated
jf @CameraPositionManipulated
return
:CameraTargetPointManipulated
wait 0
if
0934: camera_target_point_manipulated
jf @CameraTargetPointManipulated
return
W kodzie wystarczy odwołać się do tych procedur przy pomocy instrukcji
gosub. Przykład:
Kod:
0936: set_camera 2358.656 -1246.348 28.7884 position_to 2358.656 -1246.348 28.7884 time 7000 drop_mode 1
gosub @CameraPositionManipulated
0160: set_camera_point_at 665.8948 -479.5685 16.4175 mode 1
gosub @CameraTargetPointManipulated
Jest to bardziej efektywny sposób, niż stosowanie instrukcji
wait. Nazwy procedur można oczywiście zmienić na dowolne inne.
Pozostałe funkcje związane z kamerą, które nie znalazły się w tym tutorialu, można znaleźć w naszej bazie opcodów w kategorii
"Kamera":
Przejdź do bazy opcodów