1 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
查看AssetBundle.LoadAssetAsync
在 5.0 版本之前,用戶可以使用 LoadAsync 直接獲取各個(gè)組件。不再支持此功能。相反,請(qǐng)使用 LoadAssetAsync 首先加載游戲?qū)ο?,然后查找該?duì)象上的組件。
您不能簡單地將檢索到的引用類型GameObject
轉(zhuǎn)換為AnchorBehaviour
引用。相反,你必須使用GetComponent
.
所以你應(yīng)該做的是
AssetBundleRequest assetRequest = assetBundle.LoadAssetAsync<GameObject>(objectNameToLoad);
yield return assetRequest;
GameObject loadedAsset = (GameObject)assetRequest.asset;
// since model is already of type AnchorBehaviour
// you should do the GetComponent already here
model = loadedAsset.GetComponent<AnchorBehavior>();
現(xiàn)在您已經(jīng)有了類型的引用,AnchorBehaviour第二次GetComponent調(diào)用將是多余的,因?yàn)樗祷叵嗤囊?。所以現(xiàn)在只能用
public void create()
{
? ? planeFinder.AnchorStage = model;
}
如果您有此腳本的多個(gè)實(shí)例,則僅加載 assetBundle 一次可能是有意義的,例如
private static bool alreadyLoading;
private static AssetBundle assetBundle;
void Start()
{
? ? // only load the bundle once
? ? if(!alreadyLoading)?
? ? {
? ? ? ? // set the flag to make sure this is never done again
? ? ? ? alreadyLoading = true;
? ? ? ? StartCoroutine(LoadAsset(nameOfAssetBundle, nameOfObjectToLoad));
? ? }
? ? else
? ? {
? ? ? ? LoadObjectFromBundle(nameOfOjectToLoad);
? ? }
}?
private IEnumerator LoadAsset(string assetBundleName, string objectNameToLoad)
{
? ? string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "AssetBundles");
? ? filePath = System.IO.Path.Combine(filePath, assetBundleName);
? ? var assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(filePath);
? ? yield return assetBundleCreateRequest;
? ? assetBundle = assetBundleCreateRequest.assetBundle;
? ? LoadObjectFromBundle(objectNameToLoad);
}
private IEnumerator LoadObjectFromBundle(string objectNameToLoad)
{
? ? AssetBundleRequest assetRequest = assetBundle.LoadAssetAsync<GameObject>(objectNameToLoad);
? ? yield return assetRequest;
? ? GameObject loadedAsset = (GameObject)assetRequest.asset;
? ? model = loadedAsset.GetComponent<AnchorBehavior>();
}
- 1 回答
- 0 關(guān)注
- 119 瀏覽
添加回答
舉報(bào)