Oculus Integration
この記事内ではOculus Integrationの使用を前提に話を進めていきます。
Oculus Integration内のコード自体は
私レベルでは理解不能なことをいっぱいやっていますが、
パーツを部分的に使用すれば本当に使いやすくなっているのが
今回使ってみて改めてよくわかりました。
ありがとうOculus。
(贅沢言えばハンドジェスチャーのステートとかほしい、、、)
デモ
作成中のお絵描きアプリでRedo,Undo機能の呼び出しにボタンを使いました。
準備
下記リンクを参考に、デモシーンからボタンをパクってきていろいろ設定します。
【参考リンク】:Oculus Quest ハンドトラッキングを試してみた
コード
一部を抜粋して貼ります。
[SerializeField]privateButtonController_redoButtonObj,_undoButtonObj,_paintButtonObj;privateHpPaintFunctionState_paintFunctionState;privatevoidStart(){//Redoボタンが押されたらFunctionステートを変更_redoButtonObj.InteractableStateChanged.AddListener(modeChangeToRedo);//Undoボタンが押されたらFunctionステートを変更_undoButtonObj.InteractableStateChanged.AddListener(modeChangeToUndo);//Paintボタンが押されたらFunctionステートを変更_paintButtonObj.InteractableStateChanged.AddListener(modeChangeToPaint);}/// <summary>/// Redoモードに変更/// </summary>/// <param name="obj">リスナー登録時に必要な引数</param>privatevoidmodeChangeToRedo(InteractableStateArgsobj){if(obj.NewInteractableState==InteractableState.ActionState){_paintFunctionState=HpPaintFunctionState.Redo;}}/// <summary>/// Undoモードに変更/// </summary>/// <param name="obj">リスナー登録時に必要な引数</param>privatevoidmodeChangeToUndo(InteractableStateArgsobj){if(obj.NewInteractableState==InteractableState.ActionState){_paintFunctionState=HpPaintFunctionState.Undo;}}/// <summary>/// Paintモードに変更/// </summary>/// <param name="obj">リスナー登録時に必要な引数</param>privatevoidmodeChangeToPaint(InteractableStateArgsobj){if(obj.NewInteractableState==InteractableState.ActionState){_paintFunctionState=HpPaintFunctionState.Paint;}}InteractableState.ActionStateという状態になっていれば
各機能(Redo,Undo,Paint)へ切り替わるという関数を
それぞれのボタンのステートが切り替わった際に実行されるイベントとして登録しています。
まとめ
・ButtonControllerのInteractableStateChangedに
イベントを登録することでステート変化時に任意の処理が実行可能。
・登録するイベントにはInteractableStateArgsを引数で渡して
どのステートからどのステートに移行したかに応じた処理が書ける。
