diff --git a/Assets/YooAsset/Samples~/Test Sample/Editor/TestPackageBuilder.cs b/Assets/YooAsset/Samples~/Test Sample/Editor/TestPackageBuilder.cs index 636566c5..f5386e35 100644 --- a/Assets/YooAsset/Samples~/Test Sample/Editor/TestPackageBuilder.cs +++ b/Assets/YooAsset/Samples~/Test Sample/Editor/TestPackageBuilder.cs @@ -71,6 +71,7 @@ public static class TestPackageBuilder buildParameters.ClearBuildCacheFiles = true; buildParameters.UseAssetDependencyDB = true; buildParameters.BuiltinShadersBundleName = builtinShaderBundleName; + buildParameters.EncryptionServices = new FileStreamEncryption(); var pipeline = new ScriptableBuildPipeline(); BuildResult buildResult = pipeline.Run(buildParameters, false); @@ -107,6 +108,7 @@ public static class TestPackageBuilder buildParameters.CompressOption = ECompressOption.LZ4; buildParameters.ClearBuildCacheFiles = true; buildParameters.UseAssetDependencyDB = true; + buildParameters.EncryptionServices = new FileStreamEncryption(); var pipeline = new BuiltinBuildPipeline(); BuildResult buildResult = pipeline.Run(buildParameters, false); 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 dc2af156..b82ea406 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 @@ -160,6 +160,24 @@ public class T0_InitYooAssets : IPrebuildSetup, IPostBuildCleanup collector5.PackRuleName = nameof(YooAsset.Editor.PackDirectory); YooAsset.Editor.AssetBundleCollectorSettingData.CreateCollector(referenceGroup, collector5); } + + // 加密测试文件 + var encryptGroup = YooAsset.Editor.AssetBundleCollectorSettingData.CreateGroup(testPackage, "EncryptGroup"); + { + var collector1 = new YooAsset.Editor.AssetBundleCollector(); + collector1.CollectPath = ""; + collector1.CollectorGUID = "e082d492b9da65e499cee3495be3645d"; //TestRes3/music目录 + collector1.CollectorType = YooAsset.Editor.ECollectorType.MainAssetCollector; + collector1.PackRuleName = nameof(YooAsset.Editor.PackDirectory); + YooAsset.Editor.AssetBundleCollectorSettingData.CreateCollector(referenceGroup, 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.PackDirectory); + YooAsset.Editor.AssetBundleCollectorSettingData.CreateCollector(referenceGroup, collector2); + } } private static void CreateRawBundlePackageCollector() { 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 64a8cc29..a99048af 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 @@ -60,7 +60,8 @@ public class T2_TestBuldinFileSystem : IPrebuildSetup, IPostBuildCleanup // 初始化资源包 var initParams = new OfflinePlayModeParameters(); - initParams.BuildinFileSystemParameters = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(null, packageRoot); + var decryption = new FileStreamDecryption(); + initParams.BuildinFileSystemParameters = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(decryption, packageRoot); var initializeOp = package.InitializeAsync(initParams); yield return initializeOp; if (initializeOp.Status != EOperationStatus.Succeed) @@ -181,14 +182,21 @@ public class T2_TestBuldinFileSystem : IPrebuildSetup, IPostBuildCleanup var tester = new TestLoadVideo(); yield return tester.RuntimeTester(); } - + [UnityTest] - public IEnumerator C_TestBundleReference() + public IEnumerator C1_TestBundleReference() { var tester = new TestBundleReference(); yield return tester.RuntimeTester(); } + [UnityTest] + public IEnumerator C2_TestBundleEncryption() + { + var tester = new TestBundleEncryption(); + yield return tester.RuntimeTester(); + } + [UnityTest] public IEnumerator D_DestroyPackage() { 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 4957907f..b82160cd 100644 --- a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleEncryption.cs +++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleEncryption.cs @@ -1,9 +1,38 @@ using System; 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 TestBundleEncryption +{ + public IEnumerator RuntimeTester() + { + ResourcePackage package = YooAssets.GetPackage(TestDefine.AssetBundlePackageName); + Assert.IsNotNull(package); + + // 加载音乐播放预制体 + { + var assetHandle = package.LoadAssetAsync("prefab_audio"); + yield return assetHandle; + Assert.AreEqual(EOperationStatus.Succeed, assetHandle.Status); + + var go = assetHandle.InstantiateSync(Vector3.zero, Quaternion.identity); + Assert.IsNotNull(go); + + var audioSource = go.GetComponent(); + Assert.IsNotNull(audioSource.clip); + } + + // 试听三秒钟 + yield return new WaitForSeconds(3f); + } +} /// /// 文件流加密方式 @@ -12,7 +41,8 @@ public class FileStreamEncryption : IEncryptionServices { public EncryptResult Encrypt(EncryptFileInfo fileInfo) { - if (fileInfo.BundleName.Contains("_gameres_audio")) + // 说明:对TestRes3资源目录进行加密 + if (fileInfo.BundleName.Contains("_testres3_")) { var fileData = File.ReadAllBytes(fileInfo.FileLoadPath); for (int i = 0; i < fileData.Length; i++) @@ -41,8 +71,8 @@ public class FileOffsetEncryption : IEncryptionServices { public EncryptResult Encrypt(EncryptFileInfo fileInfo) { - // 注意:只对音频资源包加密 - if (fileInfo.BundleName.Contains("_gameres_audio")) + // 说明:对TestRes3资源目录进行加密 + if (fileInfo.BundleName.Contains("_testres3_")) { int offset = 32; byte[] fileData = File.ReadAllBytes(fileInfo.FileLoadPath); diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes3.meta new file mode 100644 index 00000000..61c5ca79 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 322528c1db93d664b92120fa0c91e484 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/music.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes3/music.meta new file mode 100644 index 00000000..b35b9dd6 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/music.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e082d492b9da65e499cee3495be3645d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/music/music_encrypt.wav b/Assets/YooAsset/Samples~/Test Sample/TestRes3/music/music_encrypt.wav new file mode 100644 index 00000000..0f66dd53 Binary files /dev/null and b/Assets/YooAsset/Samples~/Test Sample/TestRes3/music/music_encrypt.wav differ diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/music/music_encrypt.wav.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes3/music/music_encrypt.wav.meta new file mode 100644 index 00000000..8e450aef --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/music/music_encrypt.wav.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: cec4a3bb047ca4e478315ee5c98fa75a +AudioImporter: + externalObjects: {} + serializedVersion: 7 + defaultSettings: + serializedVersion: 2 + loadType: 2 + sampleRateSetting: 0 + sampleRateOverride: 0 + compressionFormat: 1 + quality: 0.5 + conversionMode: 0 + preloadAudioData: 1 + platformSettingOverrides: + 1: + serializedVersion: 2 + loadType: 2 + sampleRateSetting: 0 + sampleRateOverride: 0 + compressionFormat: 1 + quality: 0.5 + conversionMode: 0 + preloadAudioData: 1 + 4: + serializedVersion: 2 + loadType: 2 + sampleRateSetting: 0 + sampleRateOverride: 0 + compressionFormat: 1 + quality: 0.5 + conversionMode: 0 + preloadAudioData: 1 + 7: + serializedVersion: 2 + loadType: 2 + sampleRateSetting: 0 + sampleRateOverride: 0 + compressionFormat: 1 + quality: 0.5 + conversionMode: 0 + preloadAudioData: 1 + 13: + serializedVersion: 2 + loadType: 2 + sampleRateSetting: 2 + sampleRateOverride: 44100 + compressionFormat: 7 + quality: 0.5 + conversionMode: 0 + preloadAudioData: 1 + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab.meta new file mode 100644 index 00000000..5017cde2 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8c5a1726d94498e4cbe30f5f510cc796 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audio.prefab b/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audio.prefab new file mode 100644 index 00000000..60345b15 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audio.prefab @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3749121449083481702 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1740794871874781600} + - component: {fileID: 8364371343008149393} + - component: {fileID: 7423861191467597400} + m_Layer: 0 + m_Name: prefab_audio + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1740794871874781600 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3749121449083481702} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.5441012, y: -1.4355755, z: -5.0895267} + 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} +--- !u!82 &8364371343008149393 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3749121449083481702} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: cec4a3bb047ca4e478315ee5c98fa75a, type: 3} + m_PlayOnAwake: 1 + m_Volume: 1 + m_Pitch: 1 + Loop: 1 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + 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_audio.prefab.meta b/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audio.prefab.meta new file mode 100644 index 00000000..b26ed9c1 --- /dev/null +++ b/Assets/YooAsset/Samples~/Test Sample/TestRes3/prefab/prefab_audio.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 742458f8f1eb9a74e840f3a6d3043678 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: