ドキュメント

Unity Engine

Unity Engine

ウェブでの入力

The various input types that Unity Web supports.
読み終わるまでの所要時間 19 分最終更新 1ヶ月前

Unity ウェブは、ゲームパッド、ジョイスティック、タッチスクリーン、キーボード、動作センサーなど、さまざまなデバイスからのさまざまなタイプの入力をサポートしています。

ゲームパッドとジョイスティックのサポート

ウェブはゲームパッドでの以下の入力をサポートします。
ウェブは HTML5 Gamepad API をサポートするブラウザー用ジョイスティックもサポートします。
一部のブラウザーでは、アプリケーションにフォーカスがある間にユーザーがデバイスを操作した後にのみ、入力デバイスにアクセスできます。これは、ブラウザーフィンガープリントの目的で接続されたデバイスをユーザーが使用できないようにするタイプのセキュリティ対策です。そのため、Input.GetJoystickNames() を呼び出して接続されたデバイスを確認する前に、アプリケーションからユーザーに対してゲームパッド/ジョイスティックのボタンを押すように指示していることを確認してください。

コントローラーをマップする

旧 Input System のウェブゲームコントローラーマッピングは、W3 仕様に準拠しています。この仕様では、ボタンマッピングのレイアウトは次のようになります。

ボタン

説明

buttons[0]右側のクラスタの下部ボタン = バツ (X)
buttons[1]右側のクラスタの右ボタン = 丸
buttons[2]右側のクラスタの左ボタン = 正方形
buttons[3]右側のクラスタの上部ボタン = 三角形
注意: ウェブは W3 仕様に準拠しているため、他のプラットフォームと一貫性がない可能性があります。また、Windows とウェブなど、複数のプラットフォームを同時にターゲットにする場合は、異なるアプローチが必要です。詳細については、再マッピングに関する W3 ドキュメントを参照してください。

タッチサポート

Unity ウェブは、Input.touches やその他の関連 API を、タッチサポートのあるブラウザーやデバイスに実装します。デフォルトでは、ユーザーが UI の入力フィールドにテキストを入力するためのソフトキーボードが、モバイルデバイスの画面に表示されます。この動作を無効にするには、WebGLInput.mobileKeyboardSupport プロパティを使用します。

キーボード入力とフォーカスの操作

デフォルトでは、Unity ウェブはウェブキャンバスにフォーカスがあるかどうかにかかわらず、ウェブページが受け取るすべてのキーボード入力を処理します。これにより、ユーザーはウェブキャンバスをクリックしなくてもキーボードベースのアプリケーションを使用できます。
以下の注意は、後述のとおり特定のキーボード入力に適用されます。

キーボード入力の動作

説明

HTML 要素 (テキストフィールドなど)キーボード入力を受け取る HTML 要素 (テキストフィールドなど) をウェブページに導入すると、エラーが発生する可能性があります。Unity では、ページの残りの部分が入力イベントを受け取る前に、それらが消費されます。
HTML 要素がキーボード入力を受け取るようにするには、
WebGLInput.captureAllKeyboardInput
を
false
に設定します。こうすることで、アプリケーションはウェブキャンバスにフォーカスがある場合にのみ、入力を受け取ります。
Esc キーSafari などの一部のブラウザーでは、Esc キーを使用して全画面モードに切り替える機能がブロックされます。これは、Esc キーがウェブ環境で保護されているためです。Google Chrome などの他のブラウザーでは、予期しない動作をする場合があります。ブラウザーが全画面モードの場合、ユーザーが全画面モードを終了するために使用できるのは Esc キーのみです。ブラウザーの種類によっては、Esc キーを押しても、必ずしもブラウザーからアプリケーションに移動するためのイベントがトリガーされないことがあります。
HideMobileInput
TextMeshPro (TMP とも呼ばれます) 入力フィールドの
HideMobileInput
オプションは、ウェブプラットフォームでは効果がありません。このオプションに効果がないのは、ブラウザーで仮想キーボードをトリガーするにはテキスト入力フィールドが必要となるためです。ウェブプラットフォームは、Unity Player がテキストの入力を予期したときに仮想キーボードをトリガーするために、テキスト入力フィールドをインスタンス化します。テキスト入力フィールドは、他のプラットフォームと同様に仮想キーボードの上に表示されます。仮想キーボードはモバイルテキスト入力フィールドに依存しているため、ウェブプラットフォームで非表示にすることはできません。

モバイルセンサーのサポート

タッチサポートのあるブラウザーとモバイルデバイスの場合、Unity ウェブは以下のセンサーをサポートします。
重要: ブラウザーでは、センサー入力は安全なコンテキストでのみ許可されます。つまり、HTTPS を介してページを提供する必要があります。唯一の例外は
http://localhost
で、開発時に使用できます。

カーソルロックのサポート

Unity ウェブプラットフォームは、HTML5 API
Element.requestPointerLock
を使用するカーソルロックをサポートしています。カーソルロックを使用して、マウスカーソルをゲームウィンドウの中央にロックします。カーソルは、ロックされている場合は Unity では非表示となり、マウスを動かしても移動しません。これは、一般的にマウスカーソルを使用してプレイヤーの角度の向きをコントロールできる、一人称視点のゲームで特に役立ちます。
注意: カーソルロックのブラウザーサポートはさまざまであるため、要素: requestPointerLock() メソッドについては Mozilla のドキュメントを参照してください。

カーソルロックをアクティベートする

カーソルをロックするには、
Cursor.lockState
プロパティを使用します。例えば以下のコードは、ユーザーがマウスの左ボタンをクリックしたときにカーソルをロック状態に切り替えます。
void Update(){ if (Input.GetMouseButtonDown(0)) { Cursor.lockState = CursorLockMode.Locked; }}
カーソルロックは、ユーザーの操作によってアクティベートする必要があります。詳細については、全画面モードとカーソルロックのその他の考慮事項を参照してください。

カーソルロックを無効にする

Esc キーを押すとカーソルロックを解除できます。

スティッキーカーソルロック

stickyCursorLock
プロパティは、一人称視点でのゲームでよく使用されます。これは、ブラウザーの動作に関係なくカーソルロックモードの維持に役立つためです。
stickyCursorLock
を使用すると、ブラウザーが Unity キャンバスからカーソルロックを (通常は Esc キーを使用して) 解除した場合でも、
Cursor.lockState
状態が必ず永続化されます。この場合、次にキャンバスにフォーカスが戻ったときにカーソルが再びロックされます。
したがって、
WebGLInput._stickyCursorLock
を
true
に設定すると、Unity キャンバス HTML 要素によってカーソルのロックが解除されても、
Cursor.lockState
は
CursorLockMode.Locked
状態のままになります。
WebGLInput._stickyCursorLock
を
false
に設定すると、以下が発生します。
  • Cursor.lockState
    はブラウザーのカーソルロック状態と同期されたままになります。
  • ユーザーが Esc キーを押してキャンバスのカーソルロックをキャンセルすると、
    Cursor.lockState
    が
    CursorLockMode.None
    に変わります。
注意: ウェブでは、
stickyCursorLock
はデフォルトで
true
に設定されています。

全画面モード

ゲーム内で全画面モードを使用して、以下を行います。
  • 画面全体をゲームに使用します。
  • アドレスバーやタブなどブラウザーのユーザーインターフェース (UI) 要素を非表示にします。
  • タイトルバーやツールバーなど Unity Player の UI 要素を非表示にします。
Unity ウェブプラットフォームは、HTML5 API の
Element.requestFullscreen
を使用する全画面モードをサポートします。
注意: 全画面モードのブラウザーサポートはさまざまであるため、要素: requestFullscreen() メソッドについては Mozilla ドキュメントを参照してください。

ウェブでの全画面モードをアクティベートする

全画面モードを有効にするには、
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
のサブクラスを作成することで、目的の動作を実現することもできます。
注意: ブラウザーによっては、全画面モードに入る前やカーソルをロックする前に、ユーザーに通知メッセージや権限付与のプロンプトを表示する場合があります。

追加リソース