【Unity(C#)】OculusQuestのハンドトラッキングでボタンを押す
Oculus Integration
この記事内ではOculus Integration
の使用を前提に話を進めていきます。
Oculus Integration
内のコード自体は
私レベルでは理解不能なことをいっぱいやっていますが、
パーツを部分的に使用すれば本当に使いやすくなっているのが
今回使ってみて改めてよくわかりました。
ありがとうOculus。
(贅沢言えばハンドジェスチャーのステートとかほしい、、、)
デモ
作成中のお絵描きアプリでRedo,Undo機能の呼び出しにボタンを使いました。
準備
下記リンクを参考に、デモシーンからボタンをパクってきていろいろ設定します。
【参考リンク】:Oculus Quest ハンドトラッキングを試してみた
コード
一部を抜粋して貼ります。
[SerializeField] private ButtonController _redoButtonObj, _undoButtonObj, _paintButtonObj;
private HpPaintFunctionState _paintFunctionState;
private void Start()
{
//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>
private void modeChangeToRedo(InteractableStateArgs obj)
{
if (obj.NewInteractableState == InteractableState.ActionState)
{
_paintFunctionState = HpPaintFunctionState.Redo;
}
}
/// <summary>
/// Undoモードに変更
/// </summary>
/// <param name="obj">リスナー登録時に必要な引数</param>
private void modeChangeToUndo(InteractableStateArgs obj)
{
if (obj.NewInteractableState == InteractableState.ActionState)
{
_paintFunctionState = HpPaintFunctionState.Undo;
}
}
/// <summary>
/// Paintモードに変更
/// </summary>
/// <param name="obj">リスナー登録時に必要な引数</param>
private void modeChangeToPaint(InteractableStateArgs obj)
{
if (obj.NewInteractableState == InteractableState.ActionState)
{
_paintFunctionState = HpPaintFunctionState.Paint;
}
}
InteractableState.ActionState
という状態になっていれば
各機能(Redo,Undo,Paint)へ切り替わる という関数を
それぞれのボタンのステートが切り替わった際に実行されるイベントとして登録しています。
まとめ
・ButtonController
のInteractableStateChanged
に
イベントを登録することでステート変化時に任意の処理が実行可能。
・登録するイベントにはInteractableStateArgs
を引数で渡して
どのステートからどのステートに移行したかに応じた処理が書ける。
Author And Source
この問題について(【Unity(C#)】OculusQuestのハンドトラッキングでボタンを押す), 我々は、より多くの情報をここで見つけました https://qiita.com/OKsaiyowa/items/5db804a87f6a6a94a037著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .