카메라 (Camera)
쿼터뷰를 만들어보자!
목적
Main Camera가 플레이어로부터 일정거리 떨어진채로 따라온다.
개발 순서
- 쿼터뷰를 정의한다.
- 당장 다른 시점이 있지도 않지만, 일단 enum으로 쿼터뷰를 정의해놓음.
public enum CameraMode { QuarterView, }
- 당장 다른 시점이 있지도 않지만, 일단 enum으로 쿼터뷰를 정의해놓음.
- CameraController 스크립트 생성 후 변수 초기화
- 델타는 플레이어와 카메라의 적정거리이며, 플레이어는 태그로 찾아서 object 할당. ```C# [SerializeField] Define.CameraMode _mode = Define.CameraMode.QuarterView; [SerializeField] Vector3 _delta; [SerializeField] GameObject _player;
private void Start() { _delta = new Vector3(0, 6, -7); _player = GameObject.FindGameObjectWithTag(“Player”); } ```
- 기본적으로는 Player의 transform.position에서 _delta만큼 떨어진 거리에 카메라를 위치시키고 Player를 바라보게 하면 됨.
transform.position = _player.transform.position + _delta; transform.LookAt(_player.transform);
- 하지만 플레이어와 카메라 사이에 장애물이 있으면 카메라가 가려지게 된다.
이 때 플레이어의 위치에서 카메라까지 출발하는 Raycast를 이용해서 장애물을 감지한 다음, 플레이어와 카메라의 거리를 장애물 앞으로 조정해주면 오케이!
RaycastHit hit; if (Physics.Raycast(_player.transform.position, _delta, out hit, _delta.magnitude, LayerMask.GetMask("Wall"))) { // 그래도 정확한 거리를 계산하면 장애물과 카메라가 딱 붙어버리니까, 정확한 거리에서 0.8을 곱해준다. float dist = (hit.point - _player.transform.position).magnitude * 0.8f; transform.position = _player.transform.position + _delta.normalized * dist; }
댓글남기기