しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

HoloLens 用 Toolkit で注視した対象を選択したら色を変更する

※ これは 2016/08/05 Unity HoloLens Technical Preview ver.5.4.0f3(Windows版) 時点の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回 は HoloToolkit で注視されたパネルを半透明にする動作を作ってみました

今回はちょっとだけ発展させて、選択(注視している状態で Air-Tap:人差し指折り曲げ操作)で対象の色を変更する実装を試してみたいと思います

まずはコードの修正から

using UnityEngine;

/// <summary>
/// 注視対象となるパネル(Quad)
/// </summary>
[RequireComponent(typeof(Renderer))]
[RequireComponent(typeof(Material))]
public class TargetPanel : MonoBehaviour
{
    /// <summary>
    /// パネルのレンダラー
    /// </summary>
    private Renderer meshRenderer = null;

    /// <summary>
    /// パネルのマテリアル
    /// </summary>
    private Material defaultMaterial = null;

    /// <summary>
    /// 選択状態のマテリアル
    /// </summary>
    [SerializeField]
    private Material selectedMaterial = null;

    /// <summary>
    /// 初期処理
    /// </summary>
    public void Awake()
    {
        this.meshRenderer = this.GetComponent<Renderer>();
        this.defaultMaterial = this.meshRenderer.material;
    }

    /// <summary>
    /// 注視(フォーカスイン)イベントハンドラ
    /// </summary>
    public void OnGazeEnter()
    {
        var color = this.meshRenderer.material.color;
        this.meshRenderer.material.color = new Color(color.r, color.g, color.b, 0.6f);
    }

    /// <summary>
    /// 注視はずれ(フォーカスアウト)イベントハンドラ
    /// </summary>
    /// <remarks>
    public void OnGazeLeave()
    {
        var color = this.meshRenderer.material.color;
        this.meshRenderer.material.color = new Color(color.r, color.g, color.b, 1f);
    }

    /// <summary>
    /// 選択(フォーカス中に人差し指折り曲げ)イベントハンドラ
    /// </summary>
    public void OnSelect()
    {
        this.meshRenderer.material = this.selectedMaterial;
        this.OnGazeEnter();
    }
}

選択状態のマテリアルのフィールドを追加し、OnSelect() という暗黙的な選択イベントハンドラの中でレンダラーのマテリアルを差し替えているだけです

[SerializeField] の属性は本来シリアライズ対象のフィールドを指定する目印だと思うのですが、Unity の習慣的に private のフィールドを UnityEditor 上で変更可能なプロパティ的に扱えるようにする目的で利用されます

コードを書き換えたら selectedMaterial に設定するマテリアルを追加します

Project の Assets/Materials フォルダ直下から [Create]-[Material] のコンテキストメニューを選び、「PanelSelected」の名称でマテリアルを追加します

f:id:matatabi_ux:20160821202605p:plain

このマテリアルの設定は次の通り

f:id:matatabi_ux:20160821202721p:plain

Main Maps の Albedo の色はオレンジの FF6633FF を指定し、前回同様 Rendering Mode を Fade にして半透明にできるようにします

このマテリアルを Panel の Inspector 上の 「Target Panel」のプロパティ「Selected Material」にドラッグドロップで設定します

f:id:matatabi_ux:20160821203032p:plain

最後に Air-Tap(人差し指折り曲げ操作)検出のため、Hierarchy 上の Managers オブジェクトに対して Scripts/HoloToolkit.Unity 直下にある GestureManager を選んでアタッチします

f:id:matatabi_ux:20160821204308p:plain

さてさてこれでビルドしお試し実行

f:id:matatabi_ux:20160821231949g:plain

Air-Tap 操作(エミュレーターでは右クリック)でパネルの色が変わりましたね!