[Unity] 유니티 특수 폴더 [Resources]의 역할과 동적 파일 Resources.Load 방법

728x90

유니티 동적 파일 Load에 필요한 Resources 폴더

예를 들어 유저가 게임을 다운받았을 때 필요 없는 애셋들(테스트용 또는 에셋 번들 등)까지 받을 필요는 없다. 보통 게임 사에서는 게임 제작 시 필요한 prefab들을 한데 묶어서 빌드하므로서 최적화 작업을 수행한다.

 

하지만 최종 완성 전 개발 단계에서 수시로 프로젝트를 테스트해야 하는 과정에서는 애셋을 확정지을수도 없을 뿐더러 필요 에셋을 수시로 주고받아야 하는 상황이 발생할 수 있다. 예를 들어, 개발 프로젝트를 합칠 때 리소스에 대한 통제가 원활하지 않으면 프리팹이 누락되거나 필드에 연결되지 않아 테스트 동작하는 데 문제가 발생할 수 있다. 이렇게 리소스에 대한 유연한 사용이 필요할 때 우리는 Resources 파일을 사용해주면 된다.

 

유저의 편의성을 위해 유니티는 내부적으로 특수 목적으로 동적 파일을 사용할 때 Resources라는 고정적인 이름을 가진 파일을 만들어서 저장하면, 동적 로드를 지원하는 기능을 제공하고 있다. Resources 파일에 저장된 데이터들은 동적으로 로드가 되어 파일을 건드리지 않기 때문에 프로젝트를 진행할 때 특정 메서드를 선언해 호출해줄 수 있다. 

 

예를 들어, bullet에 피격당한 적이 폭발하는 explosion 프리팹을 나타낼 때 다음과 같이 Resources 파일에 저장된 GameObject를 호출해줄 수 있다.

GameObject explosionFactory;
// explosionFactory = (GameObject)Resources.Load("Prefabs/Explosion"); 
explosionFactory = Resources.Load("Prefabs/Explosion") as GameObject ;

Resources.Load() 메서드는 기본적으로 Object 타입을 가지고 호출할 경로를 string 형식으로 작성해주어야 한다. 따라서 Resources 폴더 안 Prefabs 폴더에 있는 Explosion 프리팹을 가져오기 위해 "Prefabs/Explosion" 형식으로 path를 지정해주면 된다.

그리고 Object 타입 객체를 받기 때문에 실제로 로드해서 호출할 때는 TypeCasting(형 변환)을 해주어야 한다. explosionFactory를 GameObject 타입으로 선언했기 때문에 (GameObject) 또는 as GameObject로 형 변환해주면 된다.

 

유니티에서 제공하는 특수 폴더

Resources 파일을 사용한 동적 로드는 유니티에서 유저들의 편의성을 향상시킬 수 있는 기능으로 유니티가 가진 장점 중 하나라고 보면 된다. 유니티에서는 Resources 뿐만 아니라 비슷한 역할을 하는 특수 폴더 이름과 기능을 제공하고 있다.

Assets 유니티 프로젝트에서 사용하는 애셋이 포함되는 주  폴더
Editor 런타임 스크립트가 아닌, 에디터 스크립트로 간주하여 유니티 에디터에 기능을 추가하며 커스터마이징 
Editor Default Resources 요구가 있을 때 즉시 에셋 파일을 로드
Gizmos 씬 뷰에 그래픽스를 추가하여 원래는 보이지 않는 디자인 디테일을 시각화
Plug-ins 유니티의 기능을 확장하기 위해 포르젝트에 추가하는 네이티브 DLL(타사 코드 라이브러리, 시스템 콜, 기타 유니티 빌트인 기능 등)
Resources 씬에서 게임플레이에 사용할 에셋의 인스턴스를 만드는 대신 스크립트에서 온디맨드 방식으로 에셋을 로드
Standard Assets 스탠다드 애셋 패키지를 임포트하면 에셋 뿐만 아니라 스크립트 컴파일 순서에도 영향을 미침, 특수 폴더와 스크립트 컴파일 순서에 사용
StreamingAssets 파일을 타겟 기기의 특정 폴더로 그대로 복사되어 사용하기 위함
Hidden Assets 임포트 과정에서 유니티 Assets 폴더의 특정 파일 및 폴더를 완전히 무시

 

https://docs.unity3d.com/kr/2018.4/Manual/SpecialFolders.html

 

특수 폴더 이름 - Unity 매뉴얼

보통 Unity 프로젝트를 구성하기 위해 폴더를 생성할 때 원하는 이름은 무엇이든 선택할 수 있습니다. 그러나 몇 가지 폴더 이름의 경우 Unity는 해당 폴더의 내용이 특별한 방식으로 취급되어야

docs.unity3d.com

 

728x90