本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。
今回はホロモンが一緒に頷いたり首を振るメモです。
ホロモンが一緒に頷いたり首を振る
以下の記事で作成した頭部ジェスチャーの検出ロジックをホロモンアプリにも組み込みました。
bluebirdofoz.hatenablog.com
首傾げの検出処理のスクリプトにジェスチャー判定スクリプトへの参照を追加しています。
これにより、ホロモンがプレイヤーに注視しているときに頷きや首振りを検知します。
bluebirdofoz.hatenablog.com
・HeadObjectFeaturesSetter.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using UniRx; using UniRx.Triggers; using HMProject.HoloMon; namespace HMProject.Player { /// <summary> /// 顔の状態識別 /// </summary> [Serializable] public enum HeadStatus { /// <summary> /// 無し(デフォルト) /// </summary> Nothing = 0, /// <summary> /// 頷く /// </summary> Nod, /// <summary> /// 首振り /// </summary> Shake, /// <summary> /// 首傾げ /// </summary> Tilt, } [RequireComponent(typeof(ObjectFeatures))] public class HeadObjectFeaturesSetter : MonoBehaviour { [SerializeField, Tooltip("通常状態のオブジェクト名")] private HoloMonKnownObjectFeatures p_NormalHeadName; [SerializeField, Tooltip("頷いた状態のオブジェクト名")] private HoloMonKnownObjectFeatures p_NodHeadName; [SerializeField, Tooltip("首を振る状態のオブジェクト名")] private HoloMonKnownObjectFeatures p_ShakeHeadName; [SerializeField, Tooltip("首を傾げた状態のオブジェクト名")] private HoloMonKnownObjectFeatures p_TiltHeadName; [SerializeField, Tooltip("現在の顔の状態")] private HeadStatus p_CurrentHeadStatus; [SerializeField, Tooltip("顔の状態判定ロジックの参照")] private HeadGestureRecognizer p_HeadGestureRecognizer; // オブジェクトの特徴の設定参照 private ObjectFeatures p_ObjectFeatures; /// <summary> /// 起動処理 /// </summary> void Start() { // オブジェクトの特徴の参照を取得する p_ObjectFeatures = this.gameObject.GetComponent<ObjectFeatures>(); // 初期状態は通常状態 SettingNormal(); // 判定イベントを登録する p_HeadGestureRecognizer.EventNothing += SettingNormal; p_HeadGestureRecognizer.EventNod += SettingNod; p_HeadGestureRecognizer.EventShake += SettingShake; p_HeadGestureRecognizer.EventTilt += SettingTilt; } /// <summary> /// 状態を通常状態に設定する /// </summary> private void SettingNormal() { p_ObjectFeatures.Features = p_NormalHeadName; p_CurrentHeadStatus = HeadStatus.Nothing; } /// <summary> /// 状態を頷き状態に設定する /// </summary> private void SettingNod() { p_ObjectFeatures.Features = p_NodHeadName; p_CurrentHeadStatus = HeadStatus.Nod; } /// <summary> /// 状態を首振り状態に設定する /// </summary> private void SettingShake() { p_ObjectFeatures.Features = p_ShakeHeadName; p_CurrentHeadStatus = HeadStatus.Shake; } /// <summary> /// 状態を首傾げ状態に設定する /// </summary> private void SettingTilt() { p_ObjectFeatures.Features = p_TiltHeadName; p_CurrentHeadStatus = HeadStatus.Tilt; } } }
プレイヤーを注視しているので HeadLookController の[Override Animation]にチェックを入れます。
これで注視による頭の移動とアニメーションの頷き動作がミックスされたアニメーションが再生されます。
bluebirdofoz.hatenablog.com
動作確認
シーンを再生して動作を確認します。
ホロモンがこちらを見ているときに、頷く動作をするとホロモンも頷いてくれます。
また、首を振る動作をするとホロモンも首を振ってくれました。