01. 시네머신 카메라를 사용 -
우선, 이전 일지에서 마저 구현하지 못했던 건,
플레이어가 먼저 이동하고 Camera가 뒤늦게 스무스하게 이동하는거 였다
그럴려면 첫 번째로 플레이어 객체안에 자식구조로 들어가있는 메인카메라를 뺄 필요가 있었다.
왜냐하면, 자식으로 들어가게 되면 위치와 회전을 고정으로 받기 때문이다. 물론
이를 자식내에서 스크립트를 추가하여 Position에 따라 수정할 수 도 있겠지만 수식이 복잡해지고
잘못된 방식이라 생각했다.
좀 더 깔끔한 방법은 없을까 고민 끝에 여러 유튜브와 자료들을 뒤지게 시작했다.
그리고 발견 한 것들.

처음 써보는 자료였고 유튜브를 제대로 보진 않았지만 확실히 내가 원했던 Lock On System이 구현되었고, 스무스하게
카메라가 뒤따라 갔었다.
처음 구현하는거라 잘 알지는 못했지만 하여튼 추가 적으로 시네머신 FreeLock Camera 키워드로 구글에서 이곳저곳
뒤지기 시작했다. 그리고 이것 저것 조작해 본 결과 확실히 성과가 있었다.
일절, 스크립트를 사용하지 않고 스무스하게 캐릭터를 따라가는 시네머신 카메라 구현 부는 아래와 같다.
먼저, Cinemachine으로 FreeLock Camera를 만들면 하이락키에 CM FreeLock1 이라는 객체가
자동생성 되고, 인스펙터창에서 확인해보면 위 사진과 같은 내용이 나오게 된다.
여기서 Follow(따라갈 객체)를 Player Transform으로 맞춰주고 Look At(바라볼 방향)을 Target Transform으로 맞췄다.
그럼 카메라가 뭔가 이상하게 x,y,z 값이 고정될텐데. 이때 MiddleRig 의 Radius를 조절하여 뒤로 보낼 수 있었다.
중요한건 Y Axis, X Axis의 Input AxisName이 Mouse Position으로 되어있을 건데 공백으로 해줘야한다. 아니면 마우스의 움직임에 따라 화면이 움직인다 .
또 Recenter To Target Heading 부분이었는데 저것을 Enabled로 체크하고
Wait Time을 1 , Recentering Time 0으로 하면 내가 원했던, 스무스 하게 카메라가 뒤늦게 플레이어를 따라오게 된다.
또한, 우리가 쓸건 상하로 회전하는 카메라가 아닌 좌우로만 회전하는 카메라를 만들어야 했기에. Top & Bottom Ring의 Aim을 Do nothing으로 바꿔주었다.
실행물.
일단은 우여곡절 끝에 구현완료 했다고 생각했다.
추가적으로 거리에 따라 더 빠르게 공전해야하는 시스템을 추가하는 것과
Rigid body를 추가하고 충돌을 실험하기 전 까진 말이다.
자 일단 첫 번째로, 거리에 따라 공전 속도가 더 빨라야한다.
현재는 2000의 speed로 일정하게 공전했지만, 내가 벤치마킹하고 있는 Every Hero 는 Player가 Target에 가까울 수록
공전 하는 속도가 달랐다.
즉 거리에 따라 유동적으로 Speed를 바꿔줘야 했고 이것저것 실험을 통해 알아본 결과
이렇게 되면 RotateAround 사용할 수 없게 되었다.
애당초, 후에 알게 된 거지만 RigidBody를 사용해서 움직이는 순간 RotateAround는 사용할 수 없다.
물론 RigidBody의 MovePosition 함수를 통해 구현하는 방법은 있지만.
또 물체 충돌 시 시네머신 카메라와 Player가 따로 놀게 되는 문제가 발생했다.
결국 물체 충돌 시 시네머신 카메라의 비정상적인 작동으로 힘껏 구현한 시네머신 카메라외에 다른 방법을 선택해야 했다.
나름 공부가 되었다. 나중에 백뷰 비슷한 3D Camera를 사용하게 될 때 유용하게 사용 될 수 있고
애당초 컷씬 용도로 만들어진 시스템인지라 컷씬 시스템을 만들 때 참고가 될 수 있을 것 같다.
MOS-CAMERA-SYSTEM