using System; using UnityEngine; public class CameraController : MonoBehaviour { [Header("Follow Camera Settings")] [SerializeField] Define.CameraMode _cameraMode = Define.CameraMode.QuarterView; [SerializeField] Vector3 _position = new Vector3(0.0f, 15.0f, -7.0f); [SerializeField] float _verticalFraming = 0.0f; // 음수일 수록 밑으로 [Header("Target Settings")] [SerializeField] GameObject _player = null; [SerializeField] // 카메라가 플레이어 캐릭터의 발에서 이정도 위치만큼 이동한 곳의 위치를 바라보도록 한다. Vector3 _lookAt = new Vector3(0.0f, 1.2f, 0.0f); void Start() { } private void LateUpdate() { switch (_cameraMode) { case Define.CameraMode.QuarterView: Vector3 lookAtPos = _player.transform.position + _lookAt; transform.position = _player.transform.position + _position; transform.LookAt(lookAtPos); transform.Rotate(Vector3.right, _verticalFraming, Space.Self); /* RaycastHit hit; if (Physics.Raycast(_player.transform.position, _position, out hit, _position.magnitude, LayerMask.GetMask("Block"))) { // (캐릭터 --> 카메라로 시도) 벽과 캐릭터 사이의 거리를 구한 다음에 0.8을 곱해서 카메라가 벽보다 조금 앞에 위치하게 한다. float dist = (hit.point - _player.transform.position).magnitude * 0.8f; transform.position = _player.transform.position + _position.normalized * dist; } else { transform.position = _player.transform.position + _position; // transform.LookAt(_player.transform); Vector3 lookAtPos = _player.transform.position + _lookAt; transform.LookAt(lookAtPos); transform.Rotate(Vector3.right, _verticalFraming, Space.Self); } */ break; default: break; } } }