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); private PlayerController _playerController; // private Vector3 _currentVelocity = Vector3.zero; // 부드러운 이동을 위한 현재 속도 저장 변수 // private Vector3 _targetPosition; // private Vector3 _lastPlayerPosition; void Start() { if (_player != null) _playerController = _player.GetComponent(); // if (_player != null) // { // // 초기 위치 설정 // _targetPosition = _player.transform.position + _position; // transform.position = _targetPosition; // } } private void LateUpdate() { switch (_cameraMode) { case Define.CameraMode.QuarterView: if (!_playerController) return; // 여기 공격 넣어서 하는거 확인하기 Vector3 lookAtPos = _player.transform.position + _lookAt; transform.position = _player.transform.position + _position; transform.LookAt(lookAtPos); transform.Rotate(Vector3.right, _verticalFraming, Space.Self); // if (Vector3.Distance(_lastPlayerPosition, _player.transform.position) > 0.05f) // { // _lastPlayerPosition = _player.transform.position; // } // _targetPosition = _player.transform.position + _position; // // 부드러운 카메라 이동 (SmoothDamp 사용) // transform.position = Vector3.SmoothDamp(transform.position, _targetPosition, // ref _currentVelocity, 0.25f); // // // 바라보는 위치 계산 // Vector3 lookAtPos = _player.transform.position + _lookAt; // 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; } } public void SetFollow(bool isFollow) { _isFllow = isFollow; } }