레이블이 AssetBundle인 게시물을 표시합니다. 모든 게시물 표시
레이블이 AssetBundle인 게시물을 표시합니다. 모든 게시물 표시

2018년 11월 28일 수요일

iOS는 파일명 대소문자를 구분한다

제목 그대로.

 번들 다운로드 시스템을 변경한 후 테스트 도중 아이폰에서만 파일을 찾지 못하는 현상이 발생.
 윈도우 유니티 에디터, 맥 유니티 에디터, 안드로이드 기기에서는 문제가 없었음

 매니페스트 파일명을 대문자로 넣었더니 아이폰에서만 파일을 찾지 못해서 소문자로 수정했더니 문자 해결.

 약 3/4일 걸림

2018년 9월 4일 화요일

GetAllScenePathsFromAssetBundle crash


  1. 백그라운드로 번들을 다운받고 캐싱하는 코드를 만들고 있는 중
  2. 번들 파일을 받고  UnityWebRequest.GetAssetBundle 을 사용하여 캐싱을 하면 에디터에서 100% 크래쉬가 발생(2017.2.1p1)
  3. Editor 로그를 확인하니까 마지막 콜스텍이 GetAllScenePathsFromAssetBundle
  4. 구글링 해 보니 나같은 현상이 발생한다는 애들이 있었음
    issuetracker
  5. We noticed that this bug was related to using WebRequest to cache bundles in background and not accessing the DownloadHandler.assetBundle property before the UnityWebRequest dispose.
  6. UnityWebRequest 를 쓸 때는 꼭 using 을 사용하자 유니티 메뉴얼

2018년 6월 22일 금요일

다운받은 AssetBundle 검증하기


  1. 아카마이에 올린 어셋 번들을 다운 받았을 때 cr and fl 문제가 발생해서 용량도 달라지고, 번들을 로딩하면 멈추거나 크래쉬가 발생함.
  2. 패치 서버로 부터 각 어셋번들 파일의 Hash와 CRC 정보를 제공받고 있으므로, 다운로드 후 .Net 코드를 이용하여 MD5해쉬와 CRC32 를 추출하여 패치서버의 AssetBundleManifest의 Hash, CRC와 비교했는데 같은 파일이라도 동일하지 않았음.
  3. 단순 용량 비교는 가능하지만 파일 변조를 검증할 수 없어서 검사하지 않음.
  4. 번들 파일만으로는 검증할 방법이 없어 Unity 의 AssetBundle.LoadFromFile 의 파라메터로 들어가는 Crc를 이용하기로 결정
  5. 패치 서버로 부터 받은 Crc 를 파라메터로 추가해서 LoadFromFile 함수를 호출하고, 바로 Unload(true) 를 호출 하도록 작업
  6. 변조된 번들 파일을 LoadFromFile 로 호출 해 보니(Crc 를 추가하여) 정확하게 에러로그와 함께 null을 뱉어 줌(Exception 이 아님).
  7. 번들파일 경로가 담긴 구조체를 List 에 넣어 Linq.Each 를 사용해서 LoadFromFile 을 호출 했을 때, 에러가 발생하면 Each 가 더 이상 동작하지 않아 for( 로 수정함