카메라 셰이크
이번엔 역동적인 움직임 연출을 위해 카메라 셰이크 기능을 추가해준다.
이러면 발사체가 대상을 맞추면 카메라가 흔들리게 된다.
언리얼 엔진에는 카메라 셰이크를 위한 내장 클래스가 존재한다.
우선 C++ 클래스가 아닌 블루프린트 클래스를 생성하는데, 이는 카메라 셰이크에 변수가 많아서 블루프린트 클래스에서 작업하는 것이 훨씬 쉽기 때문이다.
먼저 발사체가 부딪혔을 때의 카메라 셰이크를 만들어주자.
그리고 얼마나 흔들릴지 진동 값을 조절해주어야 한다.
자세한 수치는 직접 테스트해보며 조정해보는 것이 좋다.
우선 강의에서 나온 수치를 그대로 적용하였다.
각각의 변수는
진동이 지속되는 시간, 카메라 흔들림이 시작될 때 까지의 시간, 카메라 흔들림이 종료될 때까지의 시간을 의미한다.
추가적으로 위치 진동의 값도 수정해주었다.
진폭은 카메라가 속한 축에서 움직일 수 있는 최대 이동량을, 주파수는 얼마나 빠르게 카메라가 진동할 지를 의미한다.
이외에 회전 진동과 FOV 진동 값도 존재하지만, 해당 값들의 경우 잘못 건들면 멀미를 유발하는 옵션이기에 이번엔 건들지 않았다.
이제 탱크나 터렛이 죽었을 때의 카메라 셰이크도 생성해주자.
죽었을 때는 더 큰 흔들림을 가지도록 값을 수정해주었다.
이제 C++에서 해당 카메라 셰이크를 호출하여 올바른 위치에서 실행시켜주어야 한다.
먼저 해당 타입 변수를 선언해주자.
카메라 셰이크를 실행시키는 함수는 다음과 같은 함수를 사용한다.
해당 함수는 TSubclassOf 타입을 필요로 하므로, 전에 선언했던 변수를 수정해주자.
나머지는 디폴트 값을 가지므로 추가적인 변수는 없어도 된다.
지금 선언한 변수는 히트에 관한 카메라 셰이크이기에 발사체 클래스의 OnHit 함수에서 실행하게 된다.
우선 카메라 셰이크를 실행시키기 위한 함수는 APlayerController에 위치한 함수이다.
따라서 해당 컨트롤러를 얻을 필요가 있는데, 이는 UWorld에 속한 GetFirstPlayerController() 함수를 통해 얻을 수 있다.
이제 언리얼로 돌아가서 발사체의 카메라 셰이크를 할당해주자.
우리는 죽음에 대한 카메라 셰이크도 존재하기에 이 또한 똑같이 구현해주면 된다.
탱크와 터렛 모두 필요한 기능이므로 베이스폰의 HandleDestruction 함수에서 실행시켜주면 된다.
마찬가지로 탱크와 터렛 모두에 각각 DeathCameraShake를 할당해주자.
이제 발사체가 어딘가에 맞을 때, 탱크나 터렛이 죽었을 때 카메라가 흔들리게 된다.
'Unreal > Udemy 강의' 카테고리의 다른 글
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-1 (0) | 2024.04.28 |
---|---|
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-42 (0) | 2024.04.27 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-40 (0) | 2024.04.27 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-39 (0) | 2024.04.26 |
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-38 (0) | 2024.04.26 |