c# - unity assetbundle 加载 Assets 类型

标签 c# unity3d assetbundle

我对来自 unity 的 Assets 包有疑问。我有一个包含多个 Assets 的 bundle ,名称相同但扩展名不同,例如 bonus.png bonus.prefab。

当我尝试实例化一个名为 bonus 的预制件时,assetBundle.LoadAssets("bonus") 函数不会像往常那样返回一个游戏对象。这似乎只有在我有多个同名 Assets 时才会发生。

AssetBundleRequest request = assetBundle.LoadAssetAsync(m_ObjectsToPool[i].m_Name, typeof(GameObject));
        yield return request;
        GameObject prefab = request.asset as GameObject;

        if (prefab != null)
        {
            PoolManager.Instance.AddLoadedPrefabToPool(prefab, m_ObjectsToPool[i].m_Name, null, m_ObjectsToPool[i].m_Amount);
        }

但如果我调用 loadallassets(typeof(GameObject)) 然后使用 for 循环,我可以找到我的 Assets 并正确实例化它。但这只是一种肮脏的做法。

最佳答案

您应该能够加载具有相同名称的不同类型的 Assets 。

您使用的是什么版本的 Unity?

您上面的代码看起来是正确的(除了称为 LoadAssetAsync 的拼写错误?),我们不确定它是否无法输入 if() 语句?

以下在 Unity 4.5.5f1 上对我有用

  1. 将 ExportAssetBundles.cs 上下文菜单脚本添加到我从 Unity Docs 构建的 Unity 中

  2. 创建要导出的内容

    • 找到一张JPG,将其拖入并命名为“marble.jpg”
    • 创建了一个立方体,将其命名为“marble”并将其拖到项目中以创建一个预制件
    • 创建一个 Material ,将其命名为“marble”,添加 jpg 并将其拖到立方体上,然后按“应用”。
  3. 使用“Build Assets From Selection - Track Selection”突出显示所有 3 个并导出 Assets 包,并将其保存到“c:\temp\marble.unity3d”

  4. 添加了一个脚本以在启动时加载该 Assets 包(与您的类似):

    using UnityEngine;
    using System.Collections;
    
    public class BundleTest : MonoBehaviour {
    
      void Start () {
        StartCoroutine(StartCo());  
      }
    
      IEnumerator StartCo() {
        string url = "file://c:\\temp\\marble.unity3d";
        WWW www = new WWW(url);
        yield return www;
    
        AssetBundle bundle = www.assetBundle;
        AssetBundleRequest request = bundle.LoadAsync ("marble", typeof(GameObject));
        yield return request;
    
        Debug.Log ("loaded asset: " + request.asset.ToString());
        GameObject prefab = request.asset as GameObject;
    
        GameObject go = (GameObject)Instantiate(prefab);
        bundle.Unload(false);
        www.Dispose();
      }
    }
    
  5. 运行 Unity 并验证我正确地看到了游戏对象。

关于c# - unity assetbundle 加载 Assets 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511686/

相关文章:

android - 帐户尚未获得批准 Google AdMob

android - Unity3d:后台网络 Activity 和 Unity Run Loop

scripting - 如何加载 Assets 包

c# - 这段代码中有什么不安全的地方?

c# - 无效参数 - 无法转换匿名类型#2

c# - 随机范围订单

ios - 使用 Asset Bundle 为 iOS 平台构建 Unity 游戏

c# - 生成基于对象的当前值创建构造函数的代码的方法?

c# - 确定 Request.Form 中的控件类型

android - 我可以在 Unity 中编辑或提取 Assets 包的内容吗?