컴파일 타임이 길어지면 손놓고 멍때리게 되는데

내 경우 컴파일 타임 그 잠시를 못 버텨서 디시를 뒤적거림.
그래서 이런 저런 방법을 시도해보았는데, 오늘은 그 중 하나인 '컴파일 정의' 를 논해보갔슴.
원리는 간단함. 유니티는 컴파일할때 Asset 파일을 싹 다 뒤져서 코드들을 찾고, 이걸 일일이 다 컴파일함. 당연히 느리겠지?
이걸 '어셈블리' 라는 덩어리로 묶어서 코드가 바뀐 부분만 컴파일 하자! 그럼 빨라지겠지?
라는게 '어셈블리 정의' 라는 것임.

( Justice! assemble! 이런거 아님...)

https://docs.unity3d.com/kr/2017.4/Manual/ScriptCompilationAssemblyDefinitionFiles.html

(뭔가 무안단물같은 사용후기.jpg)
적용 방법은 간단함.
1. 내 스크립트들이 들어있는 폴더에서 우클릭 > create 로 Assembly Definition

이렇게 하면 됨.
2. 어셋 쓰는것들을 어떤 폴더 (내 경우에는 Plugin 폴더를 만들어서 것다 쳐박음) 에 싹 모은 후
해당 폴더에서 역시 우클릭으로 PlugIn 이라는 (이름은 사실 아무래도 상관없음) 어셈블리 정의파일을 만들어 주면 됨.

3. 내 스크립트는 당연히 PlugIn 에 대해 의존성을 가지니까 (그거 없으면 내 스크립 안 돌아가잖아? 그걸 의존성이라 캄)
내 어셈블리 정의에서 의존성을 추가해주면 된다.

그럼 다 되었느냐? 아님.
나도 저렇게만 하면 알아서 다 되는 줄 알았음 ㅅㅂ...
여기서 중요한게, 여기까지 한 후 VS 켜서 솔루션에 Assembly-Csharp가 있으면 안됨. (보통 있게 마련)
이게 뭐냐면, 어셈블리 정의 안 했을 때 유니티 솔루션 열면 Assembly-Csharp, Assembly-Csharp-editror, 어쩌고... 하면서 4개 생기잖아?
이게 "왜 생기냐면" (중요) 유니티가 어셋폴더를 싹 뒤져서 cs 파일이 있으면 '프로젝트 하나 만들야 쓰겄다' 하고 '유니티가 스스로 만든 프로젝트' 임.
이걸 만들려면, 당연히 폴더를 싹 뒤져야 하고, 모든 의존성 체크를 해야 함. 그래서 저놈들이 있는 한 컴파일 타임이 빨라지지 않는다.
어셈블리 정의를 만든 후에 Assembly-Csharp폴더가 보이면, 해당 프로젝트 클릭해서 무슨 파일이 들어있나 확인 해야 함.


인붕이들 이렇게 어셋 루트파일에 많이 만들거야.
이런 거 있으면 정서적으로도 좋지 않으니까
내 스크립트 파일로 보내거나 삭제하도록 하자.

Assembly-Csharp이 없어졌으면 성공.
이렇게 '모든 스크립트들을 어셈블리 정의들로 덮으면' 드디어 어셈블리 정의가 주는 컴파일 속도 향상을 받을 수 있음.
(어렵다...)
-끗-

(고작 몇 초 아낄려고 이런 어려운 걸 굳이 해야해요?)
(김씨 입 그만 놀리고 삽질이나 마저 혀)
마지막으로 또 한가지 알아둬야 할 게, 앞에서 어셈블리 정의들은 의존성을 가진다고 했잖아?
내 어셈블리(PDC) 가 플러그인에 의존성을 가지지?
이 경우 내 어셈블리의 코드만 수정할 경우 -> 내 어셈블리만 컴파일 함 -> 빠름!
플러그인의 코드를 혹시라도 수정할 경우 -> 플러그인 컴파일함 -> 내 어셈블리도 컴파일함 -> 느림...
즉 의존성을 주는 코드를 수정하면 그 의존성을 필요로 하는 어셈블리도 같이 컴파일 되서 별로 빨라지지 않는다는 걸 알아둬야 해.
(말이 존나 어렵네 ㅅㅂ.)
그리고 어셈블리 정의를 너무 많이 만들면 유니티가 좀 띨빵해서 의존성 체크하느라 1~2초 정도 잡아먹어...
어셋의 코드는 당연히 안 건드리니 어셋들을 묶어서 어셈블리 정의 한개로 퉁치는 것 만으로도 컴파일 타임은 크게 줄일 수 있을거야!
그러니 너무 많이 만들지 말고...
내 경우에는 이런 삽질을 해서 평균 14초 + 걸리던 컴파일을 8초대로 줄이는데 성공함.
그냥 UI 스크립 같은거 조금 고치는 건 5~6초만에 되기도 해서 집중하기 좋아졌네.
근데 왜 계속 디시질일까? ㅅㅂ
--------------------------------------------------------------------------------------------------------
더 자세히 알고싶은 인붕이들은 다음 링크들을 참조하자.
Assembly Definition increasing compile time a lot, not decreasing
https://forum.unity.com/threads/assembly-definition-increasing-compile-time-a-lot-not-decreasing.518285/
How I Cut Unity Compile Times by 75%
http://www.screaminggoose.com/blog/2019/2/4/how-i-cut-unity-compile-times-by-75
컴파일 타임을 유니티 에디터에 찍어줌
https://github.com/DarrenTsung/DTCompileTimeTracker

댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.