Unity 공식 문서 해설: 커스텀 패키지 생성
이 문서는 Unity의 커스텀 패키지를 생성하는 과정과 패키지 레이아웃에 대해 설명합니다. 패키지는 코드를 구성하는 좋은 방법으로, 충돌을 줄이고 재사용성을 높이는 데 도움을 줍니다.
커스텀 패키지 레이아웃
커스텀 패키지를 만들 때 권장하는 기본 구조는 다음과 같습니다:
<root>
├── package.json
├── README.md
├── CHANGELOG.md
├── LICENSE.md
├── Third Party Notices.md
├── Editor
│ ├── [company-name].[package-name].Editor.asmdef
│ └── EditorExample.cs
├── Runtime
│ ├── [company-name].[package-name].asmdef
│ └── RuntimeExample.cs
├── Tests
│ ├── Editor
│ │ ├── [company-name].[package-name].Editor.Tests.asmdef
│ │ └── EditorExampleTest.cs
│ └── Runtime
│ ├── [company-name].[package-name].Tests.asmdef
│ └── RuntimeExampleTest.cs
├── Samples~
│ ├── SampleFolder1
│ ├── SampleFolder2
│ └── ...
└── Documentation~
└── [package-name].md
각 파일의 역할
| 파일명 | 설명 |
|---|---|
| package.json | 패키지의 종속성과 메타데이터를 정의합니다. |
| README.md | 패키지에 대한 문서로, 개발자가 패키지를 수정할 때 참고합니다. |
| CHANGELOG.md | 패키지의 변경 이력을 기록합니다. Keep a Changelog와 같은 포맷을 사용하는 것이 좋습니다. |
| LICENSE.md | 패키지의 라이선스 정보를 포함합니다. |
| Third Party Notices.md | 법적 요구 사항에 대한 정보를 포함합니다. |
| Editor/ | 에디터 관련 에셋을 저장하는 폴더로, 에셋 임포트에 영향을 미치지 않습니다. |
| Runtime/ | 런타임 관련 에셋을 저장하는 폴더입니다. |
| Tests/ | 패키지의 모든 테스트를 포함하는 폴더입니다. |
| Tests/Editor/ | 에디터 관련 테스트를 저장하는 폴더입니다. |
| Tests/Runtime/ | 런타임 관련 테스트를 저장하는 폴더입니다. |
| Samples~ | 패키지에서 사용할 수 있는 샘플을 저장하는 폴더입니다. |
| Documentation~ | 패키지에 대한 문서를 저장하는 폴더입니다. |
패키지 만드는 방법
- 패키지 구조 설정: 위의 레이아웃에 따라 디렉토리를 생성합니다.
- 메타데이터 작성:
package.json파일을 생성하고 패키지의 이름, 버전, 종속성 등을 정의합니다. - 코드 작성:
Editor및Runtime폴더에 필요한 C# 스크립트를 추가합니다. - 테스트 추가:
Tests/Editor와Tests/Runtime폴더에 각각 테스트 케이스를 작성하여 패키지가 올바르게 작동하는지 검증합니다. - 문서화:
README.md와Documentation폴더에 관련 문서를 작성하여 사용법을 제공합니다.
추가 예제
예를 들어, 새로운 Unity 패키지를 만들면서 간단한 기능을 포함하려면 다음과 같은 내용을 추가할 수 있습니다:
- 기능 설명: 이 패키지는 2D 게임에서 적을 스폰하는 기능을 가진 스크립트입니다.
- 사용법: 패키지를 설치한 후 적 스폰 위치를 설정하고 스폰 시간을 조정하는 옵션을 제공합니다.
- 예제 코드:
public class EnemySpawner : MonoBehaviour
{
public GameObject enemyPrefab;
public float spawnTime = 5f;
void Start()
{
InvokeRepeating("SpawnEnemy", spawnTime, spawnTime);
}
void SpawnEnemy()
{
Instantiate(enemyPrefab, transform.position, Quaternion.identity);
}
}
이러한 방식으로 패키지를 구성하면 쉽게 다른 프로젝트에 재사용할 수 있으며, 팀 내에서 코드를 공유하는 데 유용합니다.