TIL 44 심층분석

qkrrlcks00·2024년 10월 29일

 public void OnMoveInput(InputAction.CallbackContext context) //현재상태를 받아옴
 {
     if (context.phase == InputActionPhase.Performed) //눌리는동안
     {
         curMovementInput = context.ReadValue<Vector2>();
     }
     else if (context.phase == InputActionPhase.Canceled) //땔떄
     {
         curMovementInput = Vector2.zero;
     }
 }

인풋액션에 값을 넣어줍니다 인풋액션에 저장된 키를 누르면 코드가 작동합니다.
현재 인풋상태를 받아서 그상태에 대한 작용을 합니다.

 private void Move()
 {
     Vector3 dir = transform.forward * curMovementInput.y + transform.right * curMovementInput.x;
     dir *= moveSpeed;
     dir.y = rigidbody.velocity.y;

     rigidbody.velocity = dir;
 }

curMovementInput은 Vector2인데, Vector2는 x,y값만 가지고 있기때문에
transform.forward curMovementInput.y 해준뒤 transform.right curMovementInput.x를 하여 더해줍니다
이렇게 x,z값이 정해지고
y는 3d에서 점프같은 형식으로만 쓰기때문에 y값은 따로 밸로시티값으로 정해줍니다

public void OnLookInput(InputAction.CallbackContext context)
{
    mouseDelta = context.ReadValue<Vector2>();
}

마우스의 이동량을 Vector2로 읽습니다

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);
}

마우스이동량y와 사용자가 원하는 민감도를 곱해 camCurXrot에 저장합니다
그 값을 Mathf.Clamp함수를 이용해 최소와 최대로 볼수있는 시야각을 정해줍니다.
그후 cameraContainer는 플레이어의 자식오브젝트이므로 local로 x의 회전값을 정해줍니다. 이때
마이너스 부호를 넣은 이유는, 마이너스 부호를 넣지 않고 해보면, 화면이 상하대칭되어 반대로 움직이게됩니다.
이 현상은 마이너스 부호를 넣으면 해결됩니다.
그리고 플레이어의 y값도 같이 회전시켜줍니다

0개의 댓글