2016-05-10 2 views
4

私はunity5.3.3を使用していますが、名前は同じですが別のフォルダに保管されているアセットバンドルからアセットを取得する方法を知りたいと思います。私AssetBundleフォルダは、次のように設定されている:同じ名前のアセットを読み込むにはどうしたら、アセットバンドルから別のフォルダに配置するのですか?

MyAssets -> this Folder is packed as an AssetBundle 
    -ThemeOne(folder) 
    - Logo.png 
    -ThemerTwo(folder) 
    - Logo.Png 

私はAssetBundle.LoadAssetAsync("Logo")を行うと。私は最初の(ThemeOne)フォルダにロゴをつけて終了します。どうすれば他のフォルダのファイルにアクセスできますか?

私はちょうどsample projectを作成しました。あなたはそれを確認することができます。フォルダAssets \ AssetBundleSample \ SampleAssets \ ThemeとスクリプトLoadAssetsを確認してください

答えて

0

LoadAssetAtPath()メソッドを使用して、アセット名ではなくフルパスを指定できます。

例:ここ

LoadAssetAtPath("Assets/Texture/Logo.jpg", typeof(Texture2D)); 

ドキュメント:http://docs.unity3d.com/ScriptReference/AssetDatabase.LoadAssetAtPath.html

+0

このフォルダはassetBundleとしてパックされており、Assetbundle APIを使用してアセットを読み込みます。したがって、私は実行時にassetBundleをロードし、個々のアセットをそこからロードします。したがって、LoadAssetAtPathは解決策ではありません。 –

0

あなたは資産の下にResourcesフォルダにThemeOne(フォルダ)とThemeTwo(フォルダ)を入れて、この

(AudioClip)(Resources.Load ("Sounds/" + "myaudioclip", typeof(AudioClip)) as AudioClip) 
ようなものを使用するよりもすることができます

同様に、私はmyaudioclipを与えているので、私は音を与えてファイルの名前よりもフォルダ名を与えるpngを読み込みます。テクスチャか何かのように キャストあなたは

+0

私はこれらの資産を最初にリソースフォルダに入れてゲームに埋め込みたくないです。後で特定の時点でassetBundleをダウンロードし、個別の資産をロードしたいと考えています。 –

+0

アセットバンドルは、別のフォルダでも同じ名前のアセットを追加することができないと読んだので、正常にアセットバンドルを作成しましたか? –

+0

古いAssetBundle APIでは、BuildPipeline.BuildAssetBundleExplicitAssetNamesを使用しない限り、assetBundleを作成できませんでした。しかし、私はアセットバンドルをユニティで成功させました5。ここで何か些細なものが欠けているのだろうかと思っています。 –

0

をしたいとunity official docs

public string BundleURL; 
    public string AssetName; 
    IEnumerator Start() { 
    // Download the file from the URL. It will not be saved in the Cache 
    using (WWW www = new WWW(BundleURL)) { 
     yield return www; 
     if (www.error != null) 
      throw new Exception("WWW download had an error:" + www.error); 
     AssetBundle bundle = www.assetBundle; 
     if (AssetName == "") 
      Instantiate(bundle.mainAsset); 
     else 
      Instantiate(bundle.LoadAsset(AssetName)); 
        // Unload the AssetBundles compressed contents to conserve memory 
        bundle.Unload(false); 

    } // memory is freed from the web stream (www.Dispose() gets called implicitly) 
    } 

を提供されるようにBundleURLは、あなたの実際の資産が置かれているパスを使用します。 ur指定されたパス文字列と組み合わせてApplication.dataPathを使用することもできます。

+1

私は実際にassetbundleを読み込んでいます。私が立ち往生しているところは、この時点で 'bundle.LoadAsset(AssetName)'です。 'bundle.LoadAsset(" Logo ")'を実行すると、最初のフォルダのアセットだけが表示されます。 –

+0

私は、2番目のロゴにアクセスするためにURLを変更する必要があると述べています。あなたの場所に応じてパスを変更する必要があります。 –

+1

あなたの質問を更新し、パスを共有してください –

0

私はこれが可能であるならば、あなたはユニティ5.6のようFYI廃止されExplicit naming of assetsをお読みください本当にわかりません。これにより、バンドルに含めるアセットの名前を明示的に指定することができます。また、あなたは、

bundle.LoadAsset("/Assets/ThemerTwo/Logo.png")

を試みることができる。しかし、一般的に、これは同じバンドル内の同じ命名の資産を持っている悪い習慣です。

関連する問題