[Header("Look")]
[SerializeField] private Transform _cameraContainer;
[SerializeField] private float _minXLook;
[SerializeField] private float _maxXLook;
private float _camCurXRot;
[SerializeField] private float _lookSensitivity;
private Vector2 _mouseDelta;
private bool _canLook = true;
private void LateUpdate()
{
if(_canLook)
{
CameraLook();
}
}
public void OnLookInput(InputAction.CallbackContext context)
{
_mouseDelta = context.ReadValue<Vector2>();
}
public void CameraLook()
{
_camCurXRot += _mouseDelta.y * _lookSensitivity;
_camCurXRot = Mathf.Clamp(_camCurXRot, _minXLook, _maxXLook);
_cameraContainer.localEulerAngles = new Vector3(-_camCurXRot, 0, 0);
transform.eulerAngles += new Vector3(0, _mouseDelta.x * _lookSensitivity, 0);
}
- InputSystem 사용
- LateUpdate: _canLook이 true면 CameraLook 실행
- OnLookInput: 마우스가 움직일 때마다 _mouseDelta 값을 받아온다
- CameraLook:
- _camCurXRot: 마우스의 상하 움직임을 받는다
- _mouseDelta의 y값을 넣는 이유는 _mouseDelta는 Vector2라서 y값이 상하 값이다.
- Clamp: _camCurXRot 값의 최대값과 최소값을 정해준다.
- _cameraContainer.localEulerAngles: x값에다 값을 넣어주는 이유는 x축을 회전시키기 때문이다.
- transform.eulerAngles: 좌우 회전은 캐릭터의 몸통도 돌아야하기 때문에 캐릭터 y축을 회전시켜 캐릭터와 카메라를 동시에 좌우로 움직인다.