Prefab 생성과 ResourceManager 추가

프리팹이란, pre - fabrication 의 약자로

유니티 Hierarchy 창에서 만든 오브젝트들을 하나의 물체로 만들어서 다시 언제든지 사용할 수 있게 만든 것을 말한다.

 

 

이렇게 프리팹으로 만든 오브젝트들을 코드로 생성해줄 수 있다.

 

가장 간단한 방법은 Instantiate()을 이용하는 것이다.

 

public GameObject prefab;

void Start()
{
	Instantiate(prefab);
}

 

 

 

 

코드로 생성을 했다면, 반대로 삭제해줄 수도 있다.

 

GameObject prefab;

GameObject tank;

void Start()
{
	
    tank = Instantiate(prefab);
    
    Destroy(tank, 3.0f);
}

 

Destroy에 들어간 float 변수는 3초 뒤에 프리팹이 삭제된다는 의미이다.

 

 

 

 


 

 

 

 

public으로 GameObject 타입을 열고 유니티 상에서 직접 프리팹 오브젝트를 연결해줄 수도 있지만, 나중에 프로젝트의 규모가 커지다보면 이렇게 직접 연결해주기 힘들다.

 

 

그래서 보통은 Resources 함수를 통해 프리팹의 경로를 넣어주는 것으로 생성해준다.

 

GameObject prefab;

GameObject tank;

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

 

 

Resources 함수는 Asset 폴더 안의  Resources 파일을 가정하고 그 안에 있는 경로를 탐색한다.

 

 

 

 

Resources  파일을 만들었으니 이를 관리해주는 ResourceManager 또한 필요하다.

 

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라고 오브젝트를 명시한 것은 같은 Instantiate 함수를 재귀적으로 호출하지 말고, 오브젝트 안에 있는 Instantiate을 하라고 명시해준 것이다.

 

 

 

 

리소스 매니저에 Destroy 함수도 설정해준다.

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

 

 

 

 

 

이제 Managers에 ResourceManager 를 추가해준다.

 

ResourceManager _resoure = new ResourceManager();

public static ResourceManager Resource {get {return Instance._resource;}}

 

 

 

 

이렇게 매니저를 따로 관리하는 것으로

 

GameObject prefab;

GameObject tank;

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

 

이런식으로 번거롭게 프리팹을 일일이 생성할 필요 없이 바로 Managers를 호출해서 프리팹을 생성 및 파괴할 수 있다.

 

 

GameObject prefab;

GameObject tank;

void Start()
{
	
    Managers.Resource.Instantiate("Tank");
    
    Managers.Destroy(tank, 3.0f);
}

 

 

 

 

 


 

 

레퍼런스

 

https://www.inflearn.com/course/mmorpg-%EC%9C%A0%EB%8B%88%ED%8B%B0/dashboard

'Unity' 카테고리의 다른 글

screen상 좌표 와 Raycasting  (2) 2024.07.24
Input Manager 관리하는 이유  (0) 2024.07.24
Rotate, rotation, eulerAngles  (0) 2024.07.21
Vector3 함수와 position  (0) 2024.07.21
싱글톤 패턴  (1) 2024.07.11