##目的
VR空間内でスライダーのUIを操作して、ゲームの難易度を設定する
というのが今回の目的です。
この記事ではVR空間内でスライダーのUIを操作の部分を記述します。
##デモ
実際に作成したものがこちらです。
見た目は置いといて、機能としては完成です。
##OculusIntegrationの設定
####①OVRInputModuleの設定
Create Empty
でGameObjectを生成して、OVRInputModule
をAdd Componentします。
設定項目としては3か所だけです。
今回は人差し指のトリガーで操作する設定にしてます。
Cursorの箇所は後述します。
####②Cursorの設定
続いて、Cursorの設定です。
Create Empty
でGameObjectを生成して、LaserPointer
をAdd Componentします。
同じオブジェクトにLineRenderer
もAdd Componentします。
あと、LineRendererが太すぎるのでWidthを0.03くらいにしました。
お好みでmaterialを設定してレーザーの色を変えたりできます。
今回のデモではカーソルは表示していませんが、
必要な場合はCursorVisual
お好きなカーソル(ゲームオブジェクト)をアタッチすればOKです。
####③OVRRaycasterを追加
CanvasにOVRRaycaster
をAdd Componentします。
これで、そのCanvasの子のUIに対して操作が可能になります。
もともとあるGraphyicRaycaster
は消してしまって構いません。
##設定完了!
これでもうUIを操作できます。
OculusIntegration神ですね。
##コード
スライダーの値を取得するメソッド、GetLevel
を用意します。
using UnityEngine;
using UnityEngine.UI;
public class LevelGetFromSlider : MonoBehaviour
{
Slider levelSlider;
void Start()
{
levelSlider = this.gameObject.GetComponent<Slider>();
}
public int GetLevel()
{
return (int)levelSlider.value;
}
}
using UnityEngine.UI;
using UnityEngine;
public class LevelText : MonoBehaviour
{
[SerializeField]
LevelGetFromSlider _levelGetFromSlider;
Text levelText;
void Start()
{
levelText = this.gameObject.GetComponent<Text>();
}
public void LevelTextChange()
{
levelText.text = _levelGetFromSlider.GetLevel().ToString();
}
}
後はテキスト側でOn Value Changed
に登録するメソッド内で先程のGetLevel
を使います。
On Value Changed
というのは、Slider Componentに用意されているイベントハンドラーです。
画像のように登録して使います。
これでSliderの値が変更された際に、テキストも変わります。
Editor上でSliderのValueを直接編集しても反映されないので注意です。