虚拟列表和循环列表提交

This commit is contained in:
2025-07-19 17:59:28 +08:00
parent 0dd304256c
commit 656e0b0652
38 changed files with 4420 additions and 39 deletions

View File

@@ -71,8 +71,12 @@ namespace CreatGame.AssetBundle
IsInitializeAsync = true;
}
}
public void LoadGameObject(string assetBundleName, Action<GameObject> callback)
/// <summary>
/// 异步加载资源
/// </summary>
/// <param name="assetBundleName"></param>
/// <param name="callback"></param>
public void LoadGameObjectAsync(string assetBundleName, Action<GameObject> callback)
{
if (assetBundles.TryGetValue(assetBundleName, out var bundle))
{
@@ -84,9 +88,9 @@ namespace CreatGame.AssetBundle
{
if (handle.Status == AsyncOperationStatus.Succeeded)
{
var asset = handle.Result;
assetBundles.Add(assetBundleName, new AssetBundleData { assetBundleName = assetBundleName, assetBundle = asset });
callback?.Invoke(GameObject.Instantiate(asset));
var assetData = CacheAssetBundles(assetBundleName, handle.Result);
Addressables.Release(handle);
callback?.Invoke(GameObject.Instantiate(assetData.assetBundle));
}
else
{
@@ -95,5 +99,41 @@ namespace CreatGame.AssetBundle
}
};
}
/// <summary>
/// 同步等待加载资源
/// </summary>
/// <param name="assetBundleName"></param>
public GameObject LoadGameObject(string assetBundleName)
{
if (assetBundles.TryGetValue(assetBundleName, out var bundle))
{
return GameObject.Instantiate(bundle.assetBundle);
}
var handle = Addressables.LoadAssetAsync<GameObject>(assetBundleName);
handle.WaitForCompletion();
if (handle.Status == AsyncOperationStatus.Succeeded)
{
bundle = CacheAssetBundles(assetBundleName, handle.Result);
Addressables.Release(handle);
return GameObject.Instantiate(bundle.assetBundle);
}
Debug.LogError("资源加载失败");
return null;
}
/// <summary>
/// 缓存加载出来的资源
/// </summary>
/// <param name="bundleName"></param>
/// <param name="bundle"></param>
/// <returns></returns>
private AssetBundleData CacheAssetBundles(string bundleName, GameObject bundle = null)
{
var data = new AssetBundleData(){assetBundleName = bundleName, assetBundle = GameObject.Instantiate(bundle)};
assetBundles.Add(bundleName, data);
return data;
}
}
}