MRが楽しい

MRやVRについて学習したことを書き残す

Unityでレーザポインタを表示する

本日は Unity の技術調査枠です。
以下の記事を参考に、カーソルの位置がよく分かるようレーザポインタを表示させてみます。
gametukurikata.com
dev3104.hateblo.jp

ではレーザポインタを実装するプロジェクトを開きます。
今回は HoloToolKit の GazeManager と Cursor を利用しているプロジェクトに反映します。
f:id:bluebirdofoz:20170907091350j:plain

レーザポインタ用のオブジェクトを作成します。
CreateEmpty でゲームオブジェクトを作成したら LineRenderer コンポーネントを適用します。
f:id:bluebirdofoz:20170907091401j:plain

LineRenderer に反映するマテリアルを作成します。
Assetsフォルダで右クリック、Create -> Material で新規マテリアルを作成します。
f:id:bluebirdofoz:20170907091418j:plain

レーザポインタを発光している感じに見せるよう以下の通り、マテリアルを設定します。
1. RenderingMode を Transparent にし Albedo の色を変更する
2. Alpha(透明度)の設定値を 200 にする
3. Emission(光の放出)の設定値を 0.5 にする
f:id:bluebirdofoz:20170907091423j:plain
単に発色の設定なので後から好みに調整しても問題ありません。

因みに RenderingMode の各設定の意味は以下の通りです。
docs.unity3d.com

作成したマテリアルを LineRenderer に設定します。オブジェクトの設定は以上です。
f:id:bluebirdofoz:20170907091458j:plain

次に LaserPointer をカメラの位置からカーソルの位置まで伸ばして表示するようにします。
以下のようなスクリプトを作成し、LaserPointer オブジェクトに適用します。
・LaserPointerManager

    public class LaserPointerManager : MonoBehaviour
    {
        /// <summary>
        /// カーソル位置
        /// </summary>
        [SerializeField, Tooltip("カーソル位置")]
        private GameObject p_Cursor;

        /// <summary>
        /// レーザポイント
        /// </summary>
        private LineRenderer p_LaserPointer;

        // Use this for initialization
        void Start()
        {
            p_LaserPointer = this.GetComponent<LineRenderer>();
        }

        // Update is called once per frame
        void Update()
        {
            // レーザポイントの始点をカメラ位置に設定
            p_LaserPointer.SetPosition(0, Camera.main.transform.position);
            // レーザポイントの終点をカーソル位置に設定
        }
    }

レーザポイントの終点としてカーソルオブジェクトを設定すれば完了です。
f:id:bluebirdofoz:20170907091506j:plain

シーンを再生すると、レーザポインタがカメラからカーソル位置まで伸びていることが確認できます。
f:id:bluebirdofoz:20170907091844j:plain