유니티 엔진/입력 처리 심화

유니티 6에서의 입력 처리 - (5) 입력키 재할당

monstro 2025. 11. 19. 00:00
728x90
반응형

- 개요

https://www.youtube.com/watch?v=JfuqMaOiNPs&list=PLX2vGYjWbI0RpLvO3B7aH-ObfcOifMD20&index=5

 

연결된된 기존의 키를 게임이 동작하는 시점에서 새로운 키로 재할당하는 Rebind에 대해서 알아본다

 

- 사전 정보

 

위와 같이 UI ToolKit으로 구성된 버튼 UI를 누르고 키를 입력받아 Jump 액션에 대한 키를 재할당한다

 

 

해당 버튼 UI가 포함된 캔버스를 활성화 + 비활성화하는 Input Action은 Menu 액션을 사용한다

 

- 코드 구성

1) Player_Walk 스크립트

 

캔버스를 활성화 + 비활성화하는 InputAction과 해당 캔버스를 멤버변수로 추가한다

 

 

Awake 함수에 위의 로직을 추가한다

추가한 InputAction의 값을 설정하는 로직을 추가하고,

PlayerPreference에 저장된 rebinds 문자열을 가져오고 가져온 값으로

InputActionAsset의 InputAction들을 덮어씌운다

 

 

Menu 함수에서는 캔버스 오브젝트를 활성화 + 비활성화한다

 

2) RebindScript 클래스

 

멤버변수는 위와 같다

  • InputActions : 사용중인 InputActionAsset
  • m_rebindingOperation : 키를 재할당하는 프로세스를 관리하는 객체
    • 재할당이 진행 중일 때 사용할 수 있음
  • m_jumpAction : 키를 재할당할 Input Action
  • m_rebindButton + m_rebindLabel : 재할당 작업을 수행하는 UI의 구성

 

 

Awake 함수에서는 Input Action 멤버변수의 값을 설정하고,

사용중인 UI ToolKit 기반의 UI에서 필요한 요소들을 가져와 설정한다

 

 

OnEnable 함수와 OnDisable 함수에서는 버튼 UI의 clicked 이벤트에 대해

Rebind 콜백함수를 바인드 / 바인드 해제한다

 

 

Rebind 함수의 로직은 위와 같다

  • Player 액션 맵을 비활성화
  • 재할당 UI를 수정
  • m_jumpAction 액션에 대한 상호 작용적인 재할당을 시작
    • 람다를 통해 재할당이 성공적으로 완료되면 RebindCompleted 함수를 호출하도록 설정
  • 재할당 작업을 실제로 실행

 

 

RebindCompleted 함수의 로직은 위와 같다

  • 완료된 RebindingOperation 객체의 자원을 해제
  • 재할당된 바인딩의 실제 경로를 가져오고, 가져온 값으로 UI를 갱신
  • Player 액션 맵을 다시 활성화
  • Input Action Asset의 모든 바인딩 재적용을 Json 파일로 저장
  • 저장된 Json 파일을 "rebinds"라는 이름의 문자열로 Player Preference에 저장

 

- 중요하게 알아볼 점

Rebind 과정에서 중요하게 알아볼 점은 다음과 같다

  • InputActionRebindingExtensions.RebindingOperation : 리바인딩을 위한 특수한 객체 사용
  • 액션이름.PerformInteractiveRebinding() : 리바인딩의 수행은 상호작용과 같은 여러방식이 존재
  • 리바인딩인스턴스.Dispose() : 리바인딩 객체를 사용한 이후 자원을 해제해야 함
  • 액션애셋이름.SaveBindingOverridesAsJson() : 리바인딩을 적용하는 방법은 Json을 사용하는 등의 방법이 존재

 

- 최종 실행 결과

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

 

728x90
반응형