我对来自 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 上对我有用
将 ExportAssetBundles.cs 上下文菜单脚本添加到我从 Unity Docs 构建的 Unity 中
创建要导出的内容
- 找到一张JPG,将其拖入并命名为“marble.jpg”
- 创建了一个立方体,将其命名为“marble”并将其拖到项目中以创建一个预制件
- 创建一个 Material ,将其命名为“marble”,添加 jpg 并将其拖到立方体上,然后按“应用”。
使用“Build Assets From Selection - Track Selection”突出显示所有 3 个并导出 Assets 包,并将其保存到“c:\temp\marble.unity3d”
添加了一个脚本以在启动时加载该 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(); } }
运行 Unity 并验证我正确地看到了游戏对象。
关于c# - unity assetbundle 加载 Assets 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511686/