[Unity] unity assembly definition 사용해서 패키지 missing error 해결하기

박민주·2022년 1월 29일
0

Unity

목록 보기
17/40
post-thumbnail

새 프로젝트에 기존에 쓰던 에셋이랑 스크립트랑 다 옮기고 나니,
Console창이 Error로 도배가 됐다,,

보니까 외부 에셋도 그렇고 유니티에서 지원하는 TMPro랑 InputAction 등도 못 불러오는 문제였다

https://forum.unity.com/threads/cannot-find-unityengine-inputsystem.807645/
위 유니티 포럼에서 댓글에 적혀있는 방법들을 시도해보았다

처음에는 Preferences - External Tools에서 [Regenerate project files] 를 하는 방식을 시도했는데 안됐다 ㅜ

그리고 나서 다음 방법으로 assembly definition에 레퍼런스를 추가해서 해결할 수 있었다

Assembly definition 이 뭔데용,,

Unity documentation - 어셈블리 정의

  • 코드를 종속 관계가 있는 어셈블리로 분리하면, 스크립트 변경 시 종속된 어셈블리만 재빌드하여 컴파일 시간을 단축시킬 수 있음
  • 플랫폼과 Unity 버전별 코드가 포함된 프로젝트의 종속성 관리에도 유용
  • 어셈블리 정의가 없으면, Unity는 프로젝트의 모든 C#스크립트를 사전 정의된 어셈블리 하나에 컴파일함
  • 즉 스크립트를 변경하면 Unity는 프로젝트 전체의 모든 스크립트를 다시 컴파일 해야 함

그림에서 보면 왼쪽이 사전 정의된 어셈블리라서,
저렇게 되어 있는 경우 스크립트 하나가 수정되면 모든 C# 스크립트를 다시 컴파일 하느라 컴파일 시간이 오래 걸린다는 것 같다
그리고 오른쪽처럼 종속 관계를 잘 정리해서 어셈블리로 분리하면,
서로 연관이 있는 스크립트만 다시 컴파일하면 되서 컴파일 시간이 단축된다는 것 같다

위 그림에서 Main.dll 어셈블리는 Stuff.dll과 ThirdParty.dll 에 종속되어 있는 상태이다.
따라서 Main.dll 코드 변화 시, 다른 어셈블리를 재컴파일 할 필요가 없다.
만약 Stuff.dll 코드가 변경되면 Main.dll과 Stuff.dll 만 재컴파일 하면 된다.


나의 경우에는 컴파일 시간 단축을 위해 사용한 기능은 아니지만,
덕분에 Assembly definition 이라는 것도 알게 되었다
코드 좀 정리되면 컴파일 시간 단축 시키는 것도 도전해볼까 싶당

profile
Game Programmer

0개의 댓글