MRが楽しい

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

HoloLens2でホロモンアプリを作る その127(全アイテムの共通処理に場外判定を追加する)

本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。
今回は全アイテムの共通処理に場外判定を追加しました。

基底クラスで全アイテムの共通処理を実装する

今回はアイテムオブジェクトの共通の基底クラスにライフサイクル関数を実装することで共通の場外処理を実装しました。

MonoBeheviour を持つクラスを継承した場合のライフサイクル関数の動作については以下の記事で確認しているので参照してみてください。
bluebirdofoz.hatenablog.com

共通の基底クラスに以下の通り、アイテムが床の判定を抜けて無限遠の地下に落ちてしまった場合の処理を追記しました。
・BContentAccessAPI.cs

using HoloMonApp.Content.Character.Data.Knowledge.Objects;
using UniRx;
using UnityEngine;
using UnityEngine.Serialization;

namespace HoloMonApp.Content
{
    public abstract class BContentAccessAPI : MonoBehaviour
    {
        /// <summary>
        /// ホスト状態
        /// </summary>
        [SerializeField]
        private ReactiveProperty<ContentHostActivity> _isHostProp;

        protected IReadOnlyReactiveProperty<ContentHostActivity> IsHost => _isHostProp;
        protected void SetIsHost(ContentHostActivity isHost) => _isHostProp.Value = isHost;
        
        /// <summary>
        /// アイテム状態
        /// </summary>
        private ReactiveProperty<BContentStatus> _statusPropProp = new();

        protected IReadOnlyReactiveProperty<BContentStatus> StatusProp => _statusPropProp;
        protected void SetStatus(BContentStatus status) => _statusPropProp.Value = status;

        [Header("アイテム種別")]
        [SerializeField]
        private ObjectFeatures contentFeature;

        public ObjectFeatureWrap ContentFeatureWrap => contentFeature.DataWrap;

        // base参照のため、protectedのライフサイクル関数を仮実装
        protected virtual void Start(){}

        protected virtual void Update()
        {
            float resetYHeight = -30.0f;
            if (resetYHeight > this.transform.position.y)
            {
                // 敷居値以下の高度になった場合、アイテムを無効化する
                DestroyObject();
            }
        }
        
        // (略)
    }
}

これで全てのアイテムが無限遠の地下に落ちてしまった場合に自動で削除処理が行われるようにできました。