Unity 웹 플랫폼은 HTML5 API인 Element.requestPointerLock
및 Element.requestFullscreen
을 사용하여 구현되는 커서 잠금 및 전체 화면 모드 등의 기능을 지원합니다.
참고: 커서 잠금 및 전체 화면 모드에 대한 브라우저 지원은 다양하게 있으므로 커서 잠금 및 전체 화면에 대한 Mozilla 기술 자료를 참조하십시오.
커서 잠금을 사용하면 플레이어가 마우스 커서를 게임 창의 중앙에 고정할 수 있습니다. 커서가 잠기면 커서가 Unity에 숨겨진 채로 나타나며 마우스를 움직여도 움직이지 않습니다. 이는 일반적으로 마우스 커서를 사용하여 플레이어의 각도 방향을 제어하는 1인칭 게임을 플레이할 때 특히 유용합니다.
커서를 잠그려면 Cursor.lockState
프로퍼티를 사용합니다. 예를 들어, 다음 코드는 사용자가 클릭했을 때 커서가 잠긴 상태를 보여 줍니다.
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Cursor.lockState = CursorLockMode.Locked;
}
}
Esc 키를 누르면 커서가 자동으로 잠금 해제됩니다.
브라우저가 (일반적으로 Esc 키를 사용하여) Unity 캔버스에서 커서 잠금을 해제하더라도 Cursor.lockState
의 상태가 지속되도록 stickyCursorLock
을 사용하면, 다음에 캔버스에 포커스가 맞춰졌을 때 커서가 다시 잠깁니다. stickyCursorLock
프로퍼티는 일반적으로 브라우저 동작에 관계없이 커서 잠금 모드를 유지하는 것이 특히 유리한 1인칭 게임에서 사용됩니다.
따라서 WebGLInput._stickyCursorLock
을 true
로 설정하면 Unity 캔버스 HTML 요소가 커서 잠금을 해제하더라도 Cursor.lockState
는 CursorLockMode.Locked
상태로 유지됩니다. WebGLInput._stickyCursorLock
을 false
로 설정하면 Cursor.lockState
는 브라우저의 커서 잠금 상태와 동기화된 상태로 유지되며, Esc 키를 눌러 캔버스 커서 잠금을 취소하면 CursorLockMode.None
으로 변경됩니다.
참고: 웹에서는 stickyCursorLock
이 기본적으로 true로 설정되어 있습니다.
전체 화면 모드를 사용하면 컴퓨터 화면 전체를 게임에 사용할 수 있습니다. 전체 화면 모드에서는 다음 작업을 수행할 수 있습니다.
전체 화면을 게임에 사용합니다.
주소 바 및 탭과 같은 브라우저 UI(사용자 인터페이스) 요소를 숨깁니다.
제목 바 및 툴바와 같은 Unity 플레이어 UI 요소를 숨깁니다.
전체 화면 모드를 활성화하려면 Screen.fullScreen
프로퍼티를 사용합니다. 예를 들어, 다음 코드는 사용자가 F 키를 누르면 게임이 전체 화면 모드로 표시되는 것을 보여 줍니다.
void Update()
{
if (Input.GetKeyDown(KeyCode.F))
{
Screen.fullScreen = true;
}
}
참고: Screen.fullScreen
프로퍼티는 기본적으로 false
로 설정됩니다.
전체 화면 모드를 종료하려면 ESC를 다시 누르거나 마우스 포인터를 화면 상단으로 가져가 주소 바와 탭에 액세스합니다.
보안 문제로 인해, 브라우저는 마우스 클릭이나 키 누름과 같이 사용자가 시작한 이벤트에 직접 반응하는 경우에만 커서 잠금 및 전체 화면 모드를 허용합니다. Unity는 분리 이벤트와 렌더링 루프를 지원하지 않기 때문에, Unity 스크립트에서 발생한 전체 화면이나 커서 잠금 요청은 해당 요청을 트리거한 이벤트에 대한 직접적인 반응으로 브라우저가 더 이상 인지하지 않을 때까지 이벤트 처리를 지연시킵니다. 따라서 Unity는 커서 잠금 또는 전체 화면 요청을 트리거한 이벤트 대신 사용자가 시작하는 다음 이벤트에서 요청을 트리거합니다.
커서 잠금 또는 전체 화면 모드를 허용 가능한 결과로 활성화하려면 마우스/키 눌림 해제 이벤트 대신 마우스/키 눌림 이벤트를 사용하여 적절한 요청을 트리거하도록 프로젝트를 설정합니다. 이렇게 하면 지연된 요청이 이전에 사용자가 시작한 이벤트가 아니면 해당 마우스/키 눌림 해제 이벤트를 통해 트리거되도록 할 수 있습니다.
또한 Unity의 UI.Button 컴포넌트를 사용하면 OnPointerDown
메서드를 오버라이드하는 Button
의 서브클래스를 만들어 원하는 동작을 구현할 수 있습니다.
참고: 전체 화면 모드로 전환하거나 커서를 잠그기 전에 일부 브라우저에서 알림 메시지를 표시하거나 사용자에게 허가를 요청할 수 있습니다.