Unity2018 Assetbundle (어셋번들 + 암호화 + 패치)

Unity3D 2018. 5. 15. 11:35
반응형

AssetBundle ?


- 유니티에서 사용되는 Asset들을 하나로 묶는 기능 

(LZMA 압축 알고리즘 사용)


LZMA(Lempel–Ziv–Markov chain algorithm)는 데이터 압축에 쓰이는 알고리즘이다. 1998년 이후로 계속 개발 중이며 7-zip 압축 프로그램의 7z 형식에 쓰인다.



UnityEditor 라이브러리의 BuildPipeline 클래스를 이용해서 생성 

BuildPipeline.BuildAssetBundle : 일반 에셋 

BuildPipeline.BuildStreamedSceneAssetBundle : 씬 



AssetBundle 간의 호환성 : 각각 전용 에셋번들을 제작 해야 함 (BuildTarget옵션 사용)


 

스탠드얼론

웹플레이어  

아이폰 

안드로이드 

 에디터

예 

예 

예 

예 

 스텐드얼론

예 

예 

아니오 

아니오 

 웹플레이어

예 

예 

아니오  

아니오 

 아이폰

아니오 

아니오 

예 

아니오 

 안드로이드

아니오 

아니오 

아니오 

예 



Caching (캐싱)

다운로드한 AssetBundle을 디스크에 저장하고 차후 재사용 가능 하게 함 

버전 관리 

LoadFromCacheOrDownload함수 이용 



Caching Capacity (캐싱 허용량)

- Mobile, PC, Console : 4G

- Web : 50MB

- Caching.maximumAvailableDiskSpace를 이용해 사이즈 조절 가능 



- 캐싱 용량이 부족할 경우 마지막 사용된 날짜가 오래된것부터 삭제됨.

- 디스크 용량이 부족하거나 캐쉬가 사용중이면 디스크 저장 없이 바로 메모리에 어셋번들을 올림 




암호화 

- 유니티는 암호화를 지원하지 않음 

- Open SSL을 이용해서 암호화 하여 사용함 

OpenSSL 네트워크를 통한 데이터 통신에 쓰이는 프로토콜 TLS SSL 오픈 소스 구현판이다. C 언어로 작성되어 있는 중심 라이브러리 안에는, 기본적인 암호화 기능 및 여러 유틸리티 함수들이 구현되어 있다.


- 복호화시에 시간이 필요하기 때문에 모든 에셋을 암호화 하기보다는 중요한 일부 

에셋을 보호 하는 용도로 사용하는것이 좋음 



1. OpenSSL을 이용해 암호화 

2. 암호화된 에셋번들을 텍스트로 변환 

2. 전달방법 선택 : Application내에 포함 또는 서버 다운로드 

4. 암호화된 에셋번들을 메모리에서 복호화 

5. AssetBundle.CreateFromMemory(byte[])를 이용해 에셋번들 로드 


   # 변경 사항







[예제] 에셋번들 암호화 


사전준비 1 : OpenSSL 다운로드 및 설치, HOME Path 잡기 




사전 준비 2 : 에셋번들 생성 



에셋번들 암호화 시작 

1. openssl rc2 -nosalt -p -in {파일명} -out {파일명}.bin


2. openssl base64 -in {파일명}.bin -out {파일명}.txt




[예제] 에셋번들 패치


1. 서버로부터 에셋을 다운로드 하여 로컬에 저장

2. 로컬 에셋과 서버 에셋의 버전을 비교 해서 변화 했다면 다운받고 로컬 저장




반응형
: