ウェブでの入力
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 要素がキーボード入力を受け取るようにするには、 |
| Esc キー | Safari などの一部のブラウザーでは、Esc キーを使用して全画面モードに切り替える機能がブロックされます。これは、Esc キーがウェブ環境で保護されているためです。Google Chrome などの他のブラウザーでは、予期しない動作をする場合があります。ブラウザーが全画面モードの場合、ユーザーが全画面モードを終了するために使用できるのは Esc キーのみです。ブラウザーの種類によっては、Esc キーを押しても、必ずしもブラウザーからアプリケーションに移動するためのイベントがトリガーされないことがあります。 |
| TextMeshPro (TMP とも呼ばれます) 入力フィールドの |
モバイルセンサーのサポート
タッチサポートのあるブラウザーとモバイルデバイスの場合、Unity ウェブは以下のセンサーをサポートします。
- 加速度センサーと Input.acceleration
- LinearAcceleration と Gyroscope.userAcceleration
- ジャイロスコープと Gyroscope.rotationRate
- 重力と Gyroscope.gravity
- Attitude と Gyroscope.attitude
- Input System パッケージもこれらのセンサーをサポートします。
重要: ブラウザーでは、センサー入力は安全なコンテキストでのみ許可されます。つまり、HTTPS を介してページを提供する必要があります。唯一の例外は で、開発時に使用できます。
http://localhostカーソルロックのサポート
Unity ウェブプラットフォームは、HTML5 API を使用するカーソルロックをサポートしています。カーソルロックを使用して、マウスカーソルをゲームウィンドウの中央にロックします。カーソルは、ロックされている場合は Unity では非表示となり、マウスを動かしても移動しません。これは、一般的にマウスカーソルを使用してプレイヤーの角度の向きをコントロールできる、一人称視点のゲームで特に役立ちます。
Element.requestPointerLock注意: カーソルロックのブラウザーサポートはさまざまであるため、要素: requestPointerLock() メソッドについては Mozilla のドキュメントを参照してください。
カーソルロックをアクティベートする
カーソルをロックするには、 プロパティを使用します。例えば以下のコードは、ユーザーがマウスの左ボタンをクリックしたときにカーソルをロック状態に切り替えます。
Cursor.lockStatevoid Update(){ if (Input.GetMouseButtonDown(0)) { Cursor.lockState = CursorLockMode.Locked; }}
カーソルロックは、ユーザーの操作によってアクティベートする必要があります。詳細については、全画面モードとカーソルロックのその他の考慮事項を参照してください。
カーソルロックを無効にする
Esc キーを押すとカーソルロックを解除できます。
スティッキーカーソルロック
stickyCursorLockstickyCursorLockCursor.lockStateしたがって、 を に設定すると、Unity キャンバス HTML 要素によってカーソルのロックが解除されても、 は 状態のままになります。
WebGLInput._stickyCursorLocktrueCursor.lockStateCursorLockMode.LockedWebGLInput._stickyCursorLockfalse-
はブラウザーのカーソルロック状態と同期されたままになります。
Cursor.lockState -
ユーザーが Esc キーを押してキャンバスのカーソルロックをキャンセルすると、が
Cursor.lockStateに変わります。CursorLockMode.None
注意: ウェブでは、 はデフォルトで に設定されています。
stickyCursorLocktrue全画面モード
ゲーム内で全画面モードを使用して、以下を行います。
-
画面全体をゲームに使用します。
-
アドレスバーやタブなどブラウザーのユーザーインターフェース (UI) 要素を非表示にします。
-
タイトルバーやツールバーなど Unity Player の UI 要素を非表示にします。
Unity ウェブプラットフォームは、HTML5 API の を使用する全画面モードをサポートします。
Element.requestFullscreen注意: 全画面モードのブラウザーサポートはさまざまであるため、要素: requestFullscreen() メソッドについては Mozilla ドキュメントを参照してください。
ウェブでの全画面モードをアクティベートする
全画面モードを有効にするには、 プロパティを使用します。例えば、以下のコードは、ユーザーが F キーを押すと、ゲームを全画面モードに切り替えます。
Screen.fullScreenvoid Update(){ if (Input.GetKeyDown(KeyCode.F)) { Screen.fullScreen = true; }}
注意: プロパティはデフォルトで に設定されています。
Screen.fullScreenfalse全画面モードはユーザーの操作によってアクティベートする必要があります。詳細については、全画面モードとカーソルロックのその他の考慮事項を参照してください。
全画面モードを終了します。
全画面モードを終了するには、もう一度 Esc キーを押すか、画面上部にマウスポインターを置いてアドレスバーとタブにアクセスします。
全画面モードとカーソルロックのその他の考慮事項
セキュリティ上の理由から、ブラウザーでは、マウスクリックやキーの押下などのユーザーが開始したイベントの後にのみカーソルをロックし、全画面モードを有効にできます。
Unity は個別のイベントとレンダリングループをサポートしないため、Unity スクリプティングから送信された全画面リクエストまたはカーソルロックリクエストが、それをトリガーしたイベントへの直接の反応としてブラウザーに確認されなくなるまで、イベント処理を保留します。
したがって、Unity は、カーソルロックや全画面のリクエストをトリガーするイベントではなく、ユーザーが開始した次のイベントでリクエストをトリガーします。
カーソルロックまたは全画面モードを有効にしてより良い結果を得るには、マウス/キーアップイベントの代わりに、マウス/キーダウンイベントを使用して、応答をトリガーします。こうすることで、ユーザーが以前に開始したイベントによってディファードリクエストが発生していない場合でも、対応するマウス/キーアップイベントによってディファードリクエストが必ずトリガーされるようにできます。
Unity の UI.Button コンポーネントを使用して、 メソッドをオーバーライドする のサブクラスを作成することで、目的の動作を実現することもできます。
OnPointerDownButton注意: ブラウザーによっては、全画面モードに入る前やカーソルをロックする前に、ユーザーに通知メッセージや権限付与のプロンプトを表示する場合があります。