Sputnik(3) - 카메라 / 시점(Lerp)

JUSTICE_DER·2023년 9월 1일
0

🛰Sputnik (Satellite)

목록 보기
6/9

이전에 구현하지 못했던 Camera Lerp를 구현해본다.

램넌트2를 켜보았다.
기본 이동은 무조건 카메라 정면을 보며 wasd 이동을 한다.

다른 것은, 카메라의 회전이 캐릭터의 회전은 아니라는 것이다.
이동이 카메라가 기준이 되긴 하지만,
카메라가 캐릭터의 회전까지 결정하지는 않았다.

회전해도 따라서 보지 않는다.
하지만, 총을 조준하거나 이동키를 누르면, 서서히 카메라 방향을 본다.

그래서 이렇게 구르고도 구른쪽을 향해있다.
이동키를 눌러야지만 카메라 방향으로 캐릭터가 향하게 된다.

즉, 플레이어컨트롤러와 캐릭터의
bUseControllerRotationYaw = false로 설정된 것이고,

1. LerpCamera

  • 아무래도 카메라를 서서히 전환해주는 함수를 만들 필요가 있을 것 같다.

CPP로 구현하고 싶은데
아무리 찾아도 BP 노드 관련 자료가 대부분이라서..
UNREAL 공식 카페에 질문해보았다.

https://cafe.naver.com/unrealenginekr?iframe_url_utf8=%2FArticleRead.nhn%253Fclubid%3D27085438%2526articleid%3D80024%2526commentFocus%3Dtrue

그리고 해결책을 찾았다.
1. Tick에서 End Roator로 Lerp하게 진행한다면,
자연스럽게 서서히 변하게 할 수 있다.
2. Lerp와 TimerHandle을 사용하여
무거운 Tick 작업을 경량화할 수 있다고 한다. (대신 더욱 부자연)

함수와 변수 2개를 선언하였다.

  • 함수는 해당 변수 2개를 재설정하는 역할을 한다.

    • EndRot은 최종 Rotation,
    • bool 변수는 Lerp할지 말지 플래그 값

    LerpCamera가 호출되면, 매개변수로 들어온
    End Rotator로 서서히 Lerp한다.
    해당 매커니즘은 아래 Tick에 구현되어있다.

  • Tick에선 해당 bInterpolatingCamera 변수의 값을 플래그로 사용하여,
    해당 값이 true라면, tick의 해당 구문을 동작한다.
  • 현재 Player의 Rot에서 EndRot까지 서서히 Lerp 한다.

그래서 MoveForward, MoveRight 이동 관련 함수에
LerpCamera를 적용하여, 이동할 때마다 카메라가 현재 캡슐 방향을 쳐다보도록 하였다.

사실 그냥 Tick을 사용하는 것과 크게 다를 것이 없다.
Axis Input이라 계속 입력되기 때문이다.

유일하게 해당 값을 무시하는 경우는 위의 Roll 상태일 경우이다.
구를 때, 임시적으로 bUseController~를 false로 만들어
playerController와 캐릭터 매시의 회전 공유를 없애고,
캐릭터 매시만 회전 시킨다.

구르는 Montage가 끝나면, 다시 설정을 원래대로 돌린다.

profile
Time Waits for No One

0개의 댓글