강의를 듣다가 자꾸 궁금한게 생겨 딴곳으로 빠지게된다..ㅠ
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 |