by

UnityWebRequestAssetBundle은 해시 값을 애셋번들에서 생성하지 않는다.

https://gist.github.com/IJEMIN/8d175564e10a1a8baa19d955176f25da

UnityWebRequestAssetBundle.GetAssetBundle() 메서드는, 문서상으로 해시 값을 비교해서 같은 버전으로 캐싱된 애셋번들은 다시 다운로드 하지 않느다고 한다.


하지만 여기에 함정이 있는데, 캐싱된 에셋번들로부터 생성된 해시 값이 아니라, 임의로 개발자가 직접 맵핑한 해시 값으로 비교한다...


그러니까, 다운로드해둔 애셋번들에 식별자로서 맵핑해둘 해시 값을 애셋번들에서 생성하는게 아님..


나는 서버에 올라간 파일의 해시 값을 미리 가져와서 다운로드를 시도하면, 유니티가 이미 다운로드 받아둔 파일의 해시 값과 자동으로 비교해서 다운로드를 생략하는 그런 건줄 알았는데, 그게 아니었다는 거시다.
다른 말로 하면, 다운로드 받은 애셋번들에 맵핑할 해시값을 클라이언트 버전이 올라감에 따라 직접 하드 코딩해야함.


하여간 클라이언트 쪽에서 서버의 파일이 달라진걸 감지하고 자동으로 다운로드 받는 구조가 아니라, 클라이언트 측에서, 이전 버전의 클라이언트에서 받아둔 파일에 매핑한 키 값과, 지금 다운로드 받으려고하는 파일에 붙이려는 키 값이 같으면 다운로드를 안하고, 다르면 새로 다운로드하는 구조다.

덕분에 이게 왜 캐싱이 제대로 안되고 자꾸 같은걸 다시 다운로드 받지??? 하면서 잠도 못자고 지금까지 굴럿다..


암튼 키값으로 사용될 해시의 기준 값을 하드코딩 안하고 마소 애저 스토리지가 자동으로 붙여주는 ETag를 해시 생성 기준으로 삼아서 해결샜다.

하여간 이게 되게 이상한 구조라는걸 쉽게 설명하고 싶은데 잠이 와서 안데겟다. 일단 문제해결햇으니 자야지.