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

おっさん開発 忘備録

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

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と互換性を持たせるには?
    • 逆引きリスト

Unity リソース管理 2 要件編

リソース管理の理想の実現に向けて

注意点
  • Unity5.3.4 時点での記事です。
要件
  • 単一のパスを渡せばリソースがどんな環境でもロードできる!

    • Resources.Loadを上書きできるようにする(Wraperクラスをつくる)
    • 抽象クラスから各種Loaderを作れるようにする(あとから環境追加に対応できるようにする)
  • ロード(ビルド)モードが選択もしくは半自動で設定される

    • 初期化処理時にモード選択する
        * リソースの優先度を決める(複数の方法から優先順位でロード方式を決定する)
実現に向けた要件詳細
  • パス形式固定
  • モード種類決定(Editor/Build時)
  • Resources.Load関数を上書きできるWraperクラスで必要な関数定義
  • リソースLoadの優先度決定

大体、大枠はこんな要件で、ソースを組んでいくかな。。。
実際の技術交えて、来週から本気出す?感じで記事を書いていく予定

次へ

torimomo8.hatenablog.com

Unity リソース管理 1

リソース管理の理想

理想

  • 何も考えずにResources.Loadだけ使いたいんじゃ!(無理だがな!)
注意点
  • Unity5.3.4 時点での記事です。
問題点
  • Resourcesフォルダ運用からのAssetBundle化がうまくいかない問題
    • Pathの大文字/小文字問題
    • 既存リソースをまとめる作業が大変
      • パスからAssetBundle名が逆引きできなくなる
    • AssetBundleの仕組みがいけてない問題
      • WWWCacheの動作がいけてない
        • 基本、非同期Loadしか対応していない
      • Unity公式のAssetBundleLoaderがいけてない。。。 使い方のお手本としては最高!
開発時のリソースロード方法の移行理想

UnityEditor

  1. Resourcesロード
  2. AssetBundleロード
    1. 直接リソース(AssetDatabase)
    2. ローカルファイル(WWWCache or LoadFile)
    3. ネットワークファイル([Download & LoadFile] or [WWWCache])

SmartPhone上

  1. AssetBundleロード
    1. ローカルファイル(WWWCache or LoadFile)
    2. ネットワークファイル([Download & LoadFile] or [WWWCache])

次へ

torimomo8.hatenablog.com

メモ

Markdown記法
はてなで使えるMarkdown記法まとめ - 開発メモ