강의를 듣다가 자꾸 궁금한게 생겨 딴곳으로 빠지게된다..ㅠ

InputActionPhase.뒤에 어떤것들이 올수있을까? 

if(context.phase == InputActionPhase.Performed)

 

 

  • Started: 실행 시작 시 호출
  • Performed: 실행 확정 (완전히 실행) 시 호출
  • Canceled: 실행 종료 시 호출
  • Disabled: 액션이 활성화되지 않음
  • Waiting: 액션이 활성화되어있고 입력을 기다리는 상태

일반적인 버튼 입력 상황 (Default)에서는 Started와 Performed가 같은 타이밍에 실행(실행 순서는 Started가 먼저)
그리고 Canceled는 버튼을 뗐을 때 실행됨

   public void OnMoveInput(InputAction.CallbackContext context)
   {
       if(context.phase == InputActionPhase.Performed) // 만약 입력을 받고있다면,마우스가 움직인다면
       {
           curMovementInput = context.ReadValue<Vector2>();
       }

       else if(context.phase == InputActionPhase.Canceled) //안움직이면
       {
           curMovementInput = Vector2.zero;
       }
   }

 

 

강의와 예외로 구글링을 하다가 Hold에 대한걸 찾았다.

입력 시스템의 Interaction 중 Hold에 대한 예시를 들어보면,

Hold를 감지하기 위한 pressPoint가 있고, 이 pressPoint를 넘어가는 순간 started가 실행됩니다.
그리고 그 상태에서 duration만큼의 시간이 흐르면 그때가 되어서야 performed가 실행됩니다.

스마트폰 홈 화면에서 앱을 누르고 홀드하는 것과 비슷한 경우입니다.
그냥 터치했을 때는 앱이 실행되고, 오래 터치하고 있으면 앱 위치를 이동하는 모드로 변경되는 것처럼요.

 

뭔가 꾹누르고있을때 요리를한다던가 이런곳에 쓸수있을것같다.

아래어떻게 쓰는지 몰라서 gpt에게 물어본 코드이다.

using UnityEngine.InputSystem;

public class AppController : MonoBehaviour
{
    private InputAction touchAction;
    private bool isHolding = false;

    void Start()
    {
        touchAction = new InputAction(type: InputActionType.PassThrough, binding: "<Touchscreen>/primaryTouch");
        touchAction.AddInteraction("hold(duration=2)"); // 지속시간을 2초로 설정
        touchAction.started += context => OnTouchStarted(context);
        touchAction.performed += context => OnTouchHeld(context);
        touchAction.Enable();
    }

    private void OnTouchStarted(InputAction.CallbackContext context)
    {
        isHolding = false;
        Debug.Log("App is activated");
        // App activation code goes here
    }

    private void OnTouchHeld(InputAction.CallbackContext context)
    {
        if (!isHolding)
        {
            isHolding = true;
            Debug.Log("Switch to app moving mode");
            // App moving mode code goes here
        }
    }
}

 

 

이해가 가지 않는 코드해석해보기 -1
 public void OnLookInput(InputAction.CallbackContext context) 
 {
     mouseDelta = context.ReadValue<Vector2>(); 
    
 }

 

 public void OnLookInput(InputAction.CallbackContext context) ==

OnLookInput 함수를 실행할때 Player에 붙여둔 Events 내에 설정해둔 Look을 매개체로 쓰겠다).

 

Look Action에 할당된건 Delta[Mouse]이므로

 

 mouseDelta = context.ReadValue<Vector2>(); 를 읽어온다.

 

 

 

이해가 가지 않는 코드해석해보기 -2

 

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

  

 

    카메라가 바라보는 코드 ,마우스로 움직일수있게할꺼임 ()
    {

     [첫째 줄]
        x축이 축이되어야 y의 값이 변하기 때문에, x = 마우스위아래(Y)하는거리 * 민감도(속력)

    [둘째 줄]
       위의 끄덕임을 더 돌아가지않게 가두기
       Mathf.Clamp (첫번째 매개변수 value는 집어 넣을값(=검사할값) , 두번째 매개변수 min 최소값 , 세번째 매개변수                max최대값) 

    [셋째 줄]
    마우스를 상하로 움직이는 각도를 조절하는 "localEulerAngles" ,

    x축에 ( - ) 를 붙여주는 이유는 ??

    실제로 로테이션을 돌렸을떄 마우스를 밑으로 내리면서 시야가 위로 향할때 x가 -가되기떄문


     [넷째 줄] 

    도리도리가능하게 y축을 (x축의거리*속력) 만큼 이동
    }

'TIL' 카테고리의 다른 글

TIL-2024/02/21(버튼을 눌렀을때 저장법)  (0) 2024.02.21
TIL-2024/02/08  (0) 2024.02.08
TIL-2024/02/01  (0) 2024.02.01
TIL-2024/01/30  (0) 2024.01.30
TIL-2024/01/29  (0) 2024.01.29

+ Recent posts