유니티를 하면 한번쯤 접해본 Assembly definition을 이번 프로젝트를 하면서 사용하게 되어서 다루어 볼려고 한다.
자세한 내용은 공식 문서를 참고하자!
https://docs.unity3d.com/kr/2019.4/Manual/ScriptCompilationAssemblyDefinitionFiles.html
어셈블리 정의 - Unity 매뉴얼
프로젝트의 스크립트를 어셈블리에 정리하기 위해 어셈블리 정의를 만들 수 있습니다. 폴더에 어셈블리 정의 에셋을 만들면 Unity는 폴더의 모든 스크립트를 이용하여 별도의 관리되는 어셈블리
docs.unity3d.com
이거 뭐임?
정확히는 Assembly Definition이란 용어는 그 기능에 대한 명칭이고, 사실은 파일을 Assembly Definition Files(줄여서 asmdef, 혹은 adf)라고 부른다고 한다
Unity는 기본적으로 대부분의 스크립트를 Assembly-CSharp.dll라는 미리 정의한 어셈블리로 컴파일하지만, adf로 정의한 스크립트는 별도의 dll로 취급되므로 모듈성과 재사용성이 올라간다.
유니티도 Package를 뜯어보면 Adf를 사용하고 있는 것을 볼 수가 있다.
좋은 건 알겠다 어케씀?
먼저 필자는 유니티 6버전을 사용 했음 알린다.
Create -> Scripting -> Adf가 있을 것이다.
아래 플랫폼 부분을 따로 다루기로 하고 당장은 어떻게 사용하는 지에 대해서 알아 보겠다. 일단 Adf를 사용함과 동시에 별도의 dll로 취급되기 때문에 엄청난 버그가 생길 것이다. 그것도 일단 내버려 두고 설정을 보자 사실 자주 쓰는 옵션은 Root Namespace와 AssemblyDefinition Ref 부분을 많이 사용한다.
`Root Namespace는 Script를 생성할 때 자동으로 어떤 Namespace를 설정할 지 정해주는 부분이다.
ADFR은 다른 ADF를 참조 하기 위해서 필요하다. 예를 들어 내가 UI 관련 코드를 짜고 있는데 특정 Manager를 불러와야 하는 경우가 있다. 하지만 별도의 ADF로 되어 있다면 참조가 불가능하다. 따라서 이때 ADFR에 Manager ADF를 넣어준다면 그때 참조가 가능해진다.
좋은 예시
Adf는 별도로 분리 해서 컴파일 한다고 했는데 하나의 Adf만 사용한다면 그거 만큼 멍청만 행동도 없을 것이다. 따라서 역할에 따라서 분류를 하는 것이 가장 이상적이다. ex) LJS.UI, LJS.Player, LJS.Core
그리고 순환참조가 일어나면 안된다. 순환 참조가 무엇인가.
서로가 서로를 계속 참조해서 무한으로 참조되는 경우를 말한다. 이경우에 Header 파일 컴파일 때 버그가 나므로 순환 참조는 해서는 안된다. ex) LJS.Test의 ADFR에 LJS.Test2를 넣었는데 LJS.Test2의 LJS.Test를 넣는 경우
사용하면 편한 점
일단 Namespace 자동으로 써주는 기능이 엄청 편하다. 이게 쓰기 귀찮은 경우가 있는 저때 쓰면 편하다. (Namespace 쓰기 귀찮으면 쓰기도 한다. 물론 필자 기준..) 그리고 스크립트를 종류 별로 분류 하는게 쉬워진다. 그래서 그런지 SOILD 원칙의 S를 자동으로 지키게 되는 현상이 있다. (물론 필자 기준..)
마무리 하며
여러명이서 프로젝트를 하는 경우 대량의 Script가 생기게 되는데 이때는 컴파일 많이 많이 느려질 수도 있어서 Adf 사용을 권장하고 싶다. 이번 졸작을 통해서 Adf의 중요성을 다시 한번 깨닫게 된 것같다.
'Unity' 카테고리의 다른 글
[Unity] 2D 환경에서 점프 구현 (y축 이동이 구현되어 있을 때) (0) | 2025.03.17 |
---|---|
[졸업작품, Unity] ItemSystem 구조 수정 (0) | 2025.03.14 |
[졸업작품, Unity]아이템 시스템 수정 (0) | 2025.03.09 |
[졸업작품, Unity] 결과창 제작 (0) | 2025.03.06 |
[졸업 작품, Unity]Item System 제작 (0) | 2025.03.04 |