夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Hololens用のオリジナルUIを作成する。 ~スイッチレバー その④~  リセット機能 検知範囲の変数化

MRTKを基にHoloLensで使用できるオリジナルのUIを作成します。

過去にSFチックのUIを作成していました。 今回はシリーズ続編としての第三回です。

〇第一弾

redhologerbera.hatenablog.com

〇第二弾

redhologerbera.hatenablog.com

本シリーズで作成したものは以下でMITライセンスで公開しています。(自由に使ってください)

github.com

今回第三弾はレバー(stick)型のUIを作っています。前回まででユーザーがレバーを『握ったことの検知』、『上下左右の動きの検知』の二つの機能を実装しました。

〇ターゲットのリセット

昨日まででターゲットをつかんで上下左右に動かすことで動きを検知してイベントを発火させるところまでできました。

redhologerbera.hatenablog.com

f:id:Holomoto-Sumire:20200610094117g:plain

しかし現状のままでは入力を検知してつかむのをやめてもリセット機能がないためずっと移動したままの位置に居続けてしまいます。 これでは使いづらいためリセット機能を付けます。

    public void leverHoldEnd()
    {
        Debug.Log("leverActionEnd");
        _ActionEnebled = false;
        Debug.Log("PointerReset");
        this.gameObject.transform.localPosition = new Vector3(0, 0, 0);//追加
    }

レバーをつかむことをやめたときに発火する関数にローカル座標を0にもどす処理を加えました。

f:id:Holomoto-Sumire:20200610095203g:plain

これで手を離したら(握ることをやめたら)リセットされるようになりました。

〇検知最小範囲の設定

   ...
 void Update{
    …
        dpos = this.gameObject.transform.localPosition;

        float yaxisparm = System.Math.Abs(dpos.y);
        float xaxisparm = System.Math.Abs(dpos.x);

        bool result = yaxisparm > xaxisparm;
        bool resulty = dpos.y > 1.0;
        bool resultx = dpos.x > 1.0;
        bool resultabsy = yaxisparm > 1.0;
        bool resultabsx = xaxisparm > 1.0;
                 …
}

現在はUpdate関数内で1.0よりもローカルポジションが動いた場合イベントが発火するようにしています。

ここを変数に置き換えます。

   ...
    //min detect area ( radias)
public float minRange;
 
void Update{
    …
        dpos = this.gameObject.transform.localPosition;

        float yaxisparm = System.Math.Abs(dpos.y);
        float xaxisparm = System.Math.Abs(dpos.x);

        bool result = yaxisparm > xaxisparm;
        bool resulty = dpos.y > minRange;
        bool resultx = dpos.x > minRange;
        bool resultabsy = yaxisparm > minRange;
        bool resultabsx = xaxisparm > minRange;
                 …
}

minRangeをinspectorから値を弄れるようにして検知範囲を変更できるようにしました。

f:id:Holomoto-Sumire:20200610105643j:plain

これで入力の検知までの範囲を調整できるようにしました

f:id:Holomoto-Sumire:20200610110054g:plain
minRange=1

f:id:Holomoto-Sumire:20200610110129g:plain
minRange=5

本日はリセット機能と検知範囲を変数にしてinspectorで変更できるようにしました。今日はここまで