入力処理
NaninovelはUnityの Input System を使用して、以下のアクションをリッスンします。
| 名前 | キーボード+マウス | ゲームパッド | 説明 |
|---|---|---|---|
| Submit | Enter | Button South | プロンプトの受け入れや入力フォームの送信などの一般的な確認の意図。 |
| Cancel | Escape | Button East | プロンプトの拒否やメニューの終了などの一般的な拒否の意図。 |
| Delete | Delete | Button North | 選択したセーブスロットの削除などの一般的な削除の意図。 |
| Navigate | 矢印キー | D-Pad, Left Stick | 一列に並んだセーブスロットの選択などの一般的なナビゲーションの意図。 |
| Scroll | スクロールホイール, Page Up/Down | Right Stick | バックログのスクロールなどの一般的なスクロールの意図。 |
| Page | Left Trigger <-> Right Trigger | セーブ・ロードメニューでのページ変更などの一般的なページネーションの意図。 | |
| Tab | Left Bumper <-> Right Bumper | 設定メニューでのタブ変更などの一般的なタブ変更の意図。 | |
| Continue | Enter, スクロールホイール (Y+) | Button South | スクリプトの再生を継続するために、入力待ちモード(メッセージが表示されたときにアクティブ化)を無効にします。 |
| Pause | Backspace | Start | ポーズUIを表示します。 |
| Skip | Ctrl | Button West | アクションがアクティブ(ボタンが押されている)な間、スキップモード(早送り)を有効にします。 |
| ToggleSkip | Tab | Right Stick Press | スキップモードを切り替えます(無効な場合は永続的に有効にし、逆も同様)。 |
| SkipMovie | Escape | Button East | 現在再生中の ムービー をスキップ(キャンセル)します。 |
| AutoPlay | A | Button East | 設定された遅延後に自動的に入力待ちモードが無効になる オートプレイモード を切り替えます。 |
| ToggleUI | Space | Button North | UIレイヤー全体の 可視性(表示/非表示)を切り替えます。 |
| ShowBacklog | L | Right Bumper | バックログUI の可視性を切り替えます。 |
| Rollback | B, スクロールホイール (Y-) | Left Bumper | スクリプトを逆方向に巻き戻します。 |
| CameraLook | マウスデルタ | Right Stick | @look モード中にカメラを移動します。 |
| ToggleConsole | ` | 開発コンソールを切り替えます。 |
入力のカスタマイズ
Naninovel -> Configuration -> Input コンテキストメニューでカスタム Input Actions アセットを割り当てることで、デフォルトのアクションを構成し、新しいアクションを追加できます。エンジンがそれらを検出できるように、関連するアクションを Naninovel マップの下に保持してください。デフォルトの入力アクションアセットは Create -> Naninovel -> Input -> Controls アセットメニューで作成できます。独自のものを作成する際の参考にしてください。
EXAMPLE
インベントリUIを切り替えるためのカスタム入力バインディングを追加する例は、インベントリサンプル にあります。具体的には、カスタム "ToggleInventory" アクションは Scripts/Runtime/Inventory/UI/InventoryUI.cs ランタイムスクリプトで使用されます。別の例 — 入力リバインドサンプル — は、プレイヤーがデフォルトのコントロールを変更できるようにするリバインドUIを実装しています。
カスタム入力アクションを使用する場合、同じ構成メニューで割り当てられたカスタム Event System も使用し、イベントシステムプレハブにアタッチされたInput System UI Input Moduleコンポーネントの Actions Asset プロパティにカスタム入力アクションアセットを割り当てることをお勧めします。これは、さまざまなUI関連機能が正しく動作するために必要です。Create -> Naninovel -> Input -> Event System を介して、Naninovelで動作するデフォルトのイベントシステムプレハブを作成できます。
TIP
修飾子付きのアクション(Tab や Page など)が、修飾子なしで同じバインディングを使用する他のアクション(Navigate など)をトリガーしないようにするには、Input System Packageカテゴリのプロジェクト設定で Enable Input Consumption オプションを有効にしてください。
入力モードへの適応
デフォルトでは、すべての組み込みUIは、最後にアクティブだった入力デバイスに基づいて、現在の入力モード(マウスとキーボード、ゲームパッド、またはタッチ)に適応します。たとえば、プレイヤーがマウスを使用してゲームを操作しているが、ある時点でゲームパッドのボタンを押すと、UIはゲームパッド入力モードに切り替わります。
入力構成メニューの Detect Input Mode オプションのチェックを外すことで、この機能を無効にできます。
エンジンの初期化後にアクティブになるデフォルトの入力モードは、ターゲットプラットフォームに基づいて入力マネージャーによって評価されます。
- コンソール -> Gamepad
- モバイル -> Touch
- その他 -> Mouse
マウス
このモードでは、UIはすべての基礎となる Selectable オブジェクトでのナビゲーションを無効にします。これは、マウスでクリックしたときにボタンが「選択済み」状態に移行するのを防ぐためです。
さらに、Custom UI(または派生)コンポーネントで Button Controls オブジェクトが割り当てられている場合、それは有効になりますが、Keyboard Controls と Gamepad Controls は無効になります。これにより、マウス入力モードに固有のボタン(「閉じる」ボタンなど)とコントロールの凡例(ゲームパッドのボタンラベルなど)を、関連する入力モードがアクティブな場合にのみ表示できます。
ゲームパッド
ゲームパッドモードでは、ナビゲーションが再度有効になり(マウスモードで無効になっていた場合)、プレイヤーはDパッドまたは左スティックで選択可能アイテムをナビゲートできるようになります。
割り当てられると、Gamepad Controls の凡例が有効になり、その他(ボタンとキーボード)は無効になります。
TIP
ゲームパッドの凡例アイコンをカスタマイズしたい場合は、Xeluの無料コントローラープロンプト をチェックしてください。
さらに、ゲームパッドモードでモーダルUIが表示されている間、フォーカスが以前に選択されたオブジェクトにスタックするのを防ぐために、内部の最初の選択可能アイテムがフォーカスされます。この動作は、カスタムUIまたは派生コンポーネントの Focus Object を明示的に割り当てることで変更できます。この場合、UIはフォーカスオブジェクトを自動的に見つけようとしません。
キーボード
キーボードナビゲーション(矢印)キーが押されるとアクティブになります。他のキーはこのモードをアクティブにしません。なぜなら、それらはマウスモードでホットキーとして使用されるからです。
それ以外の場合は、ゲームパッドモードと同じように機能しますが、表示されるコントロールの凡例が異なります。
タッチ
タッチモードの場合、Naninovelはデフォルトで管理対象UIに特別な変更を加えません。ただし、CustomUI コンポーネントの HandleInputModeChanged メソッドをオーバーライドすることで、タッチ固有の動作を追加できます。
特定のUIの入力モードへの適応機能を無効にするには、Custom UI(または派生)コンポーネントの Adapt To Input Mode オプションのチェックを外します。機能をグローバルに無効にするには、入力構成の Detect Input Mode オプションを使用します。
カスタム入力バックエンド
Naninovelでは、Unityの組み込み入力システムの代わりに、Rewired などのカスタム入力ソリューションを使用できます。エンジンは、InputManager クラス内のいくつかの仮想メソッドでのみデフォルトの入力システムAPIを使用し、参照は条件付きでコンパイルされるため、デフォルトの入力モジュールを削除してもコンパイルエラーは発生しません。
エンジンにカスタム入力ソリューションを使用させるには、InputManager エンジンサービスを オーバーライド し、必要な仮想メソッドをオーバーライドします。