UE5 : 3D (Blueprint)/캐릭터

[UE5 : 3D(BP) - 캐릭터] Chapter 02. 캐릭터 회전

song.ift 2024. 2. 20. 10:58

GitHub : https://github.com/developeSHG/UE5-3D_BP/commit/82292562753b4fef6353905a689b9e6718d1ed18

 

캐릭터 회전 · developeSHG/UE5-3D_BP@8229256

hokyung.song committed Feb 20, 2024

github.com

 

 

 


 

 

게임에서 보통 회전을 한다면 Yaw를 회전시킨다.

 

 

이렇게 회전을 하는 코드를 만들고 실행해보면, Yaw가 바뀌지 않는다.

이런 것이 사실 언리얼 엔진에 짜증나는 부분 중 하나인데, 구조가 타이트하게 잡혀있고 서로 엮여있었다 했다. 이유는 단순하게 Yaw가 변하지 못하게 막아주는 설정이 하나 있다.

 

Pawn 설정에 Use Controller Rotation Yaw 라는 옵션이 true로 설정되어 있다.

이 설정은 플레이어가 실행 되었을 때, 플레이어 컨트롤러가 플레이어 클래스에 빙의해서 조종을 하는데, 해당 옵션 자체는 컨트롤러의 값을 플레이어의 값으로 인정을 하겠다 즉 회전값을 동일하게 맞춰주겠다 라는 것이다.

그래서 아무리 플레이어의 로테이션을 수정하려고 해도 결국 플레이어 컨트롤러의 회전값은 바뀐 상태가 아니기 때문에 그대로 인 것이다.

해당 설정은 false로 하면 정상적으로 동작한다.

만약 코드를 잘 만들었는데, 안돌아간다고 하면 Use Controller 시리즈를 확인해 볼 필요가 있다.

 

코드를 좀 더 간결화.

 

 

위에는 플레이어 액터의 회전값이 컨트롤러의 회전값에 정확히 일치하게 만들었는데, 조금 부드럽게 따라가게 만드는 방법이 있다.

Use Controller Rotation Yaw을 다시 false 해주고,  Character Movement Component 쪽에 이동과 관련되 부분 뿐만 아니라, 회전과 괸련된 것도 설정할 수 있다.

Use Controller Desired Rotation을 true 시키면 일치하지는 않겠지만, 컨트롤러가 바뀐 그 값에 따라가게끔 부드럽게 회전한다.

 

 

총 요약을 해보자면, 결국 설계 자체에 대해 눈여겨볼 필요가 있다.

Add Movement Input 이라는 의도만 표현하는 방식으로 떠넘긴 다음에 실제로 처리하는 것은 Character Movement Component에서 해줬고,

마찬가지로 회전과 관련된 부분들은 Add Controller Yaw Input으로 해서 컨트롤러한테 떠넘겼다.

하지만, 그 다음 플레이어가 어떻게 이 컨트롤러를 따라갈지는 여러가지 옵션에 따라 부드럽게 따라가게 할 수도 있고, 또는 Use Controller Rotation을 켜서 컨트롤러와 플레이어의 회전값을 일치하게 만들 수도 있는 등 여러가지 방식이 있었다.

 

그리고 나중에 C++ 기반으로 작업을 하면 엔진 코드도 뜯어볼 수 있는데, 컨트롤러 쪽에 회전값을 넣어준 여러가지 이유를 유추할 수 있겠지만, 나중에 가면 단순하게 회전하고 끝나는 것이 아니라 여러가지 이슈가 있을 수 있다.

예를 들면, 카메라 쉐이크가 적용이 되어 흔들리거나 여러가지 상태에 따라 무작정 이동하는 것이 아닌 외부 요소에 따라 조절할 수 있게끔 코드가 만들어져야 되기 때문에 바로 회전처리하지 않고, 이런 식으로 Controller Input 이라는 것으로 떠넘긴 다음, 다른 곳에서 회전을 처리한다고도 볼 수 있다.

이렇게, 엔진을 뜯어보면서 설계에 대한 고찰도 계속 해보는 것이 좋다.