MRが楽しい

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

HoloLens2でホロモンアプリを作る その80(アイテムの大きさを徐々に変化させる)

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

今回はアイテムの大きさを徐々に変化させるメモです。

アイテムの大きさを徐々に変化させる

スクリプトは以下の記事で実装したアイテムの管理スクリプトを修正します。
bluebirdofoz.hatenablog.com

アイテムの大きさを徐々に変化させるため、今回は UniRx の Interval 関数を利用します。
UniRx の Interval 関数に関する詳細は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

ホロモンのスケール比率の変化に合わせてアイテムの大きさを変化させる関数を以下のように実装しました。

        /// <summary>
        /// 現在のスケール比率
        /// </summary>
        private float p_ScaleRatio;

        /// <summary>
        /// 変化用のトリガー
        /// </summary>
        private IDisposable p_LerpTrigger;

        /// <summary>
        /// ホロモンの身長に合わせて大きさを徐々に反映する
        /// </summary>
        /// <param name="a_ScaleRatio"></param>
        private void ApplySizeCondition(float a_ScaleRatio)
        {
            // 反映前のスケール比率を取得する
            float beforeRatio = p_ScaleRatio;

            // 反映後のスケール比率を取得する
            float afterRatio = a_ScaleRatio;

            // 分割フレーム数
            int lerpTime = 10;

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

            // 0.05秒ごとにスケールを徐々に拡大する
            p_LerpTrigger = Observable
                .Interval(TimeSpan.FromSeconds(0.05f))
                .Take(lerpTime)
                .SubscribeOnMainThread()
                .Subscribe(
                x =>
                {
                    // Lerpを使って徐々にスケール比率を変化させる
                    float current = (float)(1.0 / lerpTime) * x;
                    float settingRatio = Mathf.Lerp(beforeRatio, afterRatio, current);

                    // 現在のホロモンサイズに合わせたスケールを算出して設定する
                    p_ControlObject.transform.localScale = p_DefaultLocalScale * settingRatio;
                },
                () =>
                {
                    // 完了時は最終的なスケールを設定する
                    p_ControlObject.transform.localScale = p_DefaultLocalScale * afterRatio;

                    // 設定中のサイズ比率を記録する
                    p_ScaleRatio = a_ScaleRatio;
                })
                .AddTo(this);
        }

ホロモンの大きさに合わせて大きさを変化させるお肉とボールオブジェクトに修正を反映しました。
f:id:bluebirdofoz:20211205235547j:plain

動作確認

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

ボールを傍らに表示した状態でホロモンにお肉を与えて成長させてみます。
f:id:bluebirdofoz:20211205235614j:plain

ホロモンの成長に合わせてボールの大きさも徐々に変化します。
f:id:bluebirdofoz:20211205235624j:plain