<카메라를 자식 객체로 만들지 않고, 1인칭 시점과 유사한 효과를 내보자>
◎서론
카메라를 자식으로 만들지 않고 1인칭 시점을 만들기 위해 우선 player의 Transform을 가져올 필요가 있다.
이제 playerTransform을 가지고 두 가지 정보를 만들어야한다.
1. 카메라가 얼마큼 회전해야하는가?
2. 카메라가 어떻게 움직여야하는가?
◎ 카메라의 회전
카메라는 player가 회전하는 만큼만 회전하면 된다.
player의 회전 값을 받아서
float3 만큼 회전한 Quaternion을 반환한다.
rotation 값을 카메라의 회전 값으로 넣는다.
마우스의 입력을 받는 코드가 카메라 스크립트에 있으므로
transform.rotation = rotation;
playerTransfrom.rotation = rotation;
이라고 작성해야 한다.
◎ 카메라의 위치이동
player가 회전할 때 카메라의 이동 경로가 큰 문제이다.
그림과 같이 카메라의 위치는 ‘player의 위치를 중심’으로 ‘player의 회전만큼’ 공전하듯이 움직여야 한다.
(player와 카메라의 중점이 같다면 간편하게 해결되지만, pivot을 만들어 player와 일치시키고 pivot을 카메라의 부모로 만드는 것은 카메라를 player의 자식 객체로 만드는 방법과 비슷하므로 사용하지 않았다.)
현재 player의 정보는 Transform만 있는 상태, 이것만 가지고도 공전하는 카메라의 위치를 구할 수 있다.
position = (Quaternion)[player의 회전] * (Vector3)[A] + (Vector3)[player의 global position];
(A = player의 local 좌표계를 기준으로 한 카메라의 위치)라고 생각된다.
◎ 불확실한 점과 부족한 점
카메라의 위치 이동에서 보여준 rotation * playerPlusPosition가 Quaternion Vector3의 곱인데, 이를 뒤집어 Vector3 * Quaternion라고 하면 할 수 없는 연산이라고 뜬다.
아마도 Quaternion에 *연산자 오버로딩이 (Quaternion, Vector3)순으로만 들어가 있다고 예상 정도는 할 수 있지만 Quaternion과 Vector3의 곱이 어떤 작용이 일어나는지 이해할 수 없었다.
따라서 playerPlusPosition가 ‘player의 local 좌표계를 기준으로한 카메라의 위치’라고
말한 것은 단순한 생각이다. playerPlusPosition의 값을 바꿔보다가 떠오른 예상일뿐이다.
'유니티' 카테고리의 다른 글
[유니티 Unity] Drag & Drop (3) | 2021.03.02 |
---|---|
다중 카메라 구성 (0) | 2020.11.08 |