삽질의 시작
01. 시네머신 카메라를 사용 -
우선, 이전 일지에서 마저 구현하지 못했던 건,
플레이어가 먼저 이동하고 Camera가 뒤늦게 스무스하게 이동하는거 였다
그럴려면 첫 번째로 플레이어 객체안에 자식구조로 들어가있는 메인카메라를 뺄 필요가 있었다.
왜냐하면, 자식으로 들어가게 되면 위치와 회전을 고정으로 받기 때문이다. 물론
이를 자식내에서 스크립트를 추가하여 Position에 따라 수정할 수 도 있겠지만 수식이 복잡해지고
잘못된 방식이라 생각했다.
좀 더 깔끔한 방법은 없을까 고민 끝에 여러 유튜브와 자료들을 뒤지게 시작했다.
그리고 발견 한 것들.
https://www.youtube.com/watch?v=ozb6aFTwiHU
https://ansohxxn.github.io/unity%20lesson%201/chapter11-3/
시네머신 카메라와의 만남...
처음 써보는 자료였고 유튜브를 제대로 보진 않았지만 확실히 내가 원했던 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를 사용하게 될 때 유용하게 사용 될 수 있고
애당초 컷씬 용도로 만들어진 시스템인지라 컷씬 시스템을 만들 때 참고가 될 수 있을 것 같다.