게임엔진/유니티

예약된(?) 폴더 이름과 Application의 Path들

tsyang 2022. 9. 25. 14:54

특수 폴더 이름


유니티는 아래의 몇몇 폴더 이름을 특수한 목적을 위해 예약해 두고 있다. (개발 언어의 예약어처럼) 

  • Assets
  • Editor
  • Editor default resources
  • Gizmos
  • Plugins
  • Resources
  • Standard Assets
  • StreamingAssets

 


"Assets"

Assets는 유니티 프로젝트에서 쓰이는 에셋들을 담고 있는 주 폴더이다. 대부분의 API가 모든 에셋이 여기에 있다고 가정하고 있다.

 

 

"Editor"

Editor 폴더 안의 스크립트는 에디터 어셈블리에 포함된다. 따라서 런타임에 읽을 수 없다. Editor 폴더는 여러 개가 될 수 있다.

 

 

"Editor Default Resources"

에디터에서만 사용할 리소스들을 모아두는 폴더. 에디터 전용이기 때문에 빌드에는 포함되지 않는다. 단 하나의 폴더만 존재할 수 있고 Assets 폴더 바로 안 루트에 배치해야 한다.

 

 

"Gizmos"

Gizmo에 쓸 에셋들을 모아두는 폴더. Gizmos.DrawIcon 함수에서 사용할 이미지들은 이 폴더 안에 있어야 한다. 마찬가지로 에디터 전용이라 빌드에 포함 안 됨. Assets 폴더 바로 안 루트에 배치해야 한다.

 

 

"Resources"

스크립트에서 에셋을 온디맨드 형식으로 로드하고자 한다면 에셋을 "Resources"폴더 안에 두면 가능하다. 이런 에셋들은 Resources.Load 함수를 이용하여 쓸 수 있다. 여러 개의 폴더를 생성할 수 있으며 Resource 폴더의 하위 폴더에 에셋을 넣어도 된다. 만약 Editor의 하위 폴더에 "Resources"폴더가 있다면 그 안의 에셋들은 에디터 전용으로 간주되어 에디터에서 로드할 수 있게 되지만 빌드에는 포함되지 않는다.

 

 

"(Pro )Standard Assets"

스탠다드 에셋 패키지를 임포트 하면 이 폴더에 저장이 된다. 기본 어셈블리보다 빨리 컴파일된다.

 

 

"Streaming Assets"

스트리밍 에셋이란 타겟 플랫폼의 특정 폴더에 있어서 유니티가 필요할 때 접근할 수 있는 에셋이다. 예를 들어 특정 엔딩 분기에서 100MB짜리 동영상을 틀어야 하는데 이걸 애초에 씬 로드 때 로드하는 건 이상하다. 따라서 필요할 때 동영상을 로드하는 게 좋은데 이럴 때 쓰이는 게 스트리밍 에셋이다.

 

이곳에 있는 에셋들은 유니티 전용 포맷으로 임포트 되지 않는다. 

 

아무튼 이 폴더 안에 있는 에셋들은 설치 시 타겟 플랫폼의 특정 폴더로 복사된다. (Video Player 등에서 접근할 수 있도록)

 

 

안드로이드 관련

".androidpack" 혹은 ".androidlib"으로 끝나는 폴더들은 안드로이드 커스텀 에셋이나 라이브러리로 간주된다. 

 

 

히든 에셋

유니티에서는 다음의 폴더들은 임포트 대상에서 제외한다.

 

  • 숨겨진 폴더
  • '.'으로 시작하는 파일 및 폴더
  • '~'으로 끝나는 파일 및 폴더
  • cvs라는 이름의 파일 및 폴더
  • .tmp확장자를 가진 파일

 

 

폴더별 어셈블리와 실행 순서

폴더의 위치에 따라 어셈블리도 바뀌고 실행 순서도 바뀌게 되는데 다음 순서로 실행된다.

 

실행 순서 어셈블리 이름 타겟
1 Assembly-CSharp-firstpass Standard Assets폴더에 있는 스크립트나 Plugins들이 여기에 속한다.
2 Assembly-CSharp-Editor-firstpass Standard Assets폴더 안의 Editor 폴더에 있는 스크립트나 플러그인
3  Assembly-CSharp 대부분의 스크립트 
4  Assembly-CSharp-Editor "Editor"폴더 안에 있는 스크립트 들

 

 

 


 

 

Application.path들


Application클래스에서는 총 4개의 path를 제공하는데 다음과 같다.

  • Application.dataPath
  • Application.persistentDataPath
  • Application.temporaryCachePath
  • Application.streamingAssetsPath

 

Application.dataPath

이건 그냥 게임이 저장된 폴더를 가리킨다. 예를 들어 안드로이드 타겟에서는 APK 파일의 위치를 가리킨다. 주의할 점은 iOS에서는 이 공간이 읽기 전용이다. 따라서 파일을 디바이스에 저장할 때 이 경로로 하면 안드로이드에서는 잘 되는데 iOS에서는 안 되는 문제가 발생한다. 뭔가 데이터를 저장하고자 한다면 아래의 persistentDataPath를 써야 한다.

 

 

Application.persistentDataPath

디바이스의 Public Directory를 가리킨다. 따라서 런타임에 파일 읽기/쓰기가 가능하다. 또한 이름에서 유추할 수 있듯 persistent 하다. 앱이 업데이트되어도 이곳에 있는 파일들은 제거되지 않는다. 

 

 

Application.streamingAssetsPath

위에서 다룬 "Streaming Assets"폴더의 경로를 가리킨다.

 

 

Application.temporaryCachePath

문자 그대로의 임시 캐시에 대한 폴더. 어디선가 OS에 의해 삭제될 수 있다고 본 것 같은데 출처를 못 찾겠음. 

 

 


참고 : 

https://docs.unity3d.com/2021.3/Documentation/Manual/SpecialFolders.html

https://answers.unity.com/questions/1181652/difference-between-applicationpersistantdatapath-v.html