본문 바로가기

Unity/작업방식

Unity: InputSystem 액션 이름 변경시 유용한 팁

New Input System은 스크립터블 오브젝트를 통해 프로필 형태로 관리된다.

에디터를 열어보면 사용하기 편하게 정리되어 있다.

 

 

이 데이터를 바탕으로 자동으로 생성되는 스크립트로 제어와 동작 구현이 가능하다.

모노비헤이비어 클래스에서 인터페이스를 상속받고, 콜백을 설정해준 뒤 인터페이스를 구현해주면 InputSystem이 이벤트를 밀어넣어준다.

 

그런데, ActionMap이나 Action의 이름을 바꾸어야 할 때 에디터에서 변경 후 코드를 생성하면 스크립트에서는 변경사항이 적용되지 않는다. 모두 찾아 바꾸기 기능을 이용해 수정하는 대안도 있겠지만 네이밍 컨벤션이 비슷한 경우를 완벽하게 필터링 해 수정하기 어렵다. 이 작업 하자고 정규식을 만들어 돌리는 것 역시 시간 낭비일 수 있다.

 

자동생성된 클래스인 GameInput을 살펴보면 하드코딩된 Json으로 부터 설정을 불러온다.

 

하단에는 자동 생성된 구현부를 확인할 수 있다.

착안할 점은 이 코드들이 자동생성된 코드란 점이다.

 

 

결과적으로 비주얼 스튜디오나 Rider에서, 리팩터링 기능을 활용해 원하는 이름으로 먼저 변경한 다음 에디터에서 수정해주면 컴파일 에러나 충돌이 발생하지 않는다. 

 

1. IDE 에서 ActionMap, Action 원하는 이름으로 변경 (네이밍 컨벤션 유지 필요)

2. 에디터에서 수정하고 코드 재 생성

3. Profit!

 

주의할 점은 ActionMap 이름으로부터 생성되는 인터페이스와 그 구현 콜백들인 Action 이름만 변경해주면 된다는 점이다. 그 외의 이름들은 자동생성된 클래스 밖에서 사용되는 일이 없다.