1. UI 버튼 작업 했음 2. 칼, 방패 따로 붙이는 작업 헀음 3. 공격 모션에 이제 버튼 연동함 Todo 1. 공격시 화면 이상하게 흔들리는거 수정할 차례 2. 히트 박스 해서 몬스터 공격하는거 연동하기
97 lines
3.8 KiB
C#
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;
|
|
}
|
|
}
|