오늘은 Unity의 Input System에 대해 이야기해보고자 합니다.
이전 TIL에 이어서 오늘은 Input System의 입력값을 스크립트에 전달하는 것을 이야기해보도록 하겠습니다.
이전 TIL에서 Player 오브젝트에 추가했던 Player Input 컴포넌트의 Behavior를 무엇으로 설정하냐에 따라 스크립트 작성 방식이 달라집니다.
스크립트에서 Input System의 기능을 사용하려면 다음과 같은 namespace를 적용해야 합니다.
using UnityEngine.InputSystem;
Move 액션이 있다고 가정합니다. 다음과 같이 OnMove 함수를 이용할 수 있습니다.
private Vector3 moveDirection;
private float moveSpeed = 3f;
void Update()
{
bool hasControl = (moveDirection != Vector3.zero)
if (hasControl)
{
transform.rotation = Quaternion.LookRotation(moveDirection);
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
}
void OnMove(InputValue value)
{
Vector2 input = value.Get<Vector2>();
if (input != null)
{
moveDirection = new Vector3(input.x, 0f, input.y);
}
}
public void OnMoveInput(InputAction.CallbackContext context)
{
Vector2 input = value.Get<Vector2>();
if (input != null)
{
moveDirection = new Vector3(input.x, 0f, input.y);
}
}
함수명을 굳이 OnMove로 지어줄 필요는 없습니다. 위의 사진처럼 Inspector에서 이벤트 함수를 잘 추가해주면 됩니다.