Unity + Oculus Integrationを使ってコントローラやハンドトラッキングでボタンを押すまでの手順をStep by stepで説明します。
やっていることはOculus Integrationのサンプルシーン「PokeExamples」と同様ですが、これを0から組み立ててみてSceneを構成するコンポーネントの役割への理解を深めようという趣旨の記事です。
ボタンを押す動作はOculus IntegrationのPoke Interaction | Oculus Developersという機能を使って実装します。
Pokeには「つつく」という意味があります。
以下のステップで実装を進めていきます。
- 無地のボタンの作成
- ボタンの大きさ・高さの調整
- ラベル付きボタンの作成
- 好きな形のボタンを作成
- Canvas上にボタンを作成(本記事)
2022/11/7: githubにプロジェクトを共有しました。
github.com
環境構築・プロジェクト作成
環境構築とプロジェクト作成の手順については、こちらの記事を参照してください。
利用するコンポーネント
今回の記事で新たに使用するコンポーネントは以下の通りです。
PointableCanvas
PokeInteractableのIPointableイベントをUnityのCanvasイベントに変換するためのコンポーネントです。
詳細は以下を参照してください。
Unity Canvas Integration | Oculus Developers
PointableCanvasModule
シーンに存在するPointableCanvasのイベント伝達を行うコンポーネントです。
PointableCanvasを利用するシーンには必ず一つ配置する必要があります。
詳細は以下を参照してください。
Unity Canvas Integration | Oculus Developers
PointableCanvasUnityEventWrapper
PointableCanvas上に存在するUnity Selectable(ボタン、トグルなど)のイベントを追跡します。
本記事では使っていないですが、ボタンを押したときに音を鳴らすなどの用途に使います。
詳細は以下を参照してください。
Event Wrappers | Oculus Developers
Scene構築手順
Sceneの作成
空のシーンを作成します。(Assets/Sandbox/HandPoke/Scenes/PokeScene4)
途中までは以下の記事のPokeScene3と同様に進めます。
(PokeScene3が作成済みならコピーしてリネームすれば良いです)
PointableCanvasModuleを配置する
シーンのルートに空のGameObjectを作成してPointableCanvasModuleにリネームします。
上記オブジェクトにPointableCanvasModuleのスクリプトをアタッチします。
このとき、EventSystemも自動的にアタッチされます。
Canvasの配置・設定を行う
ワールド空間上にPoke可能なCanvasを配置・設定します。
まずは、Interactables配下に以下のようなGameObject階層を作成します。
Interactables +- FlatUnityCanvas(空のGameObjectを作成してリネーム) +- ProximityField(空のGameObjectを作成してリネーム) +- UnityCanvas(UI -> Canvasを作成)
UnityCanvasの設定
UnityCanvasの設定を行っていきます。
- UnityCanvasのRenderModeを「World Space」に変更します。
- UnityCanvasにImageを追加して、適当な背景を設定します。(本記事ではAssets/Oculus/Interaction/Samples/Textures/RoundCorners_12ptを使用)
- UnityCanvasにPointablePlaneのコンポーネントを追加します。
ProximityFieldの設定
ProximityFieldの設定を行っていきます。
FlatUnityCanvasの設定
FlatUnityCanvasの設定を行っていきます。
- FlatUnityCanvasにPokeInteractableのコンポーネントを追加します。
- FlatUnityCanvasにPointableCanvasのコンポーネントを追加します。
- FlatUnityCanvasにPointableCanvasEventWrapperのコンポーネントを追加します。
- 1のコンポーネントのPointable ElementにFlatUnityCanvasを設定します。
- 1のコンポーネントのProximity FieldにProximityFieldを設定します。
- 1のコンポーネントのSurfaceにUnityCanvasを設定します。
- 2のコンポーネントのCanvasにUnityCanvasを設定します。
- 3のコンポーネントのPointable CanvasにFlatUnityCanvasを設定します。
※今回の記事ではPointableCanvasUnityEventWrapperのイベントに何も紐づけていないので3, 8は省略しても動きます。
Canvasの配置とサイズを整える
FlatUnityCanvasの位置やUnityCanvasのスケールなどを調節してCanvasの配置とサイズを調整します。
また、ProximityFieldのスケールをUnityCanvasと同じ大きさになるように調整します。
Canvas配下にボタンなどを配置する
UnityCanvas配下にボタンなどを配置していきます。
ここから先の手順はuGUIでGUIを構築していく手順と同じなので割愛します。
動作確認
参考サイト
公式:Oculusスタートガイド(Unity)
Get Started with Oculus in Unity | Oculus Developers
公式:入力データの概要
※サンプルシーンのInteractionRigOVR~prefab配下のコンポーネント群が何をやっているのか、ざっくり理解するための最適なドキュメントだと思います。
Input Data Overview | Oculus Developers