From f383c593270df632c92e47075c6cb7fd4ce3d4f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Thu, 10 Jul 2025 22:43:43 +0800 Subject: [PATCH] update mini game sample MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增Google Play文件系统扩展 --- .../Runtime/GooglePlayFileSystem.meta | 8 ++ .../GooglePlayFileSystem.cs | 42 +++++++++ .../GooglePlayFileSystem.cs.meta | 11 +++ .../GooglePlayFileSystem/Operation.meta | 8 ++ .../Operation/GPFSLoadAssetBundleOperation.cs | 85 +++++++++++++++++++ .../GPFSLoadAssetBundleOperation.cs.meta | 11 +++ .../Runtime/YooAsset.MiniGame.asmdef | 3 +- 7 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem.meta create mode 100644 Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/GooglePlayFileSystem.cs create mode 100644 Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/GooglePlayFileSystem.cs.meta create mode 100644 Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation.meta create mode 100644 Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation/GPFSLoadAssetBundleOperation.cs create mode 100644 Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation/GPFSLoadAssetBundleOperation.cs.meta diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem.meta b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem.meta new file mode 100644 index 00000000..588dabdc --- /dev/null +++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d27136885efd6ab4fae1a1fea23b0010 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/GooglePlayFileSystem.cs b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/GooglePlayFileSystem.cs new file mode 100644 index 00000000..11e2ba6e --- /dev/null +++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/GooglePlayFileSystem.cs @@ -0,0 +1,42 @@ +#if UNITY_ANDROID && GOOGLE_PLAY +using System.Collections.Generic; +using UnityEngine; +using YooAsset; +using System.Linq; +using System; + +public static class GooglePlayFileSystemCreater +{ + public static FileSystemParameters CreateFileSystemParameters(string packageRoot) + { + string fileSystemClass = $"{nameof(GooglePlayFileSystem)},YooAsset.MiniGame"; + var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot); + return fileSystemParams; + } +} + +/// +/// 兼容谷歌Play Asset Delivery的文件系统 +/// +internal class GooglePlayFileSystem : DefaultBuildinFileSystem +{ + public GooglePlayFileSystem() + { + } + + public override FSLoadBundleOperation LoadBundleFile(PackageBundle bundle) + { + if (bundle.BundleType == (int)EBuildBundleType.AssetBundle) + { + var operation = new DBFSLoadAssetBundleOperation(this, bundle); + return operation; + } + else + { + string error = $"{nameof(GooglePlayFileSystem)} not support load bundle type : {bundle.BundleType}"; + var operation = new FSLoadBundleCompleteOperation(error); + return operation; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/GooglePlayFileSystem.cs.meta b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/GooglePlayFileSystem.cs.meta new file mode 100644 index 00000000..af2a792f --- /dev/null +++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/GooglePlayFileSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e26d6ba3f3c6cd48bc22d40f1857f89 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation.meta b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation.meta new file mode 100644 index 00000000..8b758e3b --- /dev/null +++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 055e7cf3bb9567f43bf15964d43c632f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation/GPFSLoadAssetBundleOperation.cs b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation/GPFSLoadAssetBundleOperation.cs new file mode 100644 index 00000000..78c9495f --- /dev/null +++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation/GPFSLoadAssetBundleOperation.cs @@ -0,0 +1,85 @@ +#if UNITY_ANDROID && GOOGLE_PLAY +using System.IO; +using UnityEngine; +using YooAsset; +using Google.Play.AssetDelivery; + +internal class GPFSLoadAssetBundleOperation : FSLoadBundleOperation +{ + private enum ESteps + { + None, + LoadAssetBundle, + CheckResult, + Done, + } + + private readonly GooglePlayFileSystem _fileSystem; + private readonly PackageBundle _bundle; + private PlayAssetBundleRequest _bundleRequest; + private ESteps _steps = ESteps.None; + + + internal GPFSLoadAssetBundleOperation(GooglePlayFileSystem fileSystem, PackageBundle bundle) + { + _fileSystem = fileSystem; + _bundle = bundle; + } + internal override void InternalStart() + { + DownloadProgress = 1f; + DownloadedBytes = _bundle.FileSize; + _steps = ESteps.LoadAssetBundle; + } + internal override void InternalUpdate() + { + if (_steps == ESteps.None || _steps == ESteps.Done) + return; + + if (_steps == ESteps.LoadAssetBundle) + { + if (_bundle.Encrypted) + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = $"The {nameof(GooglePlayFileSystem)} not support bundle encrypted !"; + YooLogger.Error(Error); + return; + } + + _bundleRequest = PlayAssetDelivery.RetrieveAssetBundleAsync(_bundle.FileName); + _steps = ESteps.CheckResult; + } + + if (_steps == ESteps.CheckResult) + { + if (_bundleRequest.IsDone == false) + return; + + if (_bundleRequest.Error != AssetDeliveryErrorCode.NoError) + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = $"Failed to load delivery asset bundle file : {_bundle.BundleName} Error : {_bundleRequest.Error}"; + YooLogger.Error(Error); + } + else + { + _steps = ESteps.Done; + Status = EOperationStatus.Succeed; + Result = new AssetBundleResult(_fileSystem, _bundle, _bundleRequest.AssetBundle, null); + } + } + } + internal override void InternalWaitForAsyncComplete() + { + if (_steps != ESteps.Done) + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = $"{nameof(GooglePlayFileSystem)} not support sync load method !"; + UnityEngine.Debug.LogError(Error); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation/GPFSLoadAssetBundleOperation.cs.meta b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation/GPFSLoadAssetBundleOperation.cs.meta new file mode 100644 index 00000000..79428554 --- /dev/null +++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/GooglePlayFileSystem/Operation/GPFSLoadAssetBundleOperation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0aeb57dcd2a7a8841bb161f5f343a25e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/YooAsset.MiniGame.asmdef b/Assets/YooAsset/Samples~/Mini Game/Runtime/YooAsset.MiniGame.asmdef index 112a17a3..fc530f53 100644 --- a/Assets/YooAsset/Samples~/Mini Game/Runtime/YooAsset.MiniGame.asmdef +++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/YooAsset.MiniGame.asmdef @@ -4,7 +4,8 @@ "references": [ "GUID:e34a5702dd353724aa315fb8011f08c3", "GUID:5efd170ecd8084500bed5692932fe14e", - "GUID:bb21d6197862c4c3e863390dec9859a7" + "GUID:bb21d6197862c4c3e863390dec9859a7", + "GUID:870f26a2ffa82429195df0861505c5d5" ], "includePlatforms": [], "excludePlatforms": [],