프로그래밍/예전글
Unity 빌드할 때 유의사항
Cat체셔
2015. 6. 3. 15:13
Unity 빌드 시, 유의할 점
- Plugins 폴더
- 빌드를 수행할 때, 자동으로 Plugins폴더 안의 Android, iOS 폴더안에 있는 "특정" 소스파일이나 리소스파일들을 프로젝트에 추가해줍니다. iOS같은 경우는 Header search path까지 연결해줍니다.
- 문제는 한 프로젝트로 여러가지 빌드(서로 다른 플러그인을 사용하는)를 뽑을 때 문제가 된다는 것! 잘 삭제 해주지 않으면 쓸데없이 용량을 잡아먹게됩니다.(자동화할때 유의해주세요.)
- PostprocessBuildPlayer
- Plugins 폴더에 넣어놓는다고 하더라도 "특정"파일만 넣는 성격때문에 누락되는 파일들이 있습니다. 손으로 넣어주시는 분들은 상관 없지만 자동화할 땐 엄청난 불편함으로 다가옵니다. 그럴때 이것을 사용합니다.(전 모듈로 mod_pbxproj.py를 사용합니다. 엄청 편해요~)
- 문제는 Assets/Editor폴더 안에 있는 단 한개의 PostprocessBuildPlayer만 실행이 된다는것입니다. 사용할 PostprocessBuildPlayer들을 PostprocessBuildPlayer_*로 이름을 변경한 후, 메인 PostprocessBuildPlayer가 PostprocessBuildPlayer_*를 전부 찾아 실행해주면 됩니다.
- 말로하니 복잡하네요. 아래의 소스코드를 참고해주세요.
===========================================================================
#!/usr/bin/python
import sys
import subprocess
import glob
import os
def main(argv):
paths = glob.iglob( 'Assets/Editor/PostprocessBuildPlayer_*' )
for path in paths:
if os.path.splitext(path)[1] != '.meta':
os.chmod( path, 0755 )
subprocess.call( [os.path.realpath(path), sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5]] )
if __name__ == "__main__":
main(sys.argv)
===========================================================================
- il2cpp
- 유니티에서 64bit지원을 위해 부랴부랴 내놓은 아이입니다. il2cpp로 빌드를 하시고 Architecture를 Universial 혹은 ARM64로 설정해 놓아야 64비트 지원이 됩니다.
- C#을 빌드하면 나오는 IL파일을 cpp파일로 변환해주는 역할을합니다. Classes 폴더 하위에 Native폴더가 생기네요. 그 안의 파일들을 둘러보긴 했지만... 여하튼 소스가 많이 생겼습니다.
- 문제점
- 일단 실행파일 용량이 늘어납니다.(소스량이 적다면 조금 늘어나거나 안늘어날 수도 있습니다.)
- 컴파일 시간이 길어집니다.(Unity에서의 컴파일 시간은 의외로 느리지 않은데 xcode에서 빌드시 cpp파일을 전부 빌드해줘야하기 때문에 그로인해 컴파일 시간이 길어집니다.
- mono_domain같은 c++에서 c#함수를 가져다 사용할 수 있게해주는 함수를 사용하지 못합니다.
- 해결방안
- 늘어난 용량은 코드최적화 레벨을 올려주면(ex, strip assembly) 약간 줄어듭니다만 기대치는 낮습니다.
- 컴파일 시간은 그냥 감내해야된달까요....
- 해당 부분은 유니티에서 권장하는 UnitySendMessage를 사용하면 되지만 느립니다. Object와 함수명을 string으로 찾아서 사용하는 방식이기 때문에 빈번하게 불리는 환경이 아니면 이것을 사용해줍니다.
- 빈번하게 사용하는 환경이라면 MonoPInvokeCallback를 사용해줍니다.