webgl로 만든 게임이 1인칭 시점일 경우
커서가 보여서 돌아다니면 안되고 고정되어 있어야 한다.
그럴 경우
Cursor.lockState = CursorLockMode.Locked;
Cursor.lockState = CursorLockMode.Confined;
커서 LockMode를 Locked 혹은 Confined를 쓰고
Cursor.visible = false;
커서가 안보이게 Visible을 False로 설정한다
그러다가 인터페이스나, 인벤토리창, 메뉴창 처럼 2D창을 클릭해야되는 상태면
마우스 커서가 보이고 마우스가 돌아다닐수 있게 해야한다.
그럴경우
Cursor.lockState = CursorLockMode.None;
커서 LockMode를 None으로 놓고
Cursor.visible = true;
커서가 보이게 Visible을 true로 설정한다
위와 같은 기능은 에디터 상에서 잘 작동하지만
webgl에서 Canvas의 Button에서 Onclick()기능을 쓰게 되면 문제가 된다.
예를 들어 인터페이스 창을 닫는 버튼을 Onclick()기능을 쓰고
Onclick()으로 호출하는 명령어가
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
일 경우
마우스가 커서에 위 기능이 바로 적용이 안돼서 한번 더 클릭해야 된다.
그래서 대안 책으로 Onclick()을 쓰지않고
Trigger Event의 Select()를 사용한다.
그러나 Select()로 쓸경우 오브젝트가 선택 되었을때 한번 호출되지만
다시 클릭할경우 호출이 되지 않는다.
Select()가 다시 호출되려면 다른 오브젝트를 클릭하고 오거나 Deselect상태가 되어야 한다.
그래서
GetComponent<UnityEngine.EventSystems.EventSystem>().SetSelectedGameObject(null);
EventSystem에서 Select된 오브젝트를 다 Deselect시키는 명령어를
호출해야한다.
그러나 Select()와 동시에 호출될경우 에러가 나기 때문에
위 명령어는 Invoke를 쓰거나 해서 시간 차를 두고 명령어를 호출 해야 한다.
'툴 > 유니티' 카테고리의 다른 글
유니티 리얼타임 라이트 중첩시 오브젝트별로 라이팅 깨져보이는 현상 (0) | 2022.01.24 |
---|---|
유니티 게임 일시정지 기능 만들기 (0) | 2022.01.11 |
유니티 마이크 (3) | 2021.10.26 |
유니티 오디오 스펙트럼 (0) | 2021.10.26 |
앱 이름 한글설정/국가별 설정 (0) | 2021.10.04 |