44 lines
1.3 KiB
C#
44 lines
1.3 KiB
C#
using UnityEngine;
|
|
|
|
public class CameraController : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
Define.CameraMode _cameraMode = Define.CameraMode.QuarterView;
|
|
|
|
[SerializeField]
|
|
Vector3 _delta = new Vector3(0.0f, 6.0f, -4.0f);
|
|
|
|
[SerializeField]
|
|
GameObject _player = null;
|
|
|
|
void Start()
|
|
{
|
|
|
|
}
|
|
|
|
void LateUpdate()
|
|
{
|
|
if (_cameraMode == Define.CameraMode.QuarterView)
|
|
{
|
|
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;
|
|
}
|
|
else
|
|
{
|
|
transform.position = _player.transform.position + _delta;
|
|
transform.LookAt(_player.transform);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void SetQuaterView(Vector3 delta)
|
|
{
|
|
_cameraMode = Define.CameraMode.QuarterView;
|
|
_delta = delta;
|
|
}
|
|
}
|