diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample.meta b/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample.meta new file mode 100644 index 00000000..ae6f077e --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4ce11d98eccfa4b44bf2c82f7d87d105 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestFileOffsetEncryption.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestFileOffsetEncryption.cs new file mode 100644 index 00000000..483a5788 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestFileOffsetEncryption.cs @@ -0,0 +1,94 @@ +using System; +using System.IO; +using System.Text; +using System.Collections; +using UnityEngine; +using YooAsset; + +/// +/// 文件偏移加密方式 +/// +public class TestFileOffsetEncryption : IEncryptionServices +{ + public EncryptResult Encrypt(EncryptFileInfo fileInfo) + { + // 说明:对TestRes3资源目录进行加密 + if (fileInfo.BundleName.Contains("_testres3_")) + { + int offset = 32; + byte[] fileData = File.ReadAllBytes(fileInfo.FileLoadPath); + var encryptedData = new byte[fileData.Length + offset]; + Buffer.BlockCopy(fileData, 0, encryptedData, offset, fileData.Length); + + EncryptResult result = new EncryptResult(); + result.Encrypted = true; + result.EncryptedData = encryptedData; + return result; + } + else + { + EncryptResult result = new EncryptResult(); + result.Encrypted = false; + return result; + } + } +} + +/// +/// 资源文件偏移解密类 +/// +public class TestFileOffsetDecryption : IDecryptionServices +{ + /// + /// 同步方式获取解密的资源包对象 + /// 注意:加载流对象在资源包对象释放的时候会自动释放 + /// + DecryptResult IDecryptionServices.LoadAssetBundle(DecryptFileInfo fileInfo) + { + DecryptResult decryptResult = new DecryptResult(); + decryptResult.ManagedStream = null; + decryptResult.Result = AssetBundle.LoadFromFile(fileInfo.FileLoadPath, fileInfo.FileLoadCRC, GetFileOffset()); + return decryptResult; + } + + /// + /// 异步方式获取解密的资源包对象 + /// 注意:加载流对象在资源包对象释放的时候会自动释放 + /// + DecryptResult IDecryptionServices.LoadAssetBundleAsync(DecryptFileInfo fileInfo) + { + DecryptResult decryptResult = new DecryptResult(); + decryptResult.ManagedStream = null; + decryptResult.CreateRequest = AssetBundle.LoadFromFileAsync(fileInfo.FileLoadPath, fileInfo.FileLoadCRC, GetFileOffset()); + return decryptResult; + } + + /// + /// 后备方式获取解密的资源包对象 + /// + DecryptResult IDecryptionServices.LoadAssetBundleFallback(DecryptFileInfo fileInfo) + { + return new DecryptResult(); + } + + /// + /// 获取解密的字节数据 + /// + byte[] IDecryptionServices.ReadFileData(DecryptFileInfo fileInfo) + { + throw new System.NotImplementedException(); + } + + /// + /// 获取解密的文本数据 + /// + string IDecryptionServices.ReadFileText(DecryptFileInfo fileInfo) + { + throw new System.NotImplementedException(); + } + + private static ulong GetFileOffset() + { + return 32; + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestFileOffsetEncryption.cs.meta b/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestFileOffsetEncryption.cs.meta new file mode 100644 index 00000000..5f30658f --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestFileOffsetEncryption.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 174e56f3a30d7fd4e80bde43ba267631 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestFileStreamEncryption.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestFileStreamEncryption.cs new file mode 100644 index 00000000..8c03406a --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestFileStreamEncryption.cs @@ -0,0 +1,155 @@ +using System; +using System.IO; +using System.Text; +using System.Collections; +using UnityEngine; +using YooAsset; + +/// +/// 资源文件解密流 +/// +public class BundleStream : FileStream +{ + public const byte KEY = 64; + + public BundleStream(string path, FileMode mode, FileAccess access, FileShare share) : base(path, mode, access, share) + { + } + public BundleStream(string path, FileMode mode) : base(path, mode) + { + } + + public override int Read(byte[] array, int offset, int count) + { + var index = base.Read(array, offset, count); + for (int i = 0; i < array.Length; i++) + { + array[i] ^= KEY; + } + return index; + } +} + +/// +/// 文件流加密方式 +/// +public class TestFileStreamEncryption : IEncryptionServices +{ + public EncryptResult Encrypt(EncryptFileInfo fileInfo) + { + // 说明:对TestRes3资源目录进行加密 + if (fileInfo.BundleName.Contains("_testres3_")) + { + var fileData = File.ReadAllBytes(fileInfo.FileLoadPath); + for (int i = 0; i < fileData.Length; i++) + { + fileData[i] ^= BundleStream.KEY; + } + + EncryptResult result = new EncryptResult(); + result.Encrypted = true; + result.EncryptedData = fileData; + return result; + } + else + { + EncryptResult result = new EncryptResult(); + result.Encrypted = false; + return result; + } + } +} + +/// +/// 资源文件流解密类 +/// +public class TestFileStreamDecryption : IDecryptionServices +{ + /// + /// 同步方式获取解密的资源包对象 + /// 注意:加载流对象在资源包对象释放的时候会自动释放 + /// + DecryptResult IDecryptionServices.LoadAssetBundle(DecryptFileInfo fileInfo) + { + BundleStream bundleStream = new BundleStream(fileInfo.FileLoadPath, FileMode.Open, FileAccess.Read, FileShare.Read); + DecryptResult decryptResult = new DecryptResult(); + decryptResult.ManagedStream = bundleStream; + decryptResult.Result = AssetBundle.LoadFromStream(bundleStream, fileInfo.FileLoadCRC, GetManagedReadBufferSize()); + return decryptResult; + } + + /// + /// 异步方式获取解密的资源包对象 + /// 注意:加载流对象在资源包对象释放的时候会自动释放 + /// + DecryptResult IDecryptionServices.LoadAssetBundleAsync(DecryptFileInfo fileInfo) + { + BundleStream bundleStream = new BundleStream(fileInfo.FileLoadPath, FileMode.Open, FileAccess.Read, FileShare.Read); + DecryptResult decryptResult = new DecryptResult(); + decryptResult.ManagedStream = bundleStream; + decryptResult.CreateRequest = AssetBundle.LoadFromStreamAsync(bundleStream, fileInfo.FileLoadCRC, GetManagedReadBufferSize()); + return decryptResult; + } + + /// + /// 后备方式获取解密的资源包对象 + /// + DecryptResult IDecryptionServices.LoadAssetBundleFallback(DecryptFileInfo fileInfo) + { + return new DecryptResult(); + } + + /// + /// 获取解密的字节数据 + /// + byte[] IDecryptionServices.ReadFileData(DecryptFileInfo fileInfo) + { + throw new System.NotImplementedException(); + } + + /// + /// 获取解密的文本数据 + /// + string IDecryptionServices.ReadFileText(DecryptFileInfo fileInfo) + { + throw new System.NotImplementedException(); + } + + private static uint GetManagedReadBufferSize() + { + return 1024; + } +} + +/// +/// WebGL平台解密类 +/// 注意:WebGL平台支持内存解密 +/// +public class TestWebFileMemoryDecryption : IWebDecryptionServices +{ + public WebDecryptResult LoadAssetBundle(WebDecryptFileInfo fileInfo) + { + /* + byte[] copyData = new byte[fileInfo.FileData.Length]; + Buffer.BlockCopy(fileInfo.FileData, 0, copyData, 0, fileInfo.FileData.Length); + + for (int i = 0; i < copyData.Length; i++) + { + copyData[i] ^= BundleStream.KEY; + } + + WebDecryptResult decryptResult = new WebDecryptResult(); + decryptResult.Result = AssetBundle.LoadFromMemory(copyData); + return decryptResult; + */ + + for (int i = 0; i < fileInfo.FileData.Length; i++) + { + fileInfo.FileData[i] ^= BundleStream.KEY; + } + + WebDecryptResult decryptResult = new WebDecryptResult(); + decryptResult.Result = AssetBundle.LoadFromMemory(fileInfo.FileData); + return decryptResult; + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestFileStreamEncryption.cs.meta b/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestFileStreamEncryption.cs.meta new file mode 100644 index 00000000..b5612dba --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestFileStreamEncryption.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d264e4255e837db41900a9a54bd828f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestProcessManifest.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestProcessManifest.cs similarity index 100% rename from Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestProcessManifest.cs rename to Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestProcessManifest.cs diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestProcessManifest.cs.meta b/Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestProcessManifest.cs.meta similarity index 100% rename from Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestProcessManifest.cs.meta rename to Assets/YooAsset/Samples~/Test Sample/Runtime/CryptoSample/TestProcessManifest.cs.meta diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T0_InitYooAssets/T0_InitYooAssets.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T0_InitYooAssets/T0_InitYooAssets.cs index 3d4e5980..f2fdc14e 100644 --- a/Assets/YooAsset/Samples~/Test Sample/Runtime/T0_InitYooAssets/T0_InitYooAssets.cs +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T0_InitYooAssets/T0_InitYooAssets.cs @@ -89,7 +89,7 @@ public class T0_InitYooAssets : IPrebuildSetup, IPostBuildCleanup YooAsset.Editor.AssetBundleCollectorSettingData.CreateCollector(panelGroup, collector1); } - // 预制体 + // 预制体(构建到一个AB) var prefabGroup = YooAsset.Editor.AssetBundleCollectorSettingData.CreateGroup(testPackage, "PrefabGroup"); { var collector1 = new YooAsset.Editor.AssetBundleCollector(); @@ -169,14 +169,30 @@ public class T0_InitYooAssets : IPrebuildSetup, IPostBuildCleanup collector1.CollectorGUID = "e082d492b9da65e499cee3495be3645d"; //TestRes3/music目录 collector1.CollectorType = YooAsset.Editor.ECollectorType.MainAssetCollector; collector1.PackRuleName = nameof(YooAsset.Editor.PackSeparately); - YooAsset.Editor.AssetBundleCollectorSettingData.CreateCollector(referenceGroup, collector1); + YooAsset.Editor.AssetBundleCollectorSettingData.CreateCollector(encryptGroup, collector1); var collector2 = new YooAsset.Editor.AssetBundleCollector(); collector2.CollectPath = ""; collector2.CollectorGUID = "8c5a1726d94498e4cbe30f5f510cc796"; //TestRes3/prefab目录 collector2.CollectorType = YooAsset.Editor.ECollectorType.MainAssetCollector; collector2.PackRuleName = nameof(YooAsset.Editor.PackSeparately); - YooAsset.Editor.AssetBundleCollectorSettingData.CreateCollector(referenceGroup, collector2); + YooAsset.Editor.AssetBundleCollectorSettingData.CreateCollector(encryptGroup, collector2); + + var collector3 = new YooAsset.Editor.AssetBundleCollector(); + collector3.CollectPath = ""; + collector3.CollectorGUID = "401af1ca0abf3ae4594631e5f71bfe27"; //TestRes3/unpack目录 + collector3.CollectorType = YooAsset.Editor.ECollectorType.MainAssetCollector; + collector3.AssetTags = "unpack"; + collector3.PackRuleName = nameof(YooAsset.Editor.PackSeparately); + YooAsset.Editor.AssetBundleCollectorSettingData.CreateCollector(encryptGroup, collector3); + + var collector4 = new YooAsset.Editor.AssetBundleCollector(); + collector4.CollectPath = ""; + collector4.CollectorGUID = "35f454fb80a715047bcf0ce30c7c4f18"; //TestRes3/import目录 + collector4.CollectorType = YooAsset.Editor.ECollectorType.MainAssetCollector; + collector4.AssetTags = "import"; + collector4.PackRuleName = nameof(YooAsset.Editor.PackSeparately); + YooAsset.Editor.AssetBundleCollectorSettingData.CreateCollector(encryptGroup, collector4); } } private static void CreateRawBundlePackageCollector() diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T1_TestEditorFileSystem/T1_TestEditorFileSystem.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T1_TestEditorFileSystem/T1_TestEditorFileSystem.cs index e7c40b93..4dee2881 100644 --- a/Assets/YooAsset/Samples~/Test Sample/Runtime/T1_TestEditorFileSystem/T1_TestEditorFileSystem.cs +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T1_TestEditorFileSystem/T1_TestEditorFileSystem.cs @@ -24,7 +24,7 @@ public class T1_TestEditorFileSystem : IPrebuildSetup, IPostBuildCleanup simulateParams.InvokeAssmeblyName = "YooAsset.Test.Editor"; simulateParams.InvokeClassFullName = "TestPackageBuilder"; simulateParams.InvokeMethodName = "BuildPackage"; - var simulateResult = PakcageInvokeBuilder.InvokeBuilder(simulateParams); + var simulateResult = PackageInvokeBuilder.InvokeBuilder(simulateParams); UnityEditor.EditorPrefs.SetString(ASSET_BUNDLE_PACKAGE_ROOT_KEY, simulateResult.PackageRootDirectory); } @@ -35,7 +35,7 @@ public class T1_TestEditorFileSystem : IPrebuildSetup, IPostBuildCleanup simulateParams.InvokeAssmeblyName = "YooAsset.Test.Editor"; simulateParams.InvokeClassFullName = "TestPackageBuilder"; simulateParams.InvokeMethodName = "BuildPackage"; - var simulateResult = PakcageInvokeBuilder.InvokeBuilder(simulateParams); + var simulateResult = PackageInvokeBuilder.InvokeBuilder(simulateParams); UnityEditor.EditorPrefs.SetString(RAW_BUNDLE_PACKAGE_ROOT_KEY, simulateResult.PackageRootDirectory); } #endif diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/T2_TestBuldinFileSystem.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/T2_TestBuldinFileSystem.cs index 3c7c56c0..9203b35e 100644 --- a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/T2_TestBuldinFileSystem.cs +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/T2_TestBuldinFileSystem.cs @@ -11,8 +11,8 @@ using YooAsset; public class T2_TestBuldinFileSystem : IPrebuildSetup, IPostBuildCleanup { - private const string ASSET_BUNDLE_PACKAGE_ROOT_KEY = "T2_ASSET_BUNDLE_PACKAGE_ROOT_KEY"; - private const string RAW_BUNDLE_PACKAGE_ROOT_KEY = "T2_RAW_BUNDLE_PACKAGE_ROOT_KEY"; + public const string ASSET_BUNDLE_PACKAGE_ROOT_KEY = "T2_ASSET_BUNDLE_PACKAGE_ROOT_KEY"; + public const string RAW_BUNDLE_PACKAGE_ROOT_KEY = "T2_RAW_BUNDLE_PACKAGE_ROOT_KEY"; void IPrebuildSetup.Setup() { @@ -24,7 +24,7 @@ public class T2_TestBuldinFileSystem : IPrebuildSetup, IPostBuildCleanup buildParams.InvokeAssmeblyName = "YooAsset.Test.Editor"; buildParams.InvokeClassFullName = "TestPackageBuilder"; buildParams.InvokeMethodName = "BuildPackage"; - var simulateResult = PakcageInvokeBuilder.InvokeBuilder(buildParams); + var simulateResult = PackageInvokeBuilder.InvokeBuilder(buildParams); UnityEditor.EditorPrefs.SetString(ASSET_BUNDLE_PACKAGE_ROOT_KEY, simulateResult.PackageRootDirectory); } @@ -35,7 +35,7 @@ public class T2_TestBuldinFileSystem : IPrebuildSetup, IPostBuildCleanup buildParams.InvokeAssmeblyName = "YooAsset.Test.Editor"; buildParams.InvokeClassFullName = "TestPackageBuilder"; buildParams.InvokeMethodName = "BuildPackage"; - var simulateResult = PakcageInvokeBuilder.InvokeBuilder(buildParams); + var simulateResult = PackageInvokeBuilder.InvokeBuilder(buildParams); UnityEditor.EditorPrefs.SetString(RAW_BUNDLE_PACKAGE_ROOT_KEY, simulateResult.PackageRootDirectory); } #endif diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleEncryption.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleEncryption.cs index e79d870b..4f4b28a1 100644 --- a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleEncryption.cs +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleEncryption.cs @@ -6,6 +6,9 @@ using UnityEngine; using NUnit.Framework; using YooAsset; +/// +/// 测试加载加密文件 +/// public class TestBundleEncryption { public IEnumerator RuntimeTester() @@ -39,245 +42,27 @@ public class TestBundleEncryption Assert.IsNotNull(audioSource.clip); } - // 试听三秒钟 - yield return new WaitForSeconds(3f); + yield return new WaitForSeconds(1f); } } -/// -/// 文件流加密方式 -/// -public class TestFileStreamEncryption : IEncryptionServices +/* 资源代码流程 + * 内置文件解压(加载器) +BuildinFileSystem::LoadBundleFile() { - public EncryptResult Encrypt(EncryptFileInfo fileInfo) - { - // 说明:对TestRes3资源目录进行加密 - if (fileInfo.BundleName.Contains("_testres3_")) - { - var fileData = File.ReadAllBytes(fileInfo.FileLoadPath); - for (int i = 0; i < fileData.Length; i++) - { - fileData[i] ^= BundleStream.KEY; - } - - EncryptResult result = new EncryptResult(); - result.Encrypted = true; - result.EncryptedData = fileData; - return result; - } - else - { - EncryptResult result = new EncryptResult(); - result.Encrypted = false; - return result; - } - } + _unpackFileSystem.LoadBundleFile(bundle); } - -/// -/// 文件偏移加密方式 -/// -public class TestFileOffsetEncryption : IEncryptionServices +UnpackFileSystem::LoadAssetBundleOperation() { - public EncryptResult Encrypt(EncryptFileInfo fileInfo) - { - // 说明:对TestRes3资源目录进行加密 - if (fileInfo.BundleName.Contains("_testres3_")) - { - int offset = 32; - byte[] fileData = File.ReadAllBytes(fileInfo.FileLoadPath); - var encryptedData = new byte[fileData.Length + offset]; - Buffer.BlockCopy(fileData, 0, encryptedData, offset, fileData.Length); - - EncryptResult result = new EncryptResult(); - result.Encrypted = true; - result.EncryptedData = encryptedData; - return result; - } - else - { - EncryptResult result = new EncryptResult(); - result.Encrypted = false; - return result; - } - } + DownloadFileOptions options = new DownloadFileOptions(int.MaxValue, 60); + _unpackFileSystem.DownloadFileAsync(_bundle, options); } - - -/// -/// 资源文件解密流 -/// -public class BundleStream : FileStream +UnpackFileSystem::DownloadFileAsync() { - public const byte KEY = 64; - - public BundleStream(string path, FileMode mode, FileAccess access, FileShare share) : base(path, mode, access, share) - { - } - public BundleStream(string path, FileMode mode) : base(path, mode) - { - } - - public override int Read(byte[] array, int offset, int count) - { - var index = base.Read(array, offset, count); - for (int i = 0; i < array.Length; i++) - { - array[i] ^= KEY; - } - return index; - } + //RemoteServices返回内置文件路径 + string mainURL = RemoteServices.GetRemoteMainURL(bundle.FileName); + string fallbackURL = RemoteServices.GetRemoteFallbackURL(bundle.FileName); + options.SetURL(mainURL, fallbackURL); + return new DownloadPackageBundleOperation(bundle, options); } - -/// -/// 资源文件流解密类 -/// -public class TestFileStreamDecryption : IDecryptionServices -{ - /// - /// 同步方式获取解密的资源包对象 - /// 注意:加载流对象在资源包对象释放的时候会自动释放 - /// - DecryptResult IDecryptionServices.LoadAssetBundle(DecryptFileInfo fileInfo) - { - BundleStream bundleStream = new BundleStream(fileInfo.FileLoadPath, FileMode.Open, FileAccess.Read, FileShare.Read); - DecryptResult decryptResult = new DecryptResult(); - decryptResult.ManagedStream = bundleStream; - decryptResult.Result = AssetBundle.LoadFromStream(bundleStream, fileInfo.FileLoadCRC, GetManagedReadBufferSize()); - return decryptResult; - } - - /// - /// 异步方式获取解密的资源包对象 - /// 注意:加载流对象在资源包对象释放的时候会自动释放 - /// - DecryptResult IDecryptionServices.LoadAssetBundleAsync(DecryptFileInfo fileInfo) - { - BundleStream bundleStream = new BundleStream(fileInfo.FileLoadPath, FileMode.Open, FileAccess.Read, FileShare.Read); - DecryptResult decryptResult = new DecryptResult(); - decryptResult.ManagedStream = bundleStream; - decryptResult.CreateRequest = AssetBundle.LoadFromStreamAsync(bundleStream, fileInfo.FileLoadCRC, GetManagedReadBufferSize()); - return decryptResult; - } - - /// - /// 后备方式获取解密的资源包对象 - /// - DecryptResult IDecryptionServices.LoadAssetBundleFallback(DecryptFileInfo fileInfo) - { - return new DecryptResult(); - } - - /// - /// 获取解密的字节数据 - /// - byte[] IDecryptionServices.ReadFileData(DecryptFileInfo fileInfo) - { - throw new System.NotImplementedException(); - } - - /// - /// 获取解密的文本数据 - /// - string IDecryptionServices.ReadFileText(DecryptFileInfo fileInfo) - { - throw new System.NotImplementedException(); - } - - private static uint GetManagedReadBufferSize() - { - return 1024; - } -} - -/// -/// 资源文件偏移解密类 -/// -public class TestFileOffsetDecryption : IDecryptionServices -{ - /// - /// 同步方式获取解密的资源包对象 - /// 注意:加载流对象在资源包对象释放的时候会自动释放 - /// - DecryptResult IDecryptionServices.LoadAssetBundle(DecryptFileInfo fileInfo) - { - DecryptResult decryptResult = new DecryptResult(); - decryptResult.ManagedStream = null; - decryptResult.Result = AssetBundle.LoadFromFile(fileInfo.FileLoadPath, fileInfo.FileLoadCRC, GetFileOffset()); - return decryptResult; - } - - /// - /// 异步方式获取解密的资源包对象 - /// 注意:加载流对象在资源包对象释放的时候会自动释放 - /// - DecryptResult IDecryptionServices.LoadAssetBundleAsync(DecryptFileInfo fileInfo) - { - DecryptResult decryptResult = new DecryptResult(); - decryptResult.ManagedStream = null; - decryptResult.CreateRequest = AssetBundle.LoadFromFileAsync(fileInfo.FileLoadPath, fileInfo.FileLoadCRC, GetFileOffset()); - return decryptResult; - } - - /// - /// 后备方式获取解密的资源包对象 - /// - DecryptResult IDecryptionServices.LoadAssetBundleFallback(DecryptFileInfo fileInfo) - { - return new DecryptResult(); - } - - /// - /// 获取解密的字节数据 - /// - byte[] IDecryptionServices.ReadFileData(DecryptFileInfo fileInfo) - { - throw new System.NotImplementedException(); - } - - /// - /// 获取解密的文本数据 - /// - string IDecryptionServices.ReadFileText(DecryptFileInfo fileInfo) - { - throw new System.NotImplementedException(); - } - - private static ulong GetFileOffset() - { - return 32; - } -} - -/// -/// WebGL平台解密类 -/// 注意:WebGL平台支持内存解密 -/// -public class TestWebFileStreamDecryption : IWebDecryptionServices -{ - public WebDecryptResult LoadAssetBundle(WebDecryptFileInfo fileInfo) - { - /* - byte[] copyData = new byte[fileInfo.FileData.Length]; - Buffer.BlockCopy(fileInfo.FileData, 0, copyData, 0, fileInfo.FileData.Length); - - for (int i = 0; i < copyData.Length; i++) - { - copyData[i] ^= BundleStream.KEY; - } - - WebDecryptResult decryptResult = new WebDecryptResult(); - decryptResult.Result = AssetBundle.LoadFromMemory(copyData); - return decryptResult; - */ - - for (int i = 0; i < fileInfo.FileData.Length; i++) - { - fileInfo.FileData[i] ^= BundleStream.KEY; - } - - WebDecryptResult decryptResult = new WebDecryptResult(); - decryptResult.Result = AssetBundle.LoadFromMemory(fileInfo.FileData); - return decryptResult; - } -} \ No newline at end of file +*/ \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleUnpacker.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleUnpacker.cs new file mode 100644 index 00000000..98f0a793 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleUnpacker.cs @@ -0,0 +1,47 @@ +using System; +using System.IO; +using System.Text; +using System.Collections; +using UnityEngine; +using NUnit.Framework; +using YooAsset; + +/// +/// 测试内置文件解压 +/// +public class TestBundleUnpacker +{ + public IEnumerator RuntimeTester() + { + ResourcePackage package = YooAssets.GetPackage(TestDefine.AssetBundlePackageName); + Assert.IsNotNull(package); + + var resourceUnpacker = package.CreateResourceUnpacker("unpack", 10, 1); + Assert.AreEqual(resourceUnpacker.TotalDownloadCount, 2); + + yield return resourceUnpacker; + Assert.AreEqual(EOperationStatus.Succeed, resourceUnpacker.Status); + + // 等待一秒 + yield return new WaitForSeconds(1f); + } +} + +/* 资源代码流程 + * 内置文件解压(解压器) +BundleInfo::CreateDownloader() +{ + return _buildFileSystem.DownloadFileAsync(Bundle, options); +} +BuildinFileSystem::DownloadFileAsync() +{ + options.ImportFilePath = xxxxxx; + _unpackFileSystem.DownloadFileAsync(bundle, options); +} +UnpackFileSystem::DownloadFileAsync() +{ + string mainURL = ConvertToWWWPath(options.ImportFilePath); + options.SetURL(mainURL, mainURL); + return new DownloadPackageBundleOperation(bundle, options); +} +*/ \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleUnpacker.cs.meta b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleUnpacker.cs.meta new file mode 100644 index 00000000..a530eea8 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleUnpacker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e56d0784f1af504c821e67a5ba81862 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/T3_TestCacheFileSystem.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/T3_TestCacheFileSystem.cs index d3529e39..270b6fd4 100644 --- a/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/T3_TestCacheFileSystem.cs +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/T3_TestCacheFileSystem.cs @@ -3,18 +3,115 @@ using System.IO; using System.Text; using System.Collections; using UnityEngine; +using UnityEngine.UI; +using UnityEngine.U2D; using UnityEngine.TestTools; +using NUnit.Framework; using YooAsset; public class T3_TestCacheFileSystem : IPrebuildSetup, IPostBuildCleanup { public void Setup() { - throw new NotImplementedException(); } - public void Cleanup() { - throw new NotImplementedException(); + } + + [UnityTest] + public IEnumerator A_InitializePackage() + { + // 清空旧的缓存目录 + string projectPath = Path.GetDirectoryName(Application.dataPath); + string cacheRoot = $"{projectPath}/yoo"; + Directory.Delete(cacheRoot, true); + + // 拷贝打包资源到本地服务器 + { + string packageRoot = string.Empty; +#if UNITY_EDITOR + packageRoot = UnityEditor.EditorPrefs.GetString(T2_TestBuldinFileSystem.ASSET_BUNDLE_PACKAGE_ROOT_KEY); +#endif + if (Directory.Exists(packageRoot) == false) + throw new Exception($"Not found package root : {packageRoot}"); + + string testServerDirectory = "C://xampp/htdocs/CDN/Android/Test"; + + } + + // 初始化资源包 ASSET_BUNDLE + { + var package = YooAssets.CreatePackage(TestDefine.AssetBundlePackageName); + + // 初始化资源包 + var initParams = new HostPlayModeParameters(); + var fileDecryption = new TestFileStreamDecryption(); + var manifestProcess = new TestProcessManifest(); + + string hostServerIP = "http://127.0.0.1/CDN/Android/Test/"; + var remoteServices = new TestRemoteServices(hostServerIP); + initParams.BuildinFileSystemParameters = null; + initParams.CacheFileSystemParameters = FileSystemParameters.CreateDefaultCacheFileSystemParameters(remoteServices, fileDecryption); + initParams.CacheFileSystemParameters.AddParameter(FileSystemParametersDefine.MANIFEST_SERVICES, manifestProcess); + var initializeOp = package.InitializeAsync(initParams); + yield return initializeOp; + if (initializeOp.Status != EOperationStatus.Succeed) + Debug.LogError(initializeOp.Error); + Assert.AreEqual(EOperationStatus.Succeed, initializeOp.Status); + + // 请求资源版本 + var requetVersionOp = package.RequestPackageVersionAsync(); + yield return requetVersionOp; + if (requetVersionOp.Status != EOperationStatus.Succeed) + Debug.LogError(requetVersionOp.Error); + Assert.AreEqual(EOperationStatus.Succeed, requetVersionOp.Status); + + // 更新资源清单 + var updateManifestOp = package.UpdatePackageManifestAsync(requetVersionOp.PackageVersion); + yield return updateManifestOp; + if (updateManifestOp.Status != EOperationStatus.Succeed) + Debug.LogError(updateManifestOp.Error); + Assert.AreEqual(EOperationStatus.Succeed, updateManifestOp.Status); + } + } + private class TestRemoteServices : IRemoteServices + { + private readonly string _localServerRoot; + + public TestRemoteServices(string localServerRoot) + { + _localServerRoot = localServerRoot; + } + string IRemoteServices.GetRemoteMainURL(string fileName) + { + return $"{_localServerRoot}/{fileName}"; + } + string IRemoteServices.GetRemoteFallbackURL(string fileName) + { + return $"{_localServerRoot}/{fileName}"; + } + } + + + + [UnityTest] + public IEnumerator B1_TestBundlePlaying() + { + var tester = new TestBundlePlaying(); + yield return tester.RuntimeTester(); + } + + [UnityTest] + public IEnumerator B2_TestBundleImporter() + { + var tester = new TestBundleImporter(); + yield return tester.RuntimeTester(); + } + + [UnityTest] + public IEnumerator B3_TestBundleDownloader() + { + var tester = new TestBundleDownloader(); + yield return tester.RuntimeTester(); } } \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundleDownloader.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundleDownloader.cs new file mode 100644 index 00000000..1d16ed1e --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundleDownloader.cs @@ -0,0 +1,47 @@ +using System; +using System.IO; +using System.Text; +using System.Collections; +using UnityEngine; +using NUnit.Framework; +using YooAsset; + +/// +/// 测试远端文件下载 +/// +public class TestBundleDownloader +{ + public IEnumerator RuntimeTester() + { + ResourcePackage package = YooAssets.GetPackage(TestDefine.AssetBundlePackageName); + Assert.IsNotNull(package); + + var downloader = package.CreateResourceDownloader(10, 1); + if (downloader.TotalDownloadCount == 0) + { + Assert.Fail($"Test downloader not found any file !"); + } + + downloader.BeginDownload(); + downloader.DownloadFinishCallback = (DownloaderFinishData data) => + { + if (data.Succeed == false) + Assert.Fail($"Test downloader failed ! {downloader.Error}"); + }; + + // 等待一秒 + yield return new WaitForSeconds(1f); + } +} + +/* 资源代码流程 + * 远端文件下载(下载器) +CacheFileSystem::DownloadFileAsync() +{ + //RemoteServices返回CDN文件路径 + string mainURL = RemoteServices.GetRemoteMainURL(bundle.FileName); + string fallbackURL = RemoteServices.GetRemoteFallbackURL(bundle.FileName); + options.SetURL(mainURL, fallbackURL); + return new DownloadPackageBundleOperation(bundle, options); +} +*/ \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundleDownloader.cs.meta b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundleDownloader.cs.meta new file mode 100644 index 00000000..b3557f38 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundleDownloader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d1ca2e6dac603a459531fb09e61fd31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundleImporter.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundleImporter.cs new file mode 100644 index 00000000..0b8b8a32 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundleImporter.cs @@ -0,0 +1,57 @@ +using System; +using System.IO; +using System.Text; +using System.Collections; +using UnityEngine; +using NUnit.Framework; +using YooAsset; + +/// +/// 测试本地文件导入 +/// +public class TestBundleImporter +{ + public IEnumerator RuntimeTester() + { + ResourcePackage package = YooAssets.GetPackage(TestDefine.AssetBundlePackageName); + Assert.IsNotNull(package); + + string packageRoot = UnityEditor.EditorPrefs.GetString(T2_TestBuldinFileSystem.ASSET_BUNDLE_PACKAGE_ROOT_KEY); + DirectoryInfo packageDir = new DirectoryInfo(packageRoot); + string fileRoot = $"{packageDir.Parent.FullName}/OutputCache"; + + ImportFileInfo fileInfoA = new ImportFileInfo(); + fileInfoA.FilePath = $"{fileRoot}/assets_samples_test_sample_testres3_import_prefab_importa.bundle.encrypt"; + fileInfoA.BundleName = "assets_samples_test_sample_testres3_import_prefab_importa.bundle"; + + ImportFileInfo fileInfoB = new ImportFileInfo(); + fileInfoB.FilePath = $"{fileRoot}/assets_samples_test_sample_testres3_import_prefab_importb.bundle.encrypt"; + fileInfoB.BundleName = "assets_samples_test_sample_testres3_import_prefab_importb.bundle"; + + ImportFileInfo[] importInfos = { fileInfoA, fileInfoB }; + var unpacker = package.CreateResourceImporter(importInfos, 10, 1); + Assert.AreEqual(unpacker.TotalDownloadCount, 2); + + unpacker.BeginDownload(); + yield return unpacker; + Assert.AreEqual(EOperationStatus.Succeed, unpacker.Status); + + // 等待一秒 + yield return new WaitForSeconds(1f); + } +} + +/* 资源代码流程 + * 本地文件导入(导入器) +BundleInfo::CreateDownloader() +{ + options.ImportFilePath = _importFilePath; + return _cacheFileSystem.DownloadFileAsync(Bundle, options); +} +CacheFileSystem::DownloadFileAsync() +{ + string mainURL = ConvertToWWWPath(options.ImportFilePath); + options.SetURL(mainURL, mainURL); + return new DownloadPackageBundleOperation(bundle, options); +} +*/ \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundleImporter.cs.meta b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundleImporter.cs.meta new file mode 100644 index 00000000..dcaca886 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundleImporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 84a2bd73c962d0a4c9c3373ee8cd5380 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundlePlaying.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundlePlaying.cs new file mode 100644 index 00000000..2a061cf9 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundlePlaying.cs @@ -0,0 +1,71 @@ +using System; +using System.IO; +using System.Text; +using System.Collections; +using UnityEngine; +using NUnit.Framework; +using YooAsset; + +/// +/// 测试边玩边下 +/// +public class TestBundlePlaying +{ + public IEnumerator RuntimeTester() + { + ResourcePackage package = YooAssets.GetPackage(TestDefine.AssetBundlePackageName); + Assert.IsNotNull(package); + + if (package.IsNeedDownloadFromRemote("panel_a") == false) + { + Assert.Fail("Load bundle is already existed !"); + } + if (package.IsNeedDownloadFromRemote("panel_b") == false) + { + Assert.Fail("Load bundle is already existed !"); + } + + // 测试异步加载 + { + var assetsHandle = package.LoadAssetAsync("panel_a"); + yield return assetsHandle; + Assert.AreEqual(EOperationStatus.Succeed, assetsHandle.Status); + } + + // 测试同步加载 + { + var assetsHandle = package.LoadAssetSync("panel_b"); + yield return assetsHandle; + Assert.AreEqual(EOperationStatus.Failed, assetsHandle.Status); + + yield return new WaitForSeconds(1f); + assetsHandle = package.LoadAssetSync("panel_b"); + yield return assetsHandle; + Assert.AreEqual(EOperationStatus.Succeed, assetsHandle.Status); + } + + // 等待一秒 + yield return new WaitForSeconds(1f); + } +} + +/* 资源代码流程 + * 远端文件下载(加载器) +CacheFileSystem::LoadBundleFile() +{ + _cacheFileSystem.LoadBundleFile(bundle); +} +CacheFileSystem::LoadAssetBundleOperation() +{ + DownloadFileOptions options = new DownloadFileOptions(int.MaxValue, 60); + _cacheFileSystem.DownloadFileAsync(_bundle, options); +} +CacheFileSystem::DownloadFileAsync() +{ + //RemoteServices返回CDN文件路径 + string mainURL = RemoteServices.GetRemoteMainURL(bundle.FileName); + string fallbackURL = RemoteServices.GetRemoteFallbackURL(bundle.FileName); + options.SetURL(mainURL, fallbackURL); + return new DownloadPackageBundleOperation(bundle, options); +} +*/ \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundlePlaying.cs.meta b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundlePlaying.cs.meta new file mode 100644 index 00000000..2d6279cd --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T3_TestCacheFileSystem/TestBundlePlaying.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6db248f26f2eaaa4282a7bbdf709c321 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/TestDefine.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/TestDefine.cs index c7da3c16..635527cf 100644 --- a/Assets/YooAsset/Samples~/Test Sample/Runtime/TestDefine.cs +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/TestDefine.cs @@ -1,6 +1,6 @@  public class TestDefine { - public const string AssetBundlePackageName = "AssetBundlePackage"; - public const string RawBundlePackageName = "RawBundlePackage"; + public const string AssetBundlePackageName = "AssetBundleTestPackage"; + public const string RawBundlePackageName = "RawBundleTestPackage"; } \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/TestLoadAsset/TestLoadPanel.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/TestLoadAsset/TestLoadPanel.cs index 03a8e6ac..f34385c9 100644 --- a/Assets/YooAsset/Samples~/Test Sample/Runtime/TestLoadAsset/TestLoadPanel.cs +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/TestLoadAsset/TestLoadPanel.cs @@ -35,6 +35,7 @@ public class TestLoadPanel Assert.IsNotNull(instantiateOp.Result); TestLogger.Log(this, instantiateOp.Result.name); + GameObject.Destroy(instantiateOp.Result); } } } \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/TestLoadAsset/TestLoadPrefab.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/TestLoadAsset/TestLoadPrefab.cs index b21fd503..47ec14d3 100644 --- a/Assets/YooAsset/Samples~/Test Sample/Runtime/TestLoadAsset/TestLoadPrefab.cs +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/TestLoadAsset/TestLoadPrefab.cs @@ -42,6 +42,7 @@ public class TestLoadPrefab Assert.IsNotNull(instantiateOp.Result); TestLogger.Log(this, instantiateOp.Result.name); + GameObject.Destroy(instantiateOp.Result); } // 同步加载指定预制体 @@ -57,6 +58,7 @@ public class TestLoadPrefab Assert.IsNotNull(instantiateOp.Result); TestLogger.Log(this, instantiateOp.Result.name); + GameObject.Destroy(instantiateOp.Result); } } } \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes/SpriteAtlas/atlas_icon.spriteatlas b/Assets/YooAsset/Samples~/Test Sample/TestRes/SpriteAtlas/atlas_icon.spriteatlas index 54626088..29cbf149 100644 --- a/Assets/YooAsset/Samples~/Test Sample/TestRes/SpriteAtlas/atlas_icon.spriteatlas +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes/SpriteAtlas/atlas_icon.spriteatlas @@ -36,10 +36,6 @@ SpriteAtlas: bindAsDefault: 1 isAtlasV2: 0 cachedData: {fileID: 0} - packedSpriteRenderDataKeys: - - 379c45e0c5ba5e54e8df03f52e4c7680: 21300000 - - fcab35236e33438448805a9211b0cc19: 21300000 - - 3b8db7241fc8ff54e9dea6fc64cfd7e5: 21300000 m_MasterAtlas: {fileID: 0} m_PackedSprites: - {fileID: 21300000, guid: 379c45e0c5ba5e54e8df03f52e4c7680, type: 3} diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes/常规资产.txt b/Assets/YooAsset/Samples~/Test Sample/TestRes/常规资产.txt new file mode 100644 index 00000000..e69de29b diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes/常规资产.txt.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes/常规资产.txt.meta new file mode 100644 index 00000000..df36a3d3 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes/常规资产.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8125b69e669e19e41a4c67896f1f98b0 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes2/测试资产引用.txt b/Assets/YooAsset/Samples~/Test Sample/TestRes2/测试资产引用.txt new file mode 100644 index 00000000..e69de29b diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes2/测试资产引用.txt.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes2/测试资产引用.txt.meta new file mode 100644 index 00000000..1119fdf8 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes2/测试资产引用.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 80285bcc262cc36488d96950c2a07504 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/import.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes3/import.meta new file mode 100644 index 00000000..39f416eb --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/import.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 35f454fb80a715047bcf0ce30c7c4f18 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/import/prefab_importA.prefab b/Assets/YooAsset/Samples~/Test Sample/TestRes3/import/prefab_importA.prefab new file mode 100644 index 00000000..62da2d47 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/import/prefab_importA.prefab @@ -0,0 +1,33 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3418152319973048114 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7029742931587134142} + m_Layer: 0 + m_Name: prefab_importA + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7029742931587134142 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3418152319973048114} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 10, z: 5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/import/prefab_importA.prefab.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes3/import/prefab_importA.prefab.meta new file mode 100644 index 00000000..82cb33f2 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/import/prefab_importA.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e4330b1e2be2e784fb81d05fad8072af +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/import/prefab_importB.prefab b/Assets/YooAsset/Samples~/Test Sample/TestRes3/import/prefab_importB.prefab new file mode 100644 index 00000000..368c5ab4 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/import/prefab_importB.prefab @@ -0,0 +1,33 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3418152319973048114 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7029742931587134142} + m_Layer: 0 + m_Name: prefab_importB + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7029742931587134142 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3418152319973048114} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 10, z: 5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/import/prefab_importB.prefab.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes3/import/prefab_importB.prefab.meta new file mode 100644 index 00000000..7fcd3468 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/import/prefab_importB.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8a3d81de5069340469960fcef3ac152d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audioA.prefab b/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audioA.prefab index 0a871f83..8d8bc06b 100644 --- a/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audioA.prefab +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audioA.prefab @@ -10,7 +10,6 @@ GameObject: m_Component: - component: {fileID: 1740794871874781600} - component: {fileID: 8364371343008149393} - - component: {fileID: 7423861191467597400} m_Layer: 0 m_Name: prefab_audioA m_TagString: Untagged @@ -129,11 +128,3 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 ---- !u!81 &7423861191467597400 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3749121449083481702} - m_Enabled: 1 diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audioB.prefab b/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audioB.prefab index 2cd614d8..21466c06 100644 --- a/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audioB.prefab +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audioB.prefab @@ -10,7 +10,6 @@ GameObject: m_Component: - component: {fileID: 1740794871874781600} - component: {fileID: 8364371343008149393} - - component: {fileID: 7423861191467597400} m_Layer: 0 m_Name: prefab_audioB m_TagString: Untagged @@ -129,11 +128,3 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 ---- !u!81 &7423861191467597400 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3749121449083481702} - m_Enabled: 1 diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack.meta new file mode 100644 index 00000000..060412cc --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 401af1ca0abf3ae4594631e5f71bfe27 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack/prefab_unpackA.prefab b/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack/prefab_unpackA.prefab new file mode 100644 index 00000000..0765bf42 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack/prefab_unpackA.prefab @@ -0,0 +1,33 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3418152319973048114 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7029742931587134142} + m_Layer: 0 + m_Name: prefab_unpackA + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7029742931587134142 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3418152319973048114} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 10, z: 5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack/prefab_unpackA.prefab.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack/prefab_unpackA.prefab.meta new file mode 100644 index 00000000..9afc64c1 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack/prefab_unpackA.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 73dbe212a75e3c247b96f50c2a2c5321 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack/prefab_unpackB.prefab b/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack/prefab_unpackB.prefab new file mode 100644 index 00000000..db27fdbc --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack/prefab_unpackB.prefab @@ -0,0 +1,33 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3418152319973048114 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7029742931587134142} + m_Layer: 0 + m_Name: prefab_unpackB + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7029742931587134142 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3418152319973048114} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 10, z: 5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack/prefab_unpackB.prefab.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack/prefab_unpackB.prefab.meta new file mode 100644 index 00000000..7ec636a1 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/unpack/prefab_unpackB.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e19ba44403a2cc945b7880d85ac5087e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/加密资产.txt b/Assets/YooAsset/Samples~/Test Sample/TestRes3/加密资产.txt new file mode 100644 index 00000000..e69de29b diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/加密资产.txt.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes3/加密资产.txt.meta new file mode 100644 index 00000000..60bca2ea --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/加密资产.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 824d0b82d9a0f3e40821f93ddf583cc1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: