Appearance
改変ガイド
このプロジェクトは、SteamVR 用アプリの土台として他のプロジェクトに流用される前提で作ってあります。どこを触れば何が変わるかをまとめます。
役割の分担
| 部品 | 役割 | 削れるか |
|---|---|---|
| DashboardCanvas | ダッシュボードへの表示と、レーザー入力の受け取り | 本体。これが中心 |
| WindowMirror | ウィンドウへのミラー表示と、マウス入力 | 削除可。ダッシュボード専用になる |
| OverlayPointerInjector | ポインタ入力を UI イベントに変換する共通処理 | レーザーとマウスの両方が使う |
| OverlayInputModule | 選択中の UI に物理キーボード入力を届ける | EventSystem に必要 |
| DashboardKeyboard | SteamVR キーボードでの InputField 編集 | VR キーボードを使わないなら無効化可 |
| OpenVRManager | OpenVR の起動と終了 | 自動生成。手で置けば設定を変えられる |
よくある改変
クリック後に独自の処理を足す
DashboardCanvas を継承して OnUIClicked を上書きします。レーザーのクリックが UI に成立するたびに呼ばれます。
csharp
public class MyDashboard : DashboardCanvas
{
protected override void OnUIClicked(GameObject clicked)
{
base.OnUIClicked(clicked); // InputField → VR キーボードの既定動作を残す場合
Debug.Log("クリック: " + clicked.name);
}
}タブのアイコンを変える
- 手軽に: StreamingAssets に画像を置いて Thumbnail File Name に指定
- コードで:
CreateThumbnailを上書き
スクロールやドラッグに対応する
ProcessOverlayEvent を上書きしてイベントを追加処理し、OverlayPointerInjector に相当するイベント配送を足します。SteamVR からはスクロールイベントも届いているので、受け取って ScrollRect に流す拡張が可能です。
TextMeshPro の InputField に対応する
既定では uGUI 標準の InputField だけが VR キーボードの対象です。OnUIClicked を上書きして TMP_InputField を検出し、DashboardKeyboard と同じ流れで開いてください(DashboardKeyboard は InputField 前提なので、TMP 用に書き換えたコピーを作るのが手っ取り早いです)。
ダッシュボード以外のオーバーレイにする
このテンプレートはダッシュボード専用です。手首に付ける・空間に固定するなどの通常オーバーレイが必要な場合は、姉妹プロジェクトの SteamVRCanvasOverlay(こちらは追従モード付き)を参照してください。
触るときの注意
- OpenVR の呼び出し順: オーバーレイの破棄は OpenVR の終了より先、という順序をコンポーネントのライフサイクルで保証しています。OnApplicationQuit / OnDestroy の役割分担を崩さないでください
- 上下反転: 描画方式が DirectX のとき、テクスチャは上下反転して送り、マウスの Y 座標は逆補正しています。片方だけ変えると上下が逆になったりクリック位置がずれたりします
- EventSystem: StandaloneInputModule に戻すと、実マウスが見えない UI を誤操作する問題が再発します。OverlayInputModule のままにしてください
- ポインタ ID: レーザーは 1、マウスは 2 で分けています。入力経路を増やす場合は別の ID を割り当ててください