Unity InputSystem에서 마우스 이동시키기

정찬호·2023년 4월 29일
0

Unity learn에 존재하는 튜토리얼 프로젝트를 진행하고 있었습니다. InputSystem을 사용하여 진행하는 프로젝트였는데, 저는 아이템을 획득할 시 획득 UI창이 표시되고 해당 창에 존재하는 Exit 버튼을 눌러야 창을 닫을 수 있는 구조로 만들었습니다.

직접 실행해보니 마우스커서가 전혀 움직이지 않아 창을 닫을 수 업다는 문제가 발생했습니다.
도대체 뭐가 문제지? InputSystem을 쓰면 커서가 고정되서 움직이지 않는 건가? 하면서 여기저기 찾아보다 해결책을 찾았습니다.

이게 적절한 해결법인지는 모르겠지만 제가 쓴 코드는 다음과 같습니다.

        // 플레이어 입력 활성, UI 입력 정지, 커서 비활성화(비가시화, 고정)
        public void EnablePlayerInput()
        {
            PlayerInput input=GetComponent<PlayerInput>();
            input.actions.FindActionMap("Player").Enable();
            input.actions.FindActionMap("UI").Disable();
#if UNITY_EDITOR||UNITY_EDITOR_WIN
            Cursor.visible=false;
            Mouse.current.WarpCursorPosition(new Vector3(0.0f,0.0f,0.0f));
            Cursor.lockState=CursorLockMode.Locked;
#endif
        }
        
        // 플레이어 입력 정지, UI 입력 활성, 커서 활성화(가시화, 이동)
        public void DisablePlayerInput()
        {
            PlayerInput input=GetComponent<PlayerInput>();
            input.actions.FindActionMap("Player").Disable();
            input.actions.FindActionMap("UI").Enable();
#if UNITY_EDITOR||UNITY_EDITOR_WIN
            Cursor.visible=true;
            Cursor.lockState=CursorLockMode.Confined;
#endif
        }

Cursor.lockState

제가 사용한 해결 방법은 Cursor의 lockState를 변경하는 것이었습니다.

Cusor.lockState=CursorLockMode.Locked;

: 커서가 중앙에 고정된 채로 움직이지 않으며 보이지 않음.

Cursor.lockState=CursorLockMode.Confined;

: 커서를 움직일 수 있으나 실행중인 어플리케이션의 창에서 커서가 벗어나지지 않음.

Cursor.lockState=CursorLockMode.None;

: 커서를 움직임에 전혀 제한 없음.

덤으로

Cursor.visible

화면의 커서를 보이게 할지 여부를 설정한다. true일 경우 커서가 화면에 보이고 false일 경우 커서가 화면에 보이지 않는다.
주의할 점: lockstate가 Locked일 경우 true여도 보이지 않는다.

참고
https://docs.unity3d.com/ScriptReference/Cursor-lockState.html

profile
게임 개발 지망생입니다.

0개의 댓글