読者です 読者をやめる 読者になる 読者になる

おっさん開発 忘備録

おっさんプログラマの駄文

Unity リソース管理 3

雑談

祝 Unity5系のファイナルエディション 5.6がリリース?!
業務で使えるレベルまで早くパッチあたってくれんかの~

本題

注意点
  • Unity5.3.4 時点での記事です。
リソースのパス形式の固定に向けて技術調査

オブジェクトのLoad方法とPath引数について

1 Resources.Load(string path);
// Unity Editor / 実機 両方で使える
var texture = Resources.Load("glass") as Texture;
  • リソースパスについて
2 AssetDatabase.LoadAssetAtPath(string assetPath, Type type);
// Unity Editor のみ
var texture = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/Resources/glass.jpg", typeof(Texture2D));
  
// AssetBundle化後のコラボ
var paths[] = GetAssetPathsFromAssetBundleAndAssetName(string assetBundleName, string assetName);
var texture = (Texture2D)AssetDatabase.LoadAssetAtPath(paths[0], typeof(Texture2D));
  • リソースパスについて

  • Resources.Loadと互換性を持たせるには?

    • 素のPath変換は不可能
    • AssetBundle化した前提で「GetAssetPathsFromAssetBundleAndAssetName(string assetBundleName, string assetName); 」とコラボ
3 AssetBundle.LoadFromFile(string path, uint crc = 0, ulong offset = 0);
// Unity Editor / 実機両方で使える
var assetbundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "glass"));
  • リソースパスについて

    • AssetBundle label名
  • Resources.Loadと互換性を持たせるには?

    • 逆引きリスト
4 WWW.LoadFromCacheOrDownload(url: string, version: int, crc: uint = 0);
// Unity Editor / 実機両方で使える  
using (WWW www = WWW.LoadFromCacheOrDownload (assetPath, _RootManifest.GetAssetBundleHash (item))) {
    yield return www;
    if (string.IsNullOrEmpty (www.error) == false) {
        continue;
    }
    AssetBundle bundle = www.assetBundle;
}

※AssetBundleを超絶につかいにくくしている諸悪の根源だと思ってる(私的な感想) * リソースパスについて
* AssetBundle label名

  • Resources.Loadと互換性を持たせるには?
    • 逆引きリスト