MRが楽しい

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

HoloLens2でホロモンアプリを作る その31(ホロモンのサイズに応じて視界の強制発見距離を設定する)

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

今回はホロモンのサイズに応じて視界の強制発見距離を設定するメモです。
前回記事のスクリプトを基に実装を行います。
bluebirdofoz.hatenablog.com

強制発見距離を判定する

スクリプト内に指定の距離より近い場所にあるオブジェクトは視野角や障害物の判定を行わず、発見とする処理を追加します。
ホロモンアプリではホロモンが成長し、巨大化していくので、成長に合わせて強制発見距離も大きくする必要があります。

今回はワールド座標のスケール値を取得し、これに合わせて強制発見距離を変化させることでホロモンから一定の位置にあるオブジェクトを強制発見させました。
・FieldOfVisionWatcher.cs

f:id:bluebirdofoz:20210418232039j:plain

該当処理のコードは以下になります。

        [SerializeField, Tooltip("強制発見距離(ホロモン1m時のメートル単位)")]
        private float p_ForcedDiscoveryDistance = 1.0f;

        // ----- 中略 -----

            // 強制発見距離を現在のスケールを基に計算する
            float forcedDiscoveryDistance = p_ForcedDiscoveryDistance * CurrentHeightScale();

            // 強制発見距離か否か
            if (betweenDistance < forcedDiscoveryDistance)
            {
                // 発見チェックは行わない
            }

        // ----- 中略 -----

        /// <summary>
        /// 現在のホロモンの身長を取得する
        /// </summary>
        /// <returns></returns>
        private float CurrentHeightScale()
        {
            // ワールド基準のY軸スケール値を身長として扱う
            return this.transform.lossyScale.y;
        }

作成したスクリプトをオブジェクト検出用のコライダーが設定されたオブジェクトに追加します。
また、このオブジェクトはホロモンの頭部オブジェクトに追従するようスクリプトを設定しています。
f:id:bluebirdofoz:20210418232052j:plain

動作確認

シーンを再生して動作を確認します。
ホロモンの正面にいるときはコライダーの距離で視野角に収まり、障害物がければ見えていると判定されます。
f:id:bluebirdofoz:20210418232102j:plain

そのままホロモンの後ろ側に回り込んでみます。
ホロモンの視野角から外れたため、見えないと判定され、ホロモンがこちらを見失いました。
f:id:bluebirdofoz:20210418232113j:plain

後ろから近づき、強制発見距離より近くに寄ります。
ホロモンがこちらを発見し、振り向きました。
f:id:bluebirdofoz:20210418232125j:plain