MRTKを基にHoloLensで使用できるオリジナルのUIを作成します。
過去にSFチックのUIを作成していました。 今回はシリーズ続編としての第三回です。
〇第一弾
〇第二弾
本シリーズで作成したものは以下でMITライセンスで公開しています。(自由に使ってください)
今回第三弾はレバー(stick)型のUIを作っています。前回まででユーザーがレバーを『握ったことの検知』、『上下左右の動きの検知』の二つの機能を実装しました。
〇ターゲットのリセット
昨日まででターゲットをつかんで上下左右に動かすことで動きを検知してイベントを発火させるところまでできました。
しかし現状のままでは入力を検知してつかむのをやめてもリセット機能がないためずっと移動したままの位置に居続けてしまいます。 これでは使いづらいためリセット機能を付けます。
public void leverHoldEnd() { Debug.Log("leverActionEnd"); _ActionEnebled = false; Debug.Log("PointerReset"); this.gameObject.transform.localPosition = new Vector3(0, 0, 0);//追加 }
レバーをつかむことをやめたときに発火する関数にローカル座標を0にもどす処理を加えました。
これで手を離したら(握ることをやめたら)リセットされるようになりました。
〇検知最小範囲の設定
... 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から値を弄れるようにして検知範囲を変更できるようにしました。
これで入力の検知までの範囲を調整できるようにしました
本日はリセット機能と検知範囲を変数にしてinspectorで変更できるようにしました。今日はここまで