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」の名称でマテリアルを追加します
このマテリアルの設定は次の通り
Main Maps の Albedo の色はオレンジの FF6633FF を指定し、前回同様 Rendering Mode を Fade にして半透明にできるようにします
このマテリアルを Panel の Inspector 上の 「Target Panel」のプロパティ「Selected Material」にドラッグドロップで設定します
最後に Air-Tap(人差し指折り曲げ操作)検出のため、Hierarchy 上の Managers オブジェクトに対して Scripts/HoloToolkit.Unity 直下にある GestureManager を選んでアタッチします
さてさてこれでビルドしお試し実行