テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】AssetBundleをマネージコードのStreamから取得する

f:id:tsubaki_t1:20170724220902j:plain

Unity 2017.2よりAssetBundle.LoadFromStreamとAssetBundle.LoadFromStreamAsyncが追加されました。

これで暗号化したAssetBundleをStreamから読み込んだり、独自圧縮したAssetBundleを読み込んだり…?うーん、出来るのかな

サンプルコード

下のようなコードでAssetBundleが取得出来ます。

gist.github.com

まぁコードに関してはスクリプトリファレンスの方が多分ちゃんとしてます。

Unity - Scripting API: AssetBundle.LoadFromStream

Unity - Scripting API: AssetBundle.LoadFromStreamAsync

色々な制限が

おお便利そう!と思いましたが、色々と制限が…

  • AssetBundleのデータはStreamの位置が0である必要がある
  • AssetBundleの値を読むときはSeekの位置が0になる
  • 他のプロセスが位置を変更しない前提
  • stream.CanReadはTrueを返す
  • stream.CanSeekはTrueを返す
  • Streamは別スレッドからアクセス可能であること

ただ、Streamを自作すれば結構色々と出来ます。ファイルを暗号化してみた結果がこちら

tsubakit1.hateblo.jp

そして未来へ…

それは兎も角、AssetBundleの今後の予定されてる破壊的変更の前には、この程度のことは無いに等しい…

詳しくは、見れば分かるさ…見ればな…

www.slideshare.net

www.youtube.com

 

ちなみに、複数のCacheフォルダを持ったり、指定Cacheを削除したりは既に出来ます。

docs.unity3d.com

関連

docs.google.com

https://forum.unity3d.com/threads/preview-of-2017-2-features.481949/