Unity

[Unity][방법] 프리팹 C#에서 생성 Instantiate

usingsystem 2022. 10. 4. 22:56
728x90

Instantiate(프리팹)를 사용하면 프리팹 객체를 인스턴스화 할 수 있다.

 public GameObject prefab;
    void Start()
    {
        Instantiate(prefab); 
    }

 

Destory(프리팹, 몇초후 사라질지)를 사용하면 프리팹 객체 인스턴스 메모리를 해제할 수 있다.

public GameObject prefab;
GameObject tank;
    
    void Start()
    {
        tank= Instantiate(prefab);

        Destroy(tank, 3.0f);
    }

 

프로젝트의 규모가 컨진다면 프리팹을 GameObject에 직접 연결하여 사용하기 힘들어진다.

그렇기 때문에 Resources파일에 Load를 사용하여 프리팹을 연결하여 사용한다.

Resources파일에는 소스를 제외한 모든 것 을 넣는 것이 효과가 좋다.

폴더 경로 - "Prefabs/프리팹명"

 

 GameObject prefab;
    GameObject tank;
    void Start()
    {
        prefab = Resources.Load<GameObject>("Prefabs/Tank");
        tank= Instantiate(prefab);
        Destroy(tank, 3.0f);
    }

 

Resource Manager

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}");
        GameObject prefab =Resources.Load<GameObject>("Prefabs/Tank");
        if (prefab == null)
        {
            Debug.Log($"Failed to load prefab : {path}");
            return null;
        }

        return Object.Instantiate(prefab, parent);
    }

    public void Destroy(GameObject go)
    {
        if (go == null)
            return;

        Object.Destroy(go);
    }
}
728x90