Unity/오버워치 따라잡기

[Unity] 오버워치 따라잡기! 트레이서 편(5) - Recall 시간역행

_GyC_ 2023. 3. 17. 16:39

썸네일용

이번 편에서는 시간 역행할 때의 카메라 무빙을 자연스럽게 구현해보겠다.

점멸과 시간 역행 구현은 전 편들을 보면 된다.


 A. 오버워치에서 트레이서의 시간 역행 장면

영상에서 알 수 있는 것은

1. 위치는 정확히 과거를 따라간다.

2. 카메라는 중간에 뭘 했든 점멸 직전의 카메라에서 3초 전의 카메라까지 자연스럽게 이어진다.

 

따라서, 이번 편에서 해야하는 것은 2번이다. (1번은 전편에 구현 완료)


B. 역행시 자연스러운 카메라 이동 구현

전 편에서 Queue에 트레이서의 위치, 회전 정보를 수집했듯이, 이번에도 카메라의 회전 정보를 Queue에다가 수집하면 된다.

Queue가 아닌 List에다가 수집해야한다. 이번에는 첫번째 정보만 필요한 것이 아니고 마지막 정보도 동시에 필요하므로 List를 사용할 것이다. TracerController에 카메라를 레퍼런스하여 정보를 수집해보겠다.


Recall 정보를 수집하는 함수에서 camRotations에 카메라의 rotation값을 저장하는 것을 추가. 


자연스럽게 카메라가 회전하도록 각 step당 얼마나 회전해야하는지 RotPerStep으로 계산.


RotPerStep을 이용하여 Recall와 Recurse 함수 수정.

추가로 리콜이 끝난 후에 카메라가 부자연스럽게 꺾이는 현상이 발생해서 PlayerLook대신 TracerLook을 사용했다.


이렇게 코드를 짜서 성공시키기 까지 많은 시간이 걸렸지만 그 많은 시행착오들을 설명하기엔 무리.. 이건 기록용이니 나중에 시간되면 해보겠다.


B. 결과 비교   

글 맨 위에 첨부한 영상에서 똑같이 이동해 보았다.

다행히 위치는 그대로 움직이고 카메라의 회전은 끝과 처음으로 자연스럽게 이어진다.

(중간에 휙휙 바꿔도 이건 반영되지 않음을 볼 수 있다.)


C. 더 자연스럽게!

지금까지 역행 구현을 30step으로 기록하고 재생했는데, 이 step의 수를 늘리면 더 smooth한 역행이 구현될 것이다.

Step의 개수를 30에서 60으로 변경한 결과 다음과 같이 훨씬 부드러워진다.

다음 편에서는 이제 디테일을 추가할 예정이다.

HP, 쿨타임, UI, 데미지, 기본 공격, 근접 공격 등..

뭐부터 할지는 내마음~ 그럼 다음편에.. 즐개~ (즐거운 개발이라는 뜻.....)

 

 

(노트노트)

localRotation, Quaternion, Euler.. 헷갈