MRが楽しい

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

HoloLens2でホロモンアプリを作る その27(ホロモンの身長をスムーズに変化させる)

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

今回はホロモンの身長をスムーズに変化させるメモです。

ホロモンの身長をスムーズに変化させる

ホロモンの身長をスムーズに変化させるため、Mathf クラスの Lerp 関数と UniRx の IntervalFrame を利用しました。
Mathf クラスの Lerp 関数は2つの値を線形補完する関数です。
docs.unity3d.com
また、UniRx の IntarvalFlame は指定のフレーム数ごとに処理を実行します。

ホロモンのトランスフォームを操作するスクリプトに以下のような身長をスムーズに変化させる関数を追加しました。
・HoloMonTransformController.cs

        /// <summary>
        /// 現在の身長を反映する
        /// </summary>
        /// <param name="a_CurrentHeight"></param>
        private void ApplyHeightCondition(float a_CurrentHeight)
        {
            // 分割フレーム数
            int lerpTime = 50;

            // 反映後身長
            float afterHeight = a_CurrentHeight;

            // 反映前身長
            float beforeHeight = p_Scale;

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

            // 1フレームごとにスケールを徐々に拡大する
            p_LeapTrigger = Observable
                .IntervalFrame(1)
                .Take(lerpTime)
                .SubscribeOnMainThread()
                .Subscribe(
                x =>
                {
                    // Lerpを使って徐々にスケールを変化させる
                    float current = (float)(1.0 / lerpTime) * x;
                    float settingHeight = Mathf.Lerp(beforeHeight, afterHeight, current);
                    UpdateScale(settingHeight);
                },
                () =>
                {
                    // 完了時は最終的なスケール値を設定する
                    UpdateScale(a_CurrentHeight);
                })
                .AddTo(this);
        }

f:id:bluebirdofoz:20210406012335j:plain

シーンを再生して動作を確認します。
食事を食べると、ホロモンの身長がスムーズに変化して成長します。
f:id:bluebirdofoz:20210406012351j:plain