
게임을 유저가 플레이 하기 위해 가장 첫 번째 마주하는 기능은 "유저의 입력을 받고 반응하는 것"이다.
다양한 플랫폼을 지원하기 위해서는 각 플랫폼의 입력 장치들에 대한 구현을 해야 하지만
통일된 기능으로 다양한 입력기기들에 대응하기 위해 유니티에서는 Input System 기능을 지원한다.
PlayerInput plrInput;
private void Awake()
{
plrInput = GetComponent<PlayerInput>();
foreach(var map in plrInput.actions.actionMaps)
{
map.Disable(); // 일단 모든 입력을 동시에 받는 상황을 막는다
}
plrInput.actions.FindActionMap("Player").Enable(); // 켜고 싶은 액션맵 하나만 활성화 한다
}
▼ Player Input 컴포넌트 없이 사용하는 방법
private void Start()
{
var move = InputSystem.actions.FindActionMap("Player").FindAction("Move");
}
private void Update()
{
if (InputSystem.actions["Move"].IsPressed())
{
Debug.Log("이거 눌렸어요");
}
}
private void Update()
{
if (InputSystem.actions["Move"].IsPressed()) // 구현은 가능한데, 구형 인풋이랑 다르지 않게 되었다
{
Debug.Log("이거 눌렸어요");
}
if (Keyboard.current.iKey.IsPressed()) // 이것 또한 가능한데, 구현 인풋이랑 다르지 않다.
{
Debug.Log("I 눌렸어요");
}
// 차라리 I 키를 인풋시스템에서 바인딩 해놓고 그 메서드가 발동되게 하는 것이 낫다.
// OnIPress 등등..
}
차라리 디버깅 용으로 사용하고, 조작키는 액션맵에 바인딩해서 사용하는 편이 좋다.
▼ 키 맵핑을 수동으로 할 때 주의점
public class TestScripts : MonoBehaviour
{
PlayerInput input;
private void Start()
{
input = GetComponent<PlayerInput>();
Debug.Log(InputSystem.actions); // 전역적으로 쓰이는 인풋시스템
Debug.Log(input); // 로컬적으로 쓰이는 인풋시스템
}
}
▼명시적인걸 좋아하면 이렇게 작성
input.actions.FindActionMap("Player").FindAction("Move");
▼간결한걸 좋아하면 이렇게 작성
input.actions.FindAction("Player/Move");
▼코드로 작성하는 바인딩 삭제와 추가
var moveAction = input.actions.FindAction("Player/Move");
moveAction.ChangeBinding(0).Erase(); // 바인딩 지우기
moveAction.AddCompositeBinding("2DVector").With("Up", "<keyboard>/w"); // 바인딩 추가

모디파이어 = 조합키 또는 보조키
특정 키와 함께 눌러야만 발동되는 입력 기능
shift + W : 빠르게 달리기
Ctrl + C : 복사
Alt + F4 : 종료
if (keyboard.shiftKey.isPressed && keyboard.wKey.wasPressedThisFrame)
{
Run();
}