HoloToolkit を Unity 5.5 版に移行(注視に対する反応対応)
※ これは 2016/12/11 Windows 10 Anniversary Edition(10.0; Build 14393)、Unity ver.5.5.0f3(Windows版) 時点の情報です
最新版では動作が異なる可能性がありますのでご注意ください
HoloLensToolkit は以前よりもだいぶ設計を見直した(もちろんより良い形に!)ので、昔のコードも修正が必要です
今回は下記の記事で紹介した注視による半透過の反応処理を最新の HoloToolkit 用に移行してみます
昔のコードでは OnGazeEnter() と OnGazeLeave() という暗黙的なイベントハンドラメソッドを実装することで注視時と注視がはずれた時の処理を記述していました
新しいコードでは、暗黙的なイベントハンドラではなく、私が当初想定したように明示的に IFocusable
というインタフェースを実装する形になったようです
IFocusable
のインタフェースが要求するのは OnFocusEnter() と OnFocusExit() で引数なしです
インタフェースを利用するようになったおかげで VisualStudio のサポートを受けられるようになりましたね
というわけで昔のコードの OnGazeEnter() と OnGazeLeave() を OnFocusEnter() と OnFocusExit() に名称変更し、IFocusable
インタフェースを実装してみました
using HoloToolkit.Unity.InputModule; using System; using UnityEngine; /// <summary> /// 注視対象となるパネル(Quad) /// </summary> [RequireComponent(typeof(Renderer))] [RequireComponent(typeof(Material))] public class TargetPanel : MonoBehaviour, IFocusable { /// <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 OnFocusEnter() { 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 OnFocusExit() { 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.OnFocusEnter(); } }
そしてお試しデバッグ!
はい、サクッと注視しているときだけパネルが半透過されるようになりました!
かんたんに移行できましたね