Resource Manager

개발조하·2023년 11월 26일
0

Unity

목록 보기
8/30
post-thumbnail

1. Instantiate() (생성)

public class PrefabTest : MonoBehaviour
{
    public GameObject prefab;   

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

2. Destroy() (삭제)

Destroy(대상, 몇 초 후)

public class PrefabTest : MonoBehaviour
{
    public GameObject prefab;
    GameObject tank;

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

        Destroy(tank, 3.0f); //Destroy(대상, 몇 초 후)
    }
}

3. Resources.Load<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(대상, 몇 초 후)
    }
}

4. Resource Manager

위에 코드처럼 Resources 폴더에 있는 Prefab을 로드해서 생성해주는 코드를 작성해도 되지만, 이렇게 생성해줘야하는 오브젝트가 많아졌을 경우 '누가 무엇을 어디에서' 생성해주는지 혼란스러워진다.
이에, Resource Manager로 로드되는 모든 리소스를 관리해주자.

  • ResourceManager.cs
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);
    }
}
  • (Clone)텍스트 삭제하는 코드로 디벨롭!
    * 이렇게 작성해도 됨!
  • Managers.cs
  • PrefabTest.cs
public class PrefabTest : MonoBehaviour
{
    GameObject tank;

    void Start()
    {
        tank = Managers.Resource.Instantiate("Tank");

        //Managers.Resource.Destroy(tank);
    }
}

📄참고자료
[인프런] c#과 유니티로 만드는 MMORPG 게임 개발 시리즈_Resource Manager

profile
Unity 개발자 취준생의 개발로그, Slow and steady wins the race !

0개의 댓글