Home [Unity] Input Manager 때문에 겪었던 문제
Post
Cancel

[Unity] Input Manager 때문에 겪었던 문제

개발중인 게임에서 UI 영역의 터치 인식을 위해 투명 이미지 버튼을 쓰는 꼼수를 사용하고 있었다.

Button 흔한 UGUI Button 사용법

여기까지는 잘 동작하고 있었는데, 키보드 space 키를 눌렀을 때 터치와 동일한 효과가 나오게 해달라는 요청이 있었다.

그거야 별로 어려울 거 없겠지?
나는 그렇게 생각하고 바로 코드를 추가했다.

1
2
3
4
5
6
7
8
9
10
11
    protected void Update()
    {
        ...

        // 키 입력 처리
        if (Input.GetKeyDown(KeyCode.Space))  // 스페이스 키 : 터치
        {
            OnClick();
        }

        ...

물론 이것도 정상적으로 동작했다. 처음에는.

그런데 몇 번 진행하다 보니 갑자기 스페이스 키 입력이 안 먹는 문제가 발생했다.
대체 뭐지? 하고 로그를 찍고 디버거를 돌리고 난리를 피운 결과, 정확히는 입력이 안 먹히는 게 아니라 스페이스키를 누르면 OnClick()이 두 번 연달아 실행되고 있었다.

키보드 입력 단독으로는 발생하지 않고, 마우스 클릭으로 OnClick()를 한 번 이상 발동시킨 후 스페이스키를 누르면 그때부터는 OnClick()이 두 번씩 실행되는 것. 그리고 디버거를 돌려보니 한 번은 Input.GetKeyDown()쪽에서 키 입력을 받아 실행되는 거였고, 나머지 한 번은 마우스 클릭과 유사하게 이벤트로 실행되는 것 같았다.

그렇다면 혹시 스페이스키가 어디선가 터치 혹은 마우스 클릭과 같은 기능을 하도록 어딘가에 디폴트 설정이 있는 게 아닐까?

그런 생각에 유니티 Project Setting의 Input Manager 항목을 살펴보았다. 내가 유니티를 야매로 배우긴 했지만 입력 컨트롤러 관련으로 뭔가가 디폴트로 설정되어 있을만한 곳은 여기 말고는 생각나지 않았다.

그럼 그렇지

예상대로, Submit 항목에 space키와 관련된 설정이 있었다.

이게 정확히 어떤 기능을 하는지는 모르겠지만, 추측하기로는 마우스로 UGUI 객체 클릭시 그게 내부적으로 어딘가에 등록이 되고, 그 상태에서 Submit에 등록된 입력(space, enter키 등)을 수행하면 그 객체를 클릭 혹은 터치하는 것으로 보는 것 같다.

확인해보니 확실히 스페이스 뿐 아니라 엔터키로도 동일한 현상이 발생했고, 인풋 설정에서 스페이스키를 지우니 문제가 해결되었다.

버그는 해결하긴 했지만 유니티 Input Manager가 정확히 어떻게 동작하고 UGUI와 어떻게 상호작용하는지는 잘 모르겠다. 터치 혹은 클릭과 완전히 동일하게 동작한다면 UGUI 객체를 한 번 이상 클릭한 후부터만 처리되는 것도 이상하고.

나중에 본격적으로 컨트롤러나 키 입력을 다루는 게임을 만들게 되면 제대로 알아봐야 할 것 같다.

This post is licensed under CC BY 4.0 by the author.