UPM (Unity Package Manager) 란?
UPM은 프로젝트에 필요한 기능등을 모듈단위로 분리해 기능을 제작하고 Package Manager를 통해 편리하게 다운로드해 사용할 수 있는 Unity 기능.
UPM을 사용하지 않는다면 '.unityproject'를 받아 import하여 내 로컬 프로젝트의 Assets 폴더 아래에 들어가게 되어 외부 패키지를 삭제해야 하거나 할때면 일일이 찾아서 삭제해야 하는 불편함이 존재했음
그러나 UPM을 사용하면 패키지들이 패키지 단위로 묶여있고 독립적으로 관리되어 필요할 때 패키지를 업데이트하고 삭제할 수 있어 프로젝트를 깔끔하게 유지할 수 있다.
Custom Package를 UPM으로 만드는 방법
처음엔 Unity Project에서 내가 만들고자 하는 Unity Package를 만든다. 그리고 그 후 만든 Unity Package를 UPM으로 만들기 위해선 UPM의 Package Layout 규칙대로 리소스 및 코드를 맞춰야 한다.
필자의 경우 여기에서 많이 햇깔렸었는데 .unitypackage로 내가 만든 plugin을 배포할때는 Unity에서 plugin 개발 후 Export Package로 Export만 하면 됐는데 UPM을 사용할 경우 유니티 프로젝트 자체가 필요가 없고 내가 만든 plugin에 있는 리소스와 코드를 따로 가져와 UPM 구조에 맞게 재배열해야 했다. 완전한 분해와 재배열을 해야한다.
이해하기 쉽게 필자가 만든 UPM Unity SDK를 하나 예제로 가져와 그 예제를 통해 UPM을 만드는 과정을 보겠다.
1. Unity Plugin 개발 단계
UPM으로 변환전 Plugin 개발단계에서의 Project Structure이다
이걸 UPM Layout 구조로 변경해야 한다
2. UPM Layout 구조로 재구축
UPM Layout 구조
위와 같은 구조로 프로젝트를 설정해야 한다 각각의 기능에 대한 설명은 아래 링크를 참조하자
https://docs.unity3d.com/kr/2021.1/Manual/cus-layout.html
UPM Structure에 맞게 폴더 및 파일들을 추가하고 기존 코드는 새로만든 Runtime 폴더 아래에 둔다
Assembly Definition 생성
Package내 Script가 있는 경우 반드시 어셈블리 정의 파일(.asmdef)를 생성해야 함
Create > Assembly Definition 클릭 후 어셈블리 정의 파일 생성
Assembly 정의 파일 생성 위치 및 디자인 가이드 라인
1. [Editor 폴더] 어셈블리 정의 파일 : Editor/MyCompany.MyFeature.Editor.asmdef
2. [Runtime 폴더] 어셈블리 정의 파일 : Runtime/MyCompany.MyFeature.Runtime.asmdef
3. [Tests 폴더]의 Editor & Runtime 어셈블리 정의 파일
- Tests/Editor/MyCompany.MyFeature.Editor.Tests.asmdef
- Tests/Runtime/MyCompany.MyFeature.Runtime.Tests.asmdef
참조
https://docs.unity3d.com/kr/2021.1/Manual/cus-asmdef.html
package.json 작성
package.json을 작성하여 패키지의 특정 버전에 관한 정보를 관리
package.json은 패키지에 관한 중요 정보를 담고 패키지의 루트에 위치
아래는 package.json의 예시
{
"name": "com.unity.example",
"version": "1.2.3",
"displayName": "Package Example",
"description": "This is an example package",
"unity": "2019.1",
"unityRelease": "0b5",
"documentationUrl": "https://example.com/",
"changelogUrl": "https://example.com/changelog.html",
"licensesUrl": "https://example.com/licensing.html",
"dependencies": {
"com.unity.some-package": "1.0.0",
"com.unity.other-package": "2.0.0"
},
"keywords": [
"keyword1",
"keyword2",
"keyword3"
],
"author": {
"name": "Unity",
"email": "unity@example.com",
"url": "https://www.unity3d.com"
}
}
[필수 프로퍼티]
- name : 공식적으로 등록되는 패키지 이름. 역순 도메인 이름 표기법을 사용하는 Unity 패키지 관리자 명명 규칙을 준수, 이 이름은 고유식별자로 PackageManager 창의 리스트 뷰에 나타나는 사용자 친화적 이름은 아님
- version : 패키지 버전 숫자(MAJOR.MINOR.PATCH)
[의무 프로퍼티]
기술적으로는 선택사항이지만 패키지를 쉽게 검색하고 사용자에게 더 나은 경험을 제공하기 위해서는 값을 지정하는게 좋은 프로퍼티
- description : 패키지에 대한 간략한 설명, 이 텍스트는 Package Manager창의 세부 정부 뷰에 나타남
- displayName : Unity Editor에 표시되는 사용자 친화적 이름
- unity : 패키지와 호환 가능한 가장 낮은 unity 버전을 표기
[옵션 프로퍼티]
선택 사항 프로퍼티로 아래 참조를 참고
참조
https://docs.unity3d.com/kr/2021.1/Manual/upm-manifestPkg.html
3. UPM Structure만 남기고 나머지 다 제거
여기까지 git에 commit을 한 후 git에서 따로 branch를 만든다. 필자의 경우 upm으로 브랜치 생성
upm structure 구조를 가장 root directory로 옮기고 나머지는 전부 제거한다
그 후 Git에 올린다
3. UPM 으로 해당 패키지를 받는 방법
Github에 오른쪽 상단의 Code를 눌러 HTTPS 탭의 web url을 복사한다
Unity의 Package Manager에 들어가 Add package from git URL을 클릭 복사한 url을 입력하고 upm이 적용된 브랜치는 upm 브랜치이니 url 마지막에 #upm을 추가한다
Ex] https://github.com/DevCoop-code/llama.unity.git#upm
다음과 같이 Unity Package Manager에 뜨는걸 확인할 수 있고 설치하면 사용 가능해진다
'Unity' 카테고리의 다른 글
Unity Animation Rigging - Two Bone IK Constraint 사용방법 (12) | 2024.11.11 |
---|---|
Generic Animation Type의 3D Model에 Avatar Mask 적용시키는 방법 (0) | 2024.11.07 |
[Unity] PostProcessing (0) | 2024.07.11 |
[Unity] Animator Component의 Root Motion 이란? (0) | 2024.07.10 |
Unity 3D Object Drag & Drop (0) | 2024.06.04 |