EveryDay.DevUp

[Unity] Unity Custom Package ( 유니티 커스텀 패키지 ) 본문

Unity

[Unity] Unity Custom Package ( 유니티 커스텀 패키지 )

EveryDay.DevUp 2020. 6. 15. 23:32

Unity 프로젝트에서 다른 프로젝트로 어셋의 내용을 옮길 때 기존에는 Export Package를 사용하였다.

어셋의 포함된 리소스 및 스크립트를 Unity Package로 묶어서 내보낼 수 있었고, 다른 프로젝트에서 Import하는 것만으로 쉽게 프로젝트의 내용을 옮길 수 있었다.

[ Export Package Menu ]
[ Export Package 팝업 ]

하지만 Unity의 기반이 패키지 형태의 기능 배포로 변하면서 기존의 Export Package에서의 한계점이 발생한다.

예를들어 Unity Package의 Addressable Package를 코드에 사용한다고 가정할 때, 기존의 Export Package에서는 Addressable Package까지 함께 Package로 묶이지 않아 다른 프로젝트에서 Import했을 때 에러가 발생한다.

using UnityEngine;
using UnityEngine.AddressableAssets;

public class TestA : MonoBehaviour
{
	private void Start()
	{
		Addressables.LoadAsset<GameObject>( "" );
	}
}

[ TestA 스크립트를 Export 하여 Unity Package를 생성 ]
[ Package 생성 ]
[ Package를 Import ]
[ Addressable Package가 없다는 에러 발생 ]

Addressable Package를 사용한 Package를 다른 프로젝트에서 Import하면 에러가 발생하는데, 쉽게 에러를 해결하려면 Addressable Package를 Import하면 해결된다.

필요한 Package를 Import하는 것만으로 쉽게 해결이 가능하지만, 이런 Pakcage가 1개가 아닌 여러개인 경우 프로젝트를 셋팅하는데 어려움이 있을 것이다. Unity Package를 사용하여 Import한 이유는 쉽게 다른 프로젝트에서 사용하기 위함인데, Package로 인해 설정이 더 복잡해진다.

Unity에서는 위의 문제를 해결할 수 있도록 Unity에서 제공하고 있는 Package와 동일한 Package를 만들 수 있도록 제공하고 있다. 

해당 방법을 사용하면 Unity의 공식 패키지 관리 시스템을 사용할 수 있고, 이 방법을 Custom Package ( 커스텀 패키지 )라고 한다.

● Custom Package ( 커스텀 패키지 ) 생성 방법

▶ 프로젝트 폴더에 하위에 Packages 폴더에 생성할 Custom Package의 폴더를 생성한다

: Desktop\Study\packateTest\Packages\com.addressable.extends 

▶ 만든 폴더 하위에 package.json 파일을 생성한다.

[ package.json파일 생성 ]

▶ package.json 파일에 다음과 같이 name과 version을 입력한다.

{
	"name" : "com.addressable.extends",
	"version" : "0.1.0"
}

▶ Unity 프로젝트 창에 Packages/Custom Package 가 생성된 것을 확인할 수 있다.

▶ 다른 프로젝트에서 만든 Custom Package를 Package Manager를 통해서 Import 한다.

[ Add package from disk 선택 ]
[ Custom Package의 package.json 파일 선택 ]

▶ 다른 프로젝트의 Custom Package가 추가된 것을 알 수 있다.

위의 설명한 Custom Package 생성 방법은 기본적인 흐름을 보여주기 위한 것으로 Custom Package의 세부 기능에 대한 설명은 다음과 같다.

● Custom Package ( 커스텀 패키지 ) 추가 설명

▶ Package 명명 규칙

: Package에는 에디터에서 보여지는 이름과, 등록되는 이름이 있다.

: 보여지는 이름은 제한이 없지만 패키지에 포함된 내용을 암시할 수 있으면서 길이가 길지 않아야한다.

: 등록되는 이름은 com.<company-name>으로 시작해야하며 소문자, 숫자, 하이픈(-), 밑줄(_), 마침표(.)만 사용할 수 있다.

▶ Package 레이아웃

: 붉은 글씨로 표시한 부분이 기본적으로 Custom Package를 만드는데 필요한 정보이다.

[ Custom Package 레이아웃 정의 ]

▶ package.json 속성 정의

: name 은 공식적으로 등록되는 패키지의 이름으로 패키지 명명 규칙의 규칙을 따른다.

: version은 패키지의 버전 정보를 나타내는 것으로 ( MAJOR.MINOR.PATCH )의 규칙을 따른다.

name과 version은 package.json에 필수적으로 정의가 되야한다.

: displayName 은 에디터 상에서 표시되는 이름이다.

: description은 에디터 상에서 표시되는 간략한 설명이다.

: unity는 패키지와 호환 가능한 가장 낮은 Unity 버전을 표시하는데, 만약 해당 정보를 입력하지 않으면 모든 버전과 호환된다고 간주 된다.

: unityRelease는 패키지가 호환 가능한 특정 Unity의 release 버전을 정의할 수 있다.

: dependencies는 패키지의 종속성을 나타내는 것으로, 해당 종속성을 정의하면 다른 프로젝트에서 package를 import할 때 종속성에 있는 패키지를 같이 import한다.

: type 은 해당 패키지의 특징을 정의한 것으로 Unity에서 제공하는 타입값을 사용한다.

: author는 만든 사람의 대한 정보를 정의한다.

해당 필드를 어떻게 사용하고 있는지에 대해서는 Unity에서 기본적으로 제공하는 패키지들의 package.json 파일을 확인해보면 알 수 있다.

{
  "name": "com.unity.2d.animation",
  "version": "3.2.1",
  "unity": "2019.3",
  "unityRelease": "0b11",
  "displayName": "2D Animation",
  "description": "2D Animation provides all the necessary tooling and runtime components for skeletal animation using Sprites.",
  "keywords": [
    "2d",
    "animation"
  ],
  "category": "2D",
  "dependencies": {
    "com.unity.2d.common": "2.0.2",
    "com.unity.mathematics": "1.1.0",
    "com.unity.2d.sprite": "1.0.0"
  },
  "relatedPackages": {
    "com.unity.2d.animation.tests": "3.2.1",
    "com.unity.2d.common.tests": "2.0.2"
  },
  "samples": [
    {
      "displayName": "Samples",
      "description": "Various 2D Animation sample scenes to show different usage of the 2D Animation tooling for various outcomes.",
      "path": "Samples~/AnimationSamples"
    }
  ],
  "repository": {
    "footprint": "ffbdd659683086d12d90f3392339a1deae885c2b",
    "type": "git",
    "url": "https://github.cds.internal.unity3d.com/unity/2d.git",
    "revision": "593d41e13b012dcbf3592feaa001448db1ea78a5"
  }
}

 

실제 Custom Package를 활용한 예제 

https://everyday-devup.tistory.com/85

 

[Unity] 프레임워크 개발 - Custom Package 생성

기존에 사용하던 v.0.0.1 프레임워크 패키지에서 v.0.1.0으로 프레임워크 패키지로 업그레이드하면서, Unity의 Addressable 패키지를 사용하게 되었다. Addressable 패키지를 사용함에 따라 v.0.1.0 프레임워�

everyday-devup.tistory.com

 

※ asmdef 파일이 무엇인지 궁금하다면 하단의 글을 참조하면 된다.

https://everyday-devup.tistory.com/79

 

[Unity] Assembly definition files ( 어셈블리 정의 파일 )

Unity는 기본적으로 Assembly-CSharp과 Assembly-CSharp-Editor 어셈블리를 가지고 있다. 기본적으로 Asset에 있는 스크립트 파일은 Assembly-CSharp에 묶이고, Editor 폴더 안에 있는 스크립트 파일은  Assembl..

everyday-devup.tistory.com

참고 자료 : https://docs.unity3d.com/kr/current/Manual/CustomPackages.html

 

커스텀 패키지 생성 - Unity 매뉴얼

Unity 패키지 관리자는 Unity의 공식 패키지 관리 시스템으로 다음과 같은 기능을 수행합니다.

docs.unity3d.com