mirror of
https://github.com/tuyoogame/YooAsset.git
synced 2026-06-20 11:23:42 +00:00
feat: add EnsureBundleFileAsync operation
This commit is contained in:
@@ -14,7 +14,7 @@ using YooAsset;
|
||||
/// 1. 异步加载 Bundle 文件,验证加载成功
|
||||
/// 2. 释放 BundleFileHandle 引用,等待一帧
|
||||
/// 3. 调用 UnloadUnusedAssetsAsync 清理未使用资源
|
||||
/// 4. 再次加载同一 Bundle 文件,验证加载成功且文件路径有效
|
||||
/// 4. 再次加载同一 Bundle 文件,验证加载成功
|
||||
/// </remarks>
|
||||
public class TestBundleFileRelease
|
||||
{
|
||||
@@ -39,7 +39,6 @@ public class TestBundleFileRelease
|
||||
var reloadHandle = package.LoadBundleFileAsync("raw_file_e");
|
||||
yield return reloadHandle;
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, reloadHandle.Status);
|
||||
Assert.IsTrue(File.Exists(reloadHandle.GetBundleFilePath()));
|
||||
reloadHandle.Release();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
using System.IO;
|
||||
using System.Collections;
|
||||
using UnityEngine.TestTools;
|
||||
using NUnit.Framework;
|
||||
using YooAsset;
|
||||
|
||||
/// <summary>
|
||||
/// 测试确保资源包已就绪
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 覆盖 API: EnsureBundleFileAsync
|
||||
/// 测试内容:
|
||||
/// 1. RawBundle 包裹:异步确保资源包已就绪,验证文件路径有效(raw_file_a)
|
||||
/// 2. AssetBundle 包裹:异步确保资源包已就绪,验证文件路径有效(prefab_a)
|
||||
/// 3. ArchiveBundle 包裹:异步确保资源包已就绪,验证文件路径有效(archive_file_a)
|
||||
/// </remarks>
|
||||
public class TestEnsureBundleFile
|
||||
{
|
||||
public IEnumerator RuntimeTester_RawBundle()
|
||||
{
|
||||
ResourcePackage package = YooAssets.GetPackage(TestConsts.RawBundlePackageName);
|
||||
Assert.IsNotNull(package);
|
||||
|
||||
{
|
||||
var ensureOp = package.EnsureBundleFileAsync(new EnsureBundleFileOptions("raw_file_a"));
|
||||
yield return ensureOp;
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, ensureOp.Status);
|
||||
|
||||
var detail = ensureOp.Detail;
|
||||
Assert.IsNotNull(detail.BundleFilePath);
|
||||
Assert.IsNotEmpty(detail.BundleFilePath);
|
||||
Assert.IsTrue(File.Exists(detail.BundleFilePath), $"Bundle file does not exist: {detail.BundleFilePath}");
|
||||
Assert.IsNotNull(detail.BundleName);
|
||||
Assert.IsNotEmpty(detail.BundleName);
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerator RuntimeTester_AssetBundle()
|
||||
{
|
||||
ResourcePackage package = YooAssets.GetPackage(TestConsts.AssetBundlePackageName);
|
||||
Assert.IsNotNull(package);
|
||||
|
||||
{
|
||||
var ensureOp = package.EnsureBundleFileAsync(new EnsureBundleFileOptions("prefab_a"));
|
||||
yield return ensureOp;
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, ensureOp.Status);
|
||||
|
||||
var detail = ensureOp.Detail;
|
||||
Assert.IsNotNull(detail.BundleFilePath);
|
||||
Assert.IsNotEmpty(detail.BundleFilePath);
|
||||
Assert.IsTrue(File.Exists(detail.BundleFilePath), $"Bundle file does not exist: {detail.BundleFilePath}");
|
||||
Assert.IsNotNull(detail.BundleName);
|
||||
Assert.IsNotEmpty(detail.BundleName);
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerator RuntimeTester_ArchiveBundle()
|
||||
{
|
||||
ResourcePackage package = YooAssets.GetPackage(TestConsts.ArchiveBundlePackageName);
|
||||
Assert.IsNotNull(package);
|
||||
|
||||
{
|
||||
var ensureOp = package.EnsureBundleFileAsync(new EnsureBundleFileOptions("archive_file_a"));
|
||||
yield return ensureOp;
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, ensureOp.Status);
|
||||
|
||||
var detail = ensureOp.Detail;
|
||||
Assert.IsNotNull(detail.BundleFilePath);
|
||||
Assert.IsNotEmpty(detail.BundleFilePath);
|
||||
Assert.IsTrue(File.Exists(detail.BundleFilePath), $"Bundle file does not exist: {detail.BundleFilePath}");
|
||||
Assert.IsNotNull(detail.BundleName);
|
||||
Assert.IsNotEmpty(detail.BundleName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7c4cd191337037a4da1cc228d1d871fc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -10,10 +10,10 @@ using YooAsset;
|
||||
/// <remarks>
|
||||
/// 覆盖 API: LoadAssetAsync(RawFileObject) / LoadAssetSync(RawFileObject) / UnloadUnusedAssetsAsync
|
||||
/// 测试内容:
|
||||
/// 1. 异步加载归档子文件,验证 GetBytes() 和 GetText() 均返回有效数据(raw_file_a)
|
||||
/// 2. 同步加载归档子文件,验证 GetBytes() 和 GetText() 均返回有效数据(raw_file_b)
|
||||
/// 3. 重复加载同一归档子文件,验证缓存命中不会失败(raw_file_c)
|
||||
/// 4. 释放句柄并卸载后重新加载,验证卸载保护和重载链路正常(raw_file_e)
|
||||
/// 1. 异步加载归档子文件,验证 GetBytes() 和 GetText() 均返回有效数据(archive_file_a)
|
||||
/// 2. 同步加载归档子文件,验证 GetBytes() 和 GetText() 均返回有效数据(archive_file_b)
|
||||
/// 3. 重复加载同一归档子文件,验证缓存命中不会失败(archive_file_c)
|
||||
/// 4. 释放句柄并卸载后重新加载,验证卸载保护和重载链路正常(archive_file_e)
|
||||
/// </remarks>
|
||||
public class TestLoadArchiveBundle
|
||||
{
|
||||
@@ -24,7 +24,7 @@ public class TestLoadArchiveBundle
|
||||
|
||||
// 异步加载归档子文件
|
||||
{
|
||||
var assetHandle = package.LoadAssetAsync<RawFileObject>("raw_file_a");
|
||||
var assetHandle = package.LoadAssetAsync<RawFileObject>("archive_file_a");
|
||||
yield return assetHandle;
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, assetHandle.Status);
|
||||
|
||||
@@ -43,7 +43,7 @@ public class TestLoadArchiveBundle
|
||||
|
||||
// 同步加载归档子文件
|
||||
{
|
||||
var assetHandle = package.LoadAssetSync<RawFileObject>("raw_file_b");
|
||||
var assetHandle = package.LoadAssetSync<RawFileObject>("archive_file_b");
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, assetHandle.Status);
|
||||
|
||||
var rawFileObject = assetHandle.GetAssetObject<RawFileObject>();
|
||||
@@ -61,11 +61,11 @@ public class TestLoadArchiveBundle
|
||||
|
||||
// 重复加载同一归档子文件,验证缓存命中
|
||||
{
|
||||
var handle1 = package.LoadAssetAsync<RawFileObject>("raw_file_c");
|
||||
var handle1 = package.LoadAssetAsync<RawFileObject>("archive_file_c");
|
||||
yield return handle1;
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, handle1.Status);
|
||||
|
||||
var handle2 = package.LoadAssetAsync<RawFileObject>("raw_file_c");
|
||||
var handle2 = package.LoadAssetAsync<RawFileObject>("archive_file_c");
|
||||
yield return handle2;
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, handle2.Status);
|
||||
|
||||
@@ -80,7 +80,7 @@ public class TestLoadArchiveBundle
|
||||
|
||||
// 释放后卸载再重新加载,验证新旧对象不是同一实例
|
||||
{
|
||||
var assetHandle = package.LoadAssetAsync<RawFileObject>("raw_file_e");
|
||||
var assetHandle = package.LoadAssetAsync<RawFileObject>("archive_file_e");
|
||||
yield return assetHandle;
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, assetHandle.Status);
|
||||
|
||||
@@ -93,7 +93,7 @@ public class TestLoadArchiveBundle
|
||||
yield return unloadOp;
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, unloadOp.Status);
|
||||
|
||||
var reloadHandle = package.LoadAssetAsync<RawFileObject>("raw_file_e");
|
||||
var reloadHandle = package.LoadAssetAsync<RawFileObject>("archive_file_e");
|
||||
yield return reloadHandle;
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, reloadHandle.Status);
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ using YooAsset;
|
||||
/// <remarks>
|
||||
/// 覆盖 API: LoadBundleFileAsync / LoadBundleFileSync / LoadAssetAsync(RawFileObject) / LoadAssetSync(RawFileObject)
|
||||
/// 测试内容:
|
||||
/// 1. 异步加载 Bundle 文件,获取文件路径,验证文件存在且二进制数据非空(raw_file_a)
|
||||
/// 2. 同步加载 Bundle 文件,获取文件路径,验证文件存在且二进制数据非空(raw_file_b)
|
||||
/// 1. 异步加载 Bundle 文件(raw_file_a)
|
||||
/// 2. 同步加载 Bundle 文件(raw_file_b)
|
||||
/// 3. 异步通过 RawFileObject 加载,验证 GetBytes() 和 GetText() 均返回有效数据(raw_file_c)
|
||||
/// 4. 同步通过 RawFileObject 加载,验证 GetBytes() 和 GetText() 均返回有效数据(raw_file_d)
|
||||
/// </remarks>
|
||||
@@ -29,14 +29,6 @@ public class TestLoadBundleFile
|
||||
var bundleFileHandle = package.LoadBundleFileAsync("raw_file_a");
|
||||
yield return bundleFileHandle;
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, bundleFileHandle.Status);
|
||||
|
||||
var filePath = bundleFileHandle.GetBundleFilePath();
|
||||
Assert.IsNotNull(filePath);
|
||||
Assert.IsTrue(File.Exists(filePath));
|
||||
|
||||
byte[] fileBytes = File.ReadAllBytes(filePath);
|
||||
Assert.IsNotNull(fileBytes);
|
||||
Assert.Greater(fileBytes.Length, 0);
|
||||
bundleFileHandle.Release();
|
||||
}
|
||||
|
||||
@@ -44,14 +36,6 @@ public class TestLoadBundleFile
|
||||
{
|
||||
var bundleFileHandle = package.LoadBundleFileSync("raw_file_b");
|
||||
Assert.AreEqual(EOperationStatus.Succeeded, bundleFileHandle.Status);
|
||||
|
||||
var filePath = bundleFileHandle.GetBundleFilePath();
|
||||
Assert.IsNotNull(filePath);
|
||||
Assert.IsTrue(File.Exists(filePath));
|
||||
|
||||
byte[] fileBytes = File.ReadAllBytes(filePath);
|
||||
Assert.IsNotNull(fileBytes);
|
||||
Assert.Greater(fileBytes.Length, 0);
|
||||
bundleFileHandle.Release();
|
||||
}
|
||||
|
||||
|
||||
@@ -247,7 +247,7 @@ public class T0_InitYooAssets : IPrebuildSetup, IPostBuildCleanup
|
||||
{
|
||||
var collector1 = new YooAsset.Editor.BundleCollector();
|
||||
collector1.CollectPath = "";
|
||||
collector1.CollectorGUID = "fddaaf9430e24344196cc82ac3d006b4"; //TestRes/RawFiles目录
|
||||
collector1.CollectorGUID = "c0444018376a7cd4ead6a671035617d6"; //TestRes/ArchiveFiles目录
|
||||
collector1.CollectorType = YooAsset.Editor.ECollectorType.MainAssetCollector;
|
||||
collector1.PackRuleName = nameof(YooAsset.Editor.PackCollector);
|
||||
YooAsset.Editor.BundleCollectorSettingData.CreateCollector(archiveFileGroup, collector1);
|
||||
|
||||
@@ -255,7 +255,28 @@ public class T1_TestEditorFileSystem : IPrebuildSetup, IPostBuildCleanup
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator B12_TestUniTask()
|
||||
public IEnumerator B12_TestEnsureBundleFile_RawBundle()
|
||||
{
|
||||
var tester = new TestEnsureBundleFile();
|
||||
yield return tester.RuntimeTester_RawBundle();
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator B13_TestEnsureBundleFile_AssetBundle()
|
||||
{
|
||||
var tester = new TestEnsureBundleFile();
|
||||
yield return tester.RuntimeTester_AssetBundle();
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator B14_TestEnsureBundleFile_ArchiveBundle()
|
||||
{
|
||||
var tester = new TestEnsureBundleFile();
|
||||
yield return tester.RuntimeTester_ArchiveBundle();
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator B15_TestUniTask()
|
||||
{
|
||||
var tester = new TestUniTask();
|
||||
yield return tester.RuntimeTester();
|
||||
|
||||
@@ -255,7 +255,28 @@ public class T2_TestBuiltinFileSystem : IPrebuildSetup, IPostBuildCleanup
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator B12_TestUniTask()
|
||||
public IEnumerator B12_TestEnsureBundleFile_RawBundle()
|
||||
{
|
||||
var tester = new TestEnsureBundleFile();
|
||||
yield return tester.RuntimeTester_RawBundle();
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator B13_TestEnsureBundleFile_AssetBundle()
|
||||
{
|
||||
var tester = new TestEnsureBundleFile();
|
||||
yield return tester.RuntimeTester_AssetBundle();
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator B14_TestEnsureBundleFile_ArchiveBundle()
|
||||
{
|
||||
var tester = new TestEnsureBundleFile();
|
||||
yield return tester.RuntimeTester_ArchiveBundle();
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator B15_TestUniTask()
|
||||
{
|
||||
var tester = new TestUniTask();
|
||||
yield return tester.RuntimeTester();
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c0444018376a7cd4ead6a671035617d6
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
this is archive file a !
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a84d58cf1f5f6d24aa165fe859227a5a
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
this is archive file b !
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cbf8014e6b7abb942a31ff5b316c5344
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
this is archive file c !
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed5f41165a49cbe469594ab8f558bcfa
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
this is archive file d !
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9a66a58916a41684cb44606d5479caf1
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
this is archive file e !
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0c597b9bdd6ddd84eabd8fd3538947e9
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user