本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。
今回はホロモンの身長をスムーズに変化させるメモです。
ホロモンの身長をスムーズに変化させる
ホロモンの身長をスムーズに変化させるため、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); }
シーンを再生して動作を確認します。
食事を食べると、ホロモンの身長がスムーズに変化して成長します。