발매되고, 출시하고, 판매하는 모든 게임 중 카메라 쉐이크가 없는 게임보다 있는 게임이 더 많을 것이라고 단언한다.
이번 포스팅은 언리얼에서 카메라 쉐이크가 어떻게 제공되고, 어떻게 사용하면 되는지를 담고 있다.
(참고)
필자는 개발 중 여러 방식으로 고민하다 카메라 쉐이크를 언리얼 제공 CameraShakeBP를
스킬 및 연출등의 갯수 마다 늘려 C++에서 추가해 필요할때마다 호출하는 방식으로 사용하였다.
C++ 클래스로 관리하여도 좋으나, 생산성과 유지보수의 편리함 때문에 위와 같은 방식을 선택하였음을
참고하시길 바란다!
자 이제 시작해보자.
1. 먼저 CameraShake 블루프린트 클래스를 만들어보자.
2. 옵션이 해주는 기능을 하나하나씩 살펴보자.
[Single Instance] : 카메라 쉐이크를 여러번 재생했을때, true이면 한번 false이면 겹쳐서 진동이 되게끔 하는 설정
[Oscillation Duration] : 진동 지속 시간 / 초 단위!
[Oscillation Blend in Time] : 블렌드 인 지속 시간 (카메라 쉐이크 발동시 점점 강해지는 시간) 0~1로 조정
[Oscillation Blend Out Time] : 블렌드 아웃 지속 시간 (카메라 쉐이크 발동시 점점 약해지는 시간) 1~0로 조정
최상단의 옵션은 이러한 기능을 한다. 이해가 잘 가지 않으시면, 극단적인 수치를 넣어 테스트 해보시면 바로 이해하실 것 같다.
ex) Duration : 2.0 / Blend in Time : 0.8 / Blend Out Time 1.0
이제 제공되는 4가지의 카메라 쉐이크 옵션을 살펴보자.
[Rot Oscillation] : 카메라 회전 쉐이크
[Loc Oscillation] : 카메라 위치 쉐이크
[FOV Oscillation] : 카메라 화각 쉐이크 (Field of View)
[Anim Shake] : 카메라 애님 쉐이크 (그래프를 통한 직접적인 카메라 흔들기)
카메라 쉐이크는 총 이렇게 4가지가 제공되며, 이중 카메라 애님 Shake는 언리얼 4.21부터 기능이 deprecate된 것 같다.
개발 중 사용을 해보려 했는데, 카메라 애님은 만들어져도 설정이 되지 않았어서 사용하지 못했다.
이 부분에 대해서 잘 아시는분은 댓글로 알려주시면 감사할 것같다...OTL
이제 각 Oscillation 안의 수치들이 무슨 역할을 하는지 보자.
[Amplitude] : 카메라 쉐이킹 강도 (얼마나 강하게 흔들지)
[Frequency] : 카메라 쉐이킹 속도 (얼마나 빠르게 흔들지)
[Initial Offset] : 카메라 초기 오프셋
오로지 수치뿐이지만, 이를 잘 이해하고 설정하면, 원하는 카메라 쉐이크를 만들어 낼 수 있다.
또 오로지 수치뿐이기에... 생각보다 이쁘게 만들기가 많이 어렵다... ㅜㅜ 여러 레퍼런스를 보고 많은 공부를 해야
비로소 괜찮은걸 만들어낼 수 있지 않나 싶다.
3. 언리얼 카메라 쉐이크의 종류
언리얼은 크게 두가지 타입의 카메라 쉐이크가 있다.
1) 플레이어의 카메라를 직접적으로 흔드는 카메라 쉐이크 (Player Camera Shake)
블루프린트 클래스에서의 카메라 쉐이크는 간단하게 위와 같게 사용하면 된다.
Client Play Camera Shake와 Play Camera Shake 두가지 방식이 있는데,
전자는 오직 자신의 카메라만을 흔들때 사용하며, 후자는 Camera Manager 참조에서 호출해 직접 흔들고자 하는
카메라를 지정해야 한다.
타깃엔 컨트롤러 외에 직접적으로 적용할 캐릭터를 넣어주기만 하면 되며, 키입력 및 각종 델리게이트 호출방식등 사용 방식 또한 무궁무진하다.
작동중인 카메라 쉐이크를 멈출수 있는 제공함수도 있으니 이또한 잘 활용하면 좋을 것 같다.
2) AI의 범위형 공격이나 게임에서의 범위형 이벤트에 쓰이는 월드 카메라쉐이크 (World Camera Shake)
게임에서의 하나의 상황을 가정해보자.
"플레이어보다 거대한 몬스터가 강하게 내리쳤을때, 가까운 플레이어는 화면이 더 크게 흔들리고 먼 플레이어는
덜흔들리는 그런 상황"
월드 카메라 쉐이크는 이러한 상황때 쓰기 아주 좋다.
첫번째 인자에는 재생할 CameraShake클래스를 넣어주면 되며,
두번째 인자에는 해당 카메라 쉐이크가 실행될 중심 위치값을,
세번째 인자에는 감쇠가 전혀 적용되지 않는 반경을(감쇠가 시작되는 반경),
네번째 인자에는 감쇠가 적용될 최대 반경을(이 밖으로는 더 이상 Shake 효과가 없음)
넣어주면 된다.
UGamePlayStatics 제공 함수이기에 C++에서는 UGamePlayStatics::PlayWorldCameraShake(...) 방식으로 사용하면 된다.
4. C++에서 CameraShakeBP 사용법
여기까지 글을 읽어주신 멋진 언리얼 개발자님들은 이미 다 아실 것 같지만,
최근들어 언리얼 엔진에 입문하시는 분들이 많아 그분들을 위해 이미지 첨부정도로 포스팅을 마무리 하겠습니다.
긴 글 읽어주시느라 고생하셨습니다! 부디 도움이 되는 글이였으면 좋겠네요 ^~^
'Programming > Unreal Engine' 카테고리의 다른 글
언리얼 엔진 Cast (캐스팅) 심층 분석 (0) | 2022.12.05 |
---|---|
Ue4 Change Class Names (언리얼 클래스 명 수정) (0) | 2019.10.21 |