2024. 3. 24. 11:18ㆍ유니티 공부
이제는 적용방법을 이야기해보겠다.
설정은 완료했으니 이제 적용을 해야된다.
현재 하이라키뷰에 있는 오브젝트들중에 입력값을 받아야 하는 오브젝트에다 Player Input 컴포넌트를 추가해야한다.
추가한 후에 Actions는 현재 우리가 InputSystem을 생성한 에셋을 넣고
DafultMap 우리가 작동해야하는 ActionMpas를 넣으면된다.
여기서 Behavior부분이 있는데 여기서 분류를 할수있다.
Send Messages , Broadcast Messages : 유니티의 Send Messages 기능을 사용
Invoke Unity Events, Invoke C Sharp Events : C#의 이벤트 기능을 사용
Send Massages 특정 키가 들어오면 특정 함수를 호출해주는 방식
Broadcast Massages는 하위 오브젝트들도 제어가 가능하다고 한다.
Send Massages는 On + Action Name으로 함수를 넣는데
인풋 시스템에서 Name이 Movement라면
OnMovement이런식으로 메서드를 만들어야한다.
처음에 InputSystem 라이브러리를 추가하고
using UnityEngine.InputSystem;
InputValue value 매개변수를 불러와서 작동하는 방식이라 볼수있다.
public void OnMovement(InputValue value)
{
movement = value.Get<Vector2>();
}
Invoke Unity Events
Unity의 events기능을 사용하였고
현재 Actions에 대한 키가 입력을 받았을 경우 설정한 이벤트 함수를 호출시킨다.
이렇게 스크립트를 넣어서 특정 함수를 설정해준다.
Invoke Unity Events는 매개변수를 이벤트이기 때문에 InputAction.CallbackContext를 받아준다.
똑같은 InputAction으로 받게되면 오류가 뜰테니 이부분을 조심하자.
public void OnMovement(InputAction.CallbackContext context)
{
movement = context.ReadValue<Vector2>();
}
하지만 둘다 썻을때 조심해야 할것이 있는데 이렇게 특정함수에 아무것도 넣지 않고 기능을 넣으면 특정 연속으로 3번 호출할것이다.
이 이유는 Started, Performed, Canceled를 설정해주지 않아서 인데
Started : 상호작용이 시작되었습니다. 즉, 기대하는 일부 입력을 받았지만 아직 완료되지 않았습니다.
Performed : 상호작용이 완료되었습니다.
Canceled : 상호작용이 중단되고 중단되었습니다. 예를 들어, 사용자가 홀드 상호작용이 완료되기 전에 버튼을 누르고 놓았을 수 있습니다.
결론은 상호작용이 시작했을때(입력키를 눌렀을때) 한번 그리고 완료하고(입력키를 누르고 있을때) 한번 그리고 상호작용이 종료됬을때(입력키를 땟을때) 한번 호출이 되서 연속 3번 호출되는 것이다.
그래서 특정 키를 눌렀을때
public void OnJump(InputAction.CallbackContext context)
{
if (context.phase == InputActionPhase.Performed)
{
if(isGrounded)
{
velocityY += Mathf.Sqrt(jumpForce * -1.0f * gravityValue);
rigid.velocity = new Vector2(rigid.velocity.x, velocityY);
}
}
}
이런식으로 조건문을 넣어서 입력하면 한번만 입력하게 된다.
입력이 잘되는걸 볼수있다.
그리고 마지막으로 sendMessages 보단 InvokeUnityEvents를 추천하는 이유는 sendMessages는 C#의 리플렉션을 사용하기 때문에(모든 타입들을 확인하고 연결해주는 방식)이라 성능이 좋지않다고 한다.
참조한 블로그
[Unity] New Input System #2 | 키 입력을 스크립트에 전달하여 처리하기
저번 글에서 기본적인 셋팅을 끝냈었다. 이번 글에서는 입력값을 스크립트(script)에 전달하는 방식 중 2가지 정도를 사용하여 로직을 제어하는 걸 해보고자 한다. Player 게임 오브젝트에 Player Input
daekyoulibrary.tistory.com
'유니티 공부' 카테고리의 다른 글
New InputSystem (1) (0) | 2024.03.24 |
---|---|
유니티 FSM (유한 상태 기계) (0) | 2024.03.13 |
프리팹을 생성하고 쓸때 주의할점 (GetComponent를 쓰는이유) (1) | 2023.11.23 |