새소식

⇥ 2D Game/Unity

Unity 게임 만들기 프로젝트 - Resource Manager

  • -
반응형

1. Prefabs

미리 구성된 게임 객체, 오브젝트를 생성할 때 사용되는 클래스 같은 원본을 의미. 얼마든지 복사해서 오브젝트를 생성할 수 있음
자주 사용되는 객체들을 미리 만들어 놓고, 필요할 때마다 재사용할 수 있도록 하는 방식

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PrefabTest : MonoBehaviour
{
    public GameObject prefab;
    GameObject tank;
    void Start()
    {
        tank = Instantiate(prefab);

        Destroy(tank, 3.0f);
    }
}

 

위와 같은 Script를 구성하고 GameObject에 연결해주면 public 으로 설정된 Prefab 에 미리 생성해둔 Prefabs 를 연결할 수 있다.
위에선 Tank prefabs 를 연결하고 코드를 실행하면 Tank 가 생성된 후 3초 후에 해당 GameObject 가 제거된다.

규모가 크다면 일일히 연결할 수 없기 때문에 Resource Manager 가 필요함

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

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);
    }

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

        Object.Destroy(go);
    }
}

ResourceManager 작성, Object 의 Instantiate 와 Destroy 메서드를 레핑하여 매니저에서 실행 될 수 있도록 구성함.
Resource > Prefabs 디렉토리 내부에서 Load 가 수행

ResourceManager _resource = new ResourceManager();
public static ResourceManager Resource { get { return Instance._resource; } }

기존 Manager 생성과 마찬가지로 Managers 파일 내부에 _resource 생성 및 호출메서드를 작성해준다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PrefabTest : MonoBehaviour
{
    public GameObject prefab;
    GameObject tank;
    void Start()
    {
        tank = Managers.Resource.Instantiate("Tank");
        // Managers.Resource.Destory(tank);
        Destroy(tank, 3.0f);
    }
}

맨위에 작성했던 코드에서 ResourceManager 를 적용하여 수정한 코드이다.
Managers.Resource.Instantiate 를 이용하여 Resource/Prefabs 폴더 내부의 Tank 를 Load 하고, Destory 하는 코드이다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.