초보 코린이의 성장 일지

UE4 카메라 (Camera) 보간 본문

언리얼

UE4 카메라 (Camera) 보간

코오린이 2023. 3. 7. 13:33

BluePrint에서 무기를 들고, 걸어 다닐때 부들 거리는 증상이 있었다. 이걸 한번 잡아보겠다.

앞으로 C++를 다룰때에도 필요하고 중요한 부분이 되기 때문이다.

 

1. 이 부분을 알고 가야 한다.

 

카메라가 만약 90도로 설정되어있다고 가정하고, 위에서 캐릭터를 바라봤을때, 수직이 이뤄진다.

여기서 90도 보다 아래에 숫자면 문제가 없지만, 0.1이라도 높다면 카메라 반전이 일어나면서, 축을 잃어버리는

"짐벌락"이 일어난다. 그래서 90도가 기준이 된다면, 89에 + @로 지수를 더 해주는게 좋은 방법이다.

 

위에 설명을 토대로 본격적으로 변화를 시킬 것이다. 원인은 무엇이였냐면, 시야 각차 때문이다.

시야 각차가 일어나는 원인은, 플레이어는 정면이지만, 카메라 중심은 캐릭터 옆에서 바라보기 때문에

캐릭터는 직선이지만 카메라는 살짝 틀린 각으로 정면을 향하게 보게 되어있다. 그래서 카메라가 플레이어 시야와

자기자신 시야를 왔다갔다 선택하면서 결정하기 때문에 버벅거리면서 끊기듯이 움직이게 되버린다.

해결 방법은 플레이어와 카메라를 빼줌으로써 각차를 구해야한다.

 

0부터 360까지 범위중에 +180, -180으로 나뉘게 된다. 이건 정렬된 값으로 델타를 사용하여 각차를 정렬해 중간값을 구해서 이 문제를 해결 할 수 있다.

ABP_Character 이벤트그래프 번경 전
ABP_Character 이벤트그래프 번경 후

1. 델타가 2개의 값의 차를 만들어주고, 정렬을 해주기 때문에 중간값을 찾아낼 수 있다.

2. Make Rot from X를 해주면, 절대적인 X축의 대한 속도가 나온다. 그럼 Velocity 속도가 무시되고, Rotation으로 바꾸게 되므로, 각도가 결국 나오게 된다. 즉 Actor에 진행방향이 된다.

3. 회전값과 Delta를 취해준다. 여기까지 해주면 캐릭터가 움직일 방향과 카메라가 보고있는 방향이 나온다. 그 두개의 중간값을 취해준 상태이다.

4. 100만큼 플레이어가 Tick에서 이동을 하고있다고 생각할때, 프레임이 무시되는 순간이 한번쯤은 생겨난다. 이때 그 중간이 비게되면 다음값이 증가해 있게된다. 이때 Delta Second로 잡아줬었다. 그리고 RInterp To로 보간해줘야한다.

5. RInterp To를 사용하게되면 이전 프레임에 회전값, 현재 프레임의 회전값을 곱하면서 진행되게 되는 것이다. 드랍이 생겨도 고정이 되므로 끊김 현상이 사라진다.

6. 필요한 각은 수직이므로, Yaw만 사용하면 된다.

Comments