MRが楽しい

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

HoloLens2でホロモンアプリを作る その89(ホロモンの体調に応じてリアクションを変化させる)

本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。
f:id:bluebirdofoz:20220103233911j:plain

今回はホロモンの体調に応じてリアクションを変化させるメモです。

機嫌がいい時に撫でられるとお腹を見せる

ホロモンが機嫌がいい時に撫でてやると、ホロモンがお腹を見せるリアクションを行うようにします。
以前、ホロモンを撫でると両手を挙げてリアクションするコードを実装しました。今回はこれを改修します。
bluebirdofoz.hatenablog.com

またホロモンの体調は以下の IReadOnlyReactiveProperty の仕組みを利用していつでも参照できるようにしています。
bluebirdofoz.hatenablog.com
bluebirdofoz.hatenablog.com

実装コード

以下の通り、リアクションを行う際にホロモンの体調を参照して機嫌や満腹度が高い時にアクションを変えるコードを実装しました。
・HoloMonModeLogicStandby.cs

        /// <summary>
        /// 頭に触れられたことに反応する
        /// </summary>
        /// <param name="a_TaouchObject"></param>
        private bool TouchHeadReaction(TactileObjectWrap a_TactileObjectWrap)
        {
            bool isProcessed = false;

            // 頭部に触れたオブジェクトが右手もしくは左手か
            if ((a_TactileObjectWrap.CurrentFeatures().ObjectUnderstandType == ObjectUnderstandType.FriendRightHand)
                || (a_TactileObjectWrap.CurrentFeatures().ObjectUnderstandType == ObjectUnderstandType.FriendLeftHand))
            {
                // 手の状態を取得する
                int HandStatusHash = a_TactileObjectWrap.CurrentFeatures().ObjectUnderstandDataInterface.StatusHash();

#if UNITY_EDITOR
                // Editor上では確認のため、ピストル状態でパーと判定する
                if (HandStatusHash == (int)ObjectStatusHand.Hand_Pistol) HandStatusHash = (int)ObjectStatusHand.Hand_Par;
#endif

                if (HandStatusHash == (int)ObjectStatusHand.Hand_Par)
                {
                    // パーの手で触れられていた場合は頭を撫でられたアクションを行う

                    if ((p_ModeLogicCommon.ReferenceConditionLife.IReadOnlyReactivePropertyHoloMonLifeStatus.Value.HungryPercent >= 80) ||
                        (p_ModeLogicCommon.ReferenceConditionLife.IReadOnlyReactivePropertyHoloMonLifeStatus.Value.HumorPercent >= 80))
                    {
                        // 満腹または機嫌がよい場合
                        // お腹を見せるアクションを実行する
                        TempReaction(ReactionPose.ShowBellyPose);
                    }
                    else
                    {
                        /// 頭を撫でられたアクションを実行する
                        TempReaction(ReactionPose.StrokingHead);
                    }

                    isProcessed = true;
                }
            }

            return isProcessed;
        }

動作確認

シーンを再生して動作を確認します。
f:id:bluebirdofoz:20220103233947j:plain

機嫌や空腹度が通常の時に頭を撫でられると、今まで通り両手を挙げて反応します。
f:id:bluebirdofoz:20220103233958j:plain

次に試しに機嫌度を 80 以上に変更して再び撫でてみると……お腹を見せて撫でさせてくれました。
f:id:bluebirdofoz:20220103234008j:plain