|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
public abstract class ResourcePool : MonoBehaviour
|
|
|
|
|
{
|
|
|
|
|
static public GameObject ObjectCreateStatic(GameObject prefab, Transform target = null)
|
|
|
|
|
{
|
|
|
|
|
Transform t = Instantiate(prefab).transform;
|
|
|
|
|
|
|
|
|
|
//t.transform.parent = target;
|
|
|
|
|
t.SetParent(target);
|
|
|
|
|
t.transform.localScale = Vector3.one;
|
|
|
|
|
t.transform.localPosition = Vector3.zero;
|
|
|
|
|
t.transform.localEulerAngles = Vector3.zero;
|
|
|
|
|
|
|
|
|
|
return t.gameObject;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Dictionary<string, List<GameObject>> listObject = new Dictionary<string, List<GameObject>>();
|
|
|
|
|
List<GameObject> listObjectCreate = new List<GameObject>();
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 생성한 오브젝트를 저장합니다.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="name"></param>
|
|
|
|
|
/// <param name="obj"></param>
|
|
|
|
|
void ObjectAdd(string name, GameObject obj)
|
|
|
|
|
{
|
|
|
|
|
listObjectCreate.Add(obj);
|
|
|
|
|
|
|
|
|
|
if (!listObject.ContainsKey(name))
|
|
|
|
|
listObject.Add(name, new List<GameObject>());
|
|
|
|
|
listObject[name].Add(obj);
|
|
|
|
|
|
|
|
|
|
obj.name = name + " " + listObject[name].Count;
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 이전에 생성한 오브젝트 중 비활성화 되어있는게 있다면
|
|
|
|
|
/// 비활성화 되어있는 오브젝트를 넘기고
|
|
|
|
|
/// 없다면 신규생성합니다.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="name"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
GameObject ObjectGet(string name)
|
|
|
|
|
{
|
|
|
|
|
if (listObject.ContainsKey(name))
|
|
|
|
|
{
|
|
|
|
|
return listObject[name].Find(a => !a.activeSelf);
|
|
|
|
|
//foreach (GameObject t in listObject[name])
|
|
|
|
|
//{
|
|
|
|
|
// if (!t.activeInHierarchy)
|
|
|
|
|
// return t;
|
|
|
|
|
//}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
public GameObject ObjectCreate(GameObject prefab, Transform parents, Vector3 scale, Vector3 pos, bool ON = true)
|
|
|
|
|
{
|
|
|
|
|
GameObject obj = ObjectGet(prefab.name);
|
|
|
|
|
|
|
|
|
|
if (obj == null)
|
|
|
|
|
{
|
|
|
|
|
obj = Instantiate(prefab);
|
|
|
|
|
|
|
|
|
|
ObjectAdd(prefab.name, obj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
obj.transform.SetParent(parents);
|
|
|
|
|
obj.transform.localScale = scale;
|
|
|
|
|
obj.transform.position = pos;
|
|
|
|
|
obj.transform.localEulerAngles = Vector3.zero;
|
|
|
|
|
|
|
|
|
|
obj.gameObject.SetActive(ON);
|
|
|
|
|
|
|
|
|
|
return obj;
|
|
|
|
|
}
|
|
|
|
|
public GameObject ObjectCreateLocalPos(GameObject prefab, Transform parents, Vector3 scale, Vector3 pos, bool ON = true)
|
|
|
|
|
{
|
|
|
|
|
GameObject obj = ObjectGet(prefab.name);
|
|
|
|
|
|
|
|
|
|
if (obj == null)
|
|
|
|
|
{
|
|
|
|
|
obj = Instantiate(prefab);
|
|
|
|
|
|
|
|
|
|
ObjectAdd(prefab.name, obj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
obj.transform.SetParent(parents);
|
|
|
|
|
obj.transform.localScale = scale;
|
|
|
|
|
obj.transform.transform.localPosition = pos;
|
|
|
|
|
obj.transform.localEulerAngles = Vector3.zero;
|
|
|
|
|
|
|
|
|
|
obj.gameObject.SetActive(ON);
|
|
|
|
|
|
|
|
|
|
return obj;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool DISABLE_HIDE = false;
|
|
|
|
|
public void ObjectAllHide()
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < listObjectCreate.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
listObjectCreate[i].transform.SetParent(transform);
|
|
|
|
|
listObjectCreate[i].SetActive(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void OnDisable()
|
|
|
|
|
{
|
|
|
|
|
if (DISABLE_HIDE)
|
|
|
|
|
{
|
|
|
|
|
ObjectAllHide();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void ObjectDestroy()
|
|
|
|
|
{
|
|
|
|
|
listObject.Clear();
|
|
|
|
|
listObjectCreate.Clear();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|