MRが楽しい

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

HoloLens2でホロモンアプリを作る その118(シーンに配置されたアイテムをすべて除去する)

本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。
今回はシーンに配置されたアイテムをすべて除去する機能を追加しました。

GetComponentsInChildren

GetComponentsInChildren は現在のゲームオブジェクトまたはその子オブジェクト全てから指定のコンポーネントを探索してリストで返します。
docs.unity3d.com

実装コード

ホロモンアプリでシーン内のアイテムが全て特定のオブジェクト配下に配置されるように修正し、そこから GetComponentsInChildren を使ってアイテムを捜索するようにしました。

以下のようなアイテム管理用のスクリプトを作成しました。
CleanAllItem メソッドを実行すると、自身の配下のアイテムを捜索して削除メソッドを呼び出すことで除去しています。
・ItemSpawnAPI.cs

using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using HoloMonApp.Content.SupportItem.Objects;
using HoloMonApp.Content.SupportItem.Objects.Windows.BreedingMenuWindow;
using UnityEngine;

namespace HoloMonApp.Content.SupportItem.Spawn
{
    public class ItemSpawnAPI : MonoBehaviour
    {
        // (略)
        public void CleanAllItem()
        {
            // TODO: 全てのアイテムを片付け
            BItemAccessAPI[] spawnedItems = this.transform.GetComponentsInChildren<BItemAccessAPI>();
            foreach (BItemAccessAPI itemAccessAPI in spawnedItems)
            {
                itemAccessAPI.DestroyObject();
            }
        }
        // (略)
    }
}

実際にシーンを再生して動作を確認します。

以下の通り、メインメニューのお片付けボタンをタップして CleanAllItem メソッドを呼び出すと全てのアイテムが除去されました。

現状、メインメニューもアイテムに含まれているため、同時に除去されてしまっています。
メインメニューを呼び戻す仕組みか、メインメニューは除去対象から除く対処は別途必要そうです。