Practice_Unity/Assets/Scripts/Controllers/CameraController.cs
Seonkyu.kim 488c0858ad 작업
1. UI 버튼 작업 했음
2. 칼, 방패 따로 붙이는 작업 헀음
3. 공격 모션에 이제 버튼 연동함

Todo
1. 공격시 화면 이상하게 흔들리는거 수정할 차례
2. 히트 박스 해서 몬스터 공격하는거 연동하기
2025-09-29 17:59:40 +09:00

97 lines
3.8 KiB
C#

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<PlayerController>();
// 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;
}
}