MRが楽しい

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

HoloLens2でホロモンアプリを作る その18(一度目の状態変化に合わせて行動を切り替える)

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

今回は UniRx を利用して一度目の状態変化に合わせて行動を切り替えるメモです。

渡されたご飯を追いかけて食べる

ホロモンのアクションに「渡されたご飯を追いかけて食べる」というアクションを追加します。
(画像差し込み_63)

以前作成した以下の追跡機能を流用してご飯を追いかけて、ご飯の元に辿り着いたら食事のアクションを取るようにします。
bluebirdofoz.hatenablog.com

アクションの切り替えタイミングを計るため、UniRx を利用します。
First オペレータを利用すると、アクションの遷移を判定しつつ、アクションが切り替わった最初の1回だけ処理を行うことができます。
・HoloMonActionController.cs

        /// <summary>
        /// 食事を与えられたアクションの要求
        /// </summary>
        public void RequestGiveFood(GameObject a_FoodTarget)
        {
            // ご飯を対象にしたターゲット追跡アクションに切り替える
            HoloMonModeStatusSingleton.Instance.ChangeModeTargetTracking(a_FoodTarget.transform);

            // トリガーを設定済みの場合は一旦破棄する
            p_FoodMealTrigger?.Dispose();

            // ご飯に辿り着いた後の処理を設定しておく
            p_FoodMealTrigger = HoloMonModeStatusSingleton.Instance.IReadOnlyReactivePropertyHoloMonMode
                .First(mode => mode == HoloMonMode.Standby)
                .ObserveOnMainThread()
                .Subscribe(mode => {
                    // 食事アクションに切り替える
                    HoloMonModeStatusSingleton.Instance.ChangeModeFoodMeal();
                })
                .AddTo(this);
        }

ホロモンが渡されたご飯の元に駆け寄り、ご飯を食べるアクションを行いました。
f:id:bluebirdofoz:20210320233328j:plain