Skip to content

改変ガイド

このプロジェクトは、SteamVR 用アプリの土台として他のプロジェクトに流用される前提で作ってあります。どこを触れば何が変わるかをまとめます。

役割の分担

部品役割削れるか
DashboardCanvasダッシュボードへの表示と、レーザー入力の受け取り本体。これが中心
WindowMirrorウィンドウへのミラー表示と、マウス入力削除可。ダッシュボード専用になる
OverlayPointerInjectorポインタ入力を UI イベントに変換する共通処理レーザーとマウスの両方が使う
OverlayInputModule選択中の UI に物理キーボード入力を届けるEventSystem に必要
DashboardKeyboardSteamVR キーボードでの InputField 編集VR キーボードを使わないなら無効化可
OpenVRManagerOpenVR の起動と終了自動生成。手で置けば設定を変えられる

よくある改変

クリック後に独自の処理を足す

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 を割り当ててください