カーソルロック ( Cursor.lockState 使用) とフルスクリーンモード ( Screen.fullScreen 使用) はともに、該当する HTML5 API (Element.requestPointerLock と Element.requestFullscreen) を利用して実装された Unity WebGL によってサポートされています。これらは、Firefox と Chrome でサポートされていますが、Safari では現在使用できません。
セキュリティ上の理由で、ブラウザはユーザーが発生させたイベント (マウスをクリックしたり、キーボードのキーを押すことなど) に対して、直接のレスポンスでカーソルをロックしたりフルスクリーンにすることしかできません。残念なことに、Unity がイベントを処理する方法 (Unity には独立したイベントとレンダリングループがありません) が原因で、Unity は、ある時点までイベント処理を保留しておきます。ブラウザに対して Unity スクリプトがフルスクリーンやカーソルロックのリクエストを発するのを終え、リクエストをトリガーしたイベントに直接レスポンスできるようになった時点で、次に ユーザーが発生させたイベントをトリガーします。
この作業をうまく行うためには、フルスクリーンやカーソルロックを (普段使用するマウス、または、キーアップイベントと逆の) マウス、または、キー ダウン イベントでトリガーします。こうすることにより、ユーザーが発生させたイベントリクエストが優先され、ユーザーがマウス、または、キーをリリースしたときに、遅延されていたリクエストがトリガーされます。
Unity の UI.Button コンポーネントを使用する場合は、Button のサブクラスを作成して OnPointerDown メソッドをオーバーライドすることにより、期待する動作を 実現できます。
フルスクリーンモード、または、カーソルをロックする前に、通知や許可を求めるメッセージがブラウザに表示されることがあります。