/// <summary> /// プレハブ実体化 /// </summary> /// <param name="prefab">プレハブ</param> /// <returns>実体化したオブジェクト</returns> public GameObject Instantiate(GameObject prefab) { RecycleContainer recycleContainer = GetRecycleContainer(prefab.GetComponent <RecycleImpl>()); // コンテナが見つからなければnull返却 if (recycleContainer == null) { return(CreateObject(prefab)); } // コンテナがあれば返却 foreach (Transform child in recycleContainer.container.transform) { // リサイクルからはずす child.SetParent(null); // アクティブ化 child.gameObject.SetActive(true); // ゲームオブジェクトを返却 return(child.gameObject); } // コンテナが定義されていても、リサイクル対象がいない場合 return(CreateObject(prefab)); }
/// <summary> /// リサイクルコンテナクリア /// </summary> /// <param name="id">ID</param> public void ClearRecyleContainer(string id) { RecycleContainer recycleContainer = GetRecycleContainer(id); // リサイクルコンテナがなければここまで if (recycleContainer == null) { return; } // リサイクルコンテナクリア foreach (Transform child in recycleContainer.container.transform) { Destroy(child.gameObject); } }
/// <summary> /// リサイクル /// </summary> /// <param name="target"></param> public void Recycle(GameObject target) { RecycleContainer recycleContainer = GetRecycleContainer(target.GetComponent <RecycleImpl>()); // コンテナ未定義なら何もしない if (recycleContainer == null) { return; } // リサイクルカウントを超えている場合は破棄 if (recycleContainer.container.transform.childCount >= recycleContainer.recycleCount) { Destroy(target); return; } // 非アクティブに変更 target.SetActive(false); // コンテナに追加 target.transform.SetParent(recycleContainer.container.transform); }