CineMachine FreeLook 카메라 사용 시 발생 한 문제...

2018. 12. 8. 13:43Unity Engine/Problem

강력한 카메라 기능을 제공하는 유니티 에셋 시네머신


일반적인 캐릭터 카메라 기능을 하는 FreeLook 카메라 또한 시네머신에 포함된 강력한 기능이며, 

저 또한 자주 사용합니다.


FreeLook 카메라는 Override World Up과 Simple Follow Mode 기능을 통해 y축이 Up Vector가 아닌 경우도 지원하는 것 같으나... 좌우 회전에 문제가 있어 보인다. 


forward나 right Vector가 틀어져서 생기는 문제로 보이는데...  왜 Up 벡터만 지정하는 건지...

이렇게 쓰라고 만들어 놓은 기능이 아닌건가??


문제의 현상을 보면


1. 회전에 저항이 생긴다. (점점 느려지고 어느 순간 안 움직임)

2. 회전 방향이 뒤집힌다. (캐릭터 기준이 아닌 월드 기준으로 회전하는 것으로 보인다.)


[y가 Up인 경우 정상 동작]


[x가 up인 경우]

 - up Vector의 방향에 따라 점점 회전이 느려지다 특정 위치에서는 카메라가 회전 하지 않는다. 


[-y가 Up 인 경우]

 - y가 up인 경우와 반대로 회전한다.

 - 캐릭터 기준으로 회전하지 않고 월드 기준으로 회전하는 것으로 보인다.




구글링을 통해 같은 현상을 겪어 문의한 게시글과 그에 따른 개발자의 안내 글을 발견했다.

https://forum.unity.com/threads/need-help-with-worldup-override-freelook.508668/

https://forum.unity.com/threads/free-look-camera-with-world-space-binding-and-overriden-world-up.564274/



개발자 또한 UpVector가 y가 아닌 경우 FreeLook 카메라를 사용하기 위해서 Simple Follow Mode 모드와 LockToTarget모드를 제시하는 것으로 보인다.

Simple Follow Mode는 위에서 이미 언급한 문제점 때문에 사용할 수 없고, 남은 건 LockToTarget모드인데...


[LockToTarget 모드를 사용한 경우]

 - overried world up을 제거하고 LockToTarget모드를 사용하면 Simple Follow Mode에서 일어난 문제점은 사라진다.



하지만, 이 모드는 카메라가 캐릭터를 바라보는 모드로 캐릭터의 회전에 맞춰 카메라도 같이 회전한다.

캐릭터 오브젝트에 자식으로 카메라를 넣은 것과 같은 효과. 플레이어 기준 회전이 잘 동작하는 건 당연하다.


[캐릭터 회전에 따라 카메라도 같이 회전]



캐릭터의 회전과 카메라를 분리해야 했기 때문에 Player 오브젝트와 캐릭터 모델 오브젝트를 분리하여 모델 오브젝트를 자식으로 만들고 캐릭터 이동과 카메라 Target은 Player 오브젝트를 통해 캐릭터 회전은 스크립트를 통해 자식인 모델 오브젝트를 회전하므로 해결하였는데 더 좋은 방법이 있는지 찾아봐야 겠다...


[최종결과]

 - 카메라 회전과 캐릭터 회전이 분리



'Unity Engine > Problem' 카테고리의 다른 글

Unity 2018.3에서 RayCheck 문제  (0) 2019.02.27
Unity 2018.3 - GC Alloc 17B  (0) 2019.02.02
[Serializable] No support for null for custom classes  (0) 2018.12.18