【Unity&AssetBundle】异步加载

发布于:2025-07-06 ⋅ 阅读:(21) ⋅ 点赞:(0)

加载cube包里的cube物体

StartCoroutine(LoadABAsync("cube", "cube"));

加载image包里的a图片

StartCoroutine(LoadABAsync2("image", "a"));

/// <summary>

/// 异步加载AB包里的物体

/// </summary>

/// <param name="ABPackageName">包名</param>

/// <param name="GameObjectName">包物体名</param>

/// <param name="type">目标资源类型</param>

/// <returns></returns>

private IEnumerator LoadABAsync(string ABPackageName, string GameObjectName)

{

AssetBundleCreateRequest ab = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + "/" + ABPackageName);

yield return ab;

//使用泛型方式进行加载

AssetBundleRequest abr = ab.assetBundle.LoadAssetAsync<GameObject>(GameObjectName);

//使用type方式进行加载

//AssetBundleRequest abr = ab.assetBundle.LoadAssetAsync(GameObjectName, //typeof(GameObject));

//使用名称方式进行加载

//AssetBundleRequest abr = ab.assetBundle.LoadAssetAsync(GameObjectName);

yield return abr;

//实例化资源场景

GameObject gb = abr.asset as GameObject;

GameObject gbInScene = Instantiate(gb);

}

/// <summary>

/// 异步加载AB包里的图片

/// </summary>

/// <param name="ABPackageName">包名</param>

/// <param name="ImageName">包物体名</param>

/// <param name="type"></param>

/// <returns></returns>

private IEnumerator LoadABAsync2(string ABPackageName, string ImageName)

{

AssetBundleCreateRequest assetBundle = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + "/" + ABPackageName);

yield return assetBundle;

//使用泛型方式进行加载

AssetBundleRequest abr = assetBundle.assetBundle.LoadAssetAsync<Sprite>(ImageName);

//使用type的方式进行加载

//AssetBundleRequest abr = //assetBundle.assetBundle.LoadAssetAsync(ImageName, typeof(GameObject));

//使用名称方式进行加载

//AssetBundleRequest abr = //assetBundle.assetBundle.LoadAssetAsync(ImageName);

yield return abr;

Sprite sp = abr.asset as Sprite;

yield return sp;

image.sprite = sp;

}


网站公告

今日签到

点亮在社区的每一天
去签到