1 回答

TA貢獻1802條經驗 獲得超10個贊
查看AssetBundle.LoadAssetAsync
在 5.0 版本之前,用戶可以使用 LoadAsync 直接獲取各個組件。不再支持此功能。相反,請使用 LoadAssetAsync 首先加載游戲對象,然后查找該對象上的組件。
您不能簡單地將檢索到的引用類型GameObject
轉換為AnchorBehaviour
引用。相反,你必須使用GetComponent
.
所以你應該做的是
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>();
現在您已經有了類型的引用,AnchorBehaviour第二次GetComponent調用將是多余的,因為它返回相同的引用。所以現在只能用
public void create()
{
? ? planeFinder.AnchorStage = model;
}
如果您有此腳本的多個實例,則僅加載 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 關注
- 128 瀏覽
添加回答
舉報