public class PrefabTest : MonoBehaviour
{
public GameObject prefab;
void Start()
{
Instantiate(prefab);
}
}
Destroy(대상, 몇 초 후)
public class PrefabTest : MonoBehaviour
{
public GameObject prefab;
GameObject tank;
void Start()
{
tank = Instantiate(prefab);
Destroy(tank, 3.0f); //Destroy(대상, 몇 초 후)
}
}
<Type>
("경로")위에 코드처럼 public GameObject prefab;
으로 직접 인스펙터창에서 생성할 오브젝트를 연결해줘도 되지만, 규모가 큰 프로젝트의 경우 이렇게 해주면 매우 비효율적이다. (작업을 하다보면 연결해준 오브젝트가 사라지는 경우도 있다..)
public class PrefabTest : MonoBehaviour
{
GameObject prefab;
GameObject tank;
void Start()
{
prefab = Resources.Load<GameObject>("Prefabs/Tank");
tank = Instantiate(prefab);
Destroy(tank, 3.0f); //Destroy(대상, 몇 초 후)
}
}
위에 코드처럼 Resources 폴더에 있는 Prefab을 로드해서 생성해주는 코드를 작성해도 되지만, 이렇게 생성해줘야하는 오브젝트가 많아졌을 경우 '누가 무엇을 어디에서' 생성해주는지 혼란스러워진다.
이에, Resource Manager로 로드되는 모든 리소스를 관리해주자.
public class ResourceManager
{
public T Load<T>(string path) where T : Object
{
return Resources.Load<T>(path);
}
public GameObject Instantiate(string path, Transform parent = null)
{
GameObject prefab = Load<GameObject>($"Prefabs/{path}");
if(prefab == null)
{
Debug.Log($"Failed to load prefab : {path}");
return null;
}
return Object.Instantiate(prefab, parent); //Object에 있는 Instantiate()호출
}
public void Destroy(GameObject go)
{
if(go == null)
{
return;
}
Object.Destroy(go);
}
}
public class PrefabTest : MonoBehaviour
{
GameObject tank;
void Start()
{
tank = Managers.Resource.Instantiate("Tank");
//Managers.Resource.Destroy(tank);
}
}