using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using System; using Cysharp.Threading.Tasks; public class BuiltInAssetCopyTask : LaunchTask { bool firstLaunch = false; public override void Begin() { duration = Mathf.Max(0.2f, expectTime); //非安卓平台的时间,安卓由sdk拷贝完成回调 if (Application.isEditor) { EditorCopyAsset(); } else { //安卓每次由sdk回调拷贝成功,其他平台由unity自己存储标记 switch (Application.platform) { case RuntimePlatform.Android: AndroidCopyAsset(); break; case RuntimePlatform.IPhonePlayer: IosCopyAsset(); break; case RuntimePlatform.WindowsPlayer: StandaloneCopyAsset(); break; } } if (!firstLaunch) { //LoadInitalConfig().Forget(); done = true; } } //应该是下载最新的表格后再次加载 非拷贝 //protected async UniTask LoadInitalConfig() //{ // await ConfigManager.Instance.LoadConfigByType(typeof(InitialFunctionConfig)); // done = true; //} public override void End() { if (AssetSource.isUseAssetBundle) { AssetBundleUtility.Instance.InitBuiltInAsset(); } // ConfigInitiator.SyncInit(); UIManager.Instance.CloseWindow(); UIManager.Instance.CloseWindow(); Language.InitDefaultLanguage(); } public override void Update() { if (done) { return; } if (!Application.isEditor) { //安卓每次由sdk回调拷贝成功,其他平台由unity自己存储标记 if (Application.platform == RuntimePlatform.Android) { AndroidWaitCopyAssetComplete(); } else { if (timer > duration) { done = true; } else { done = false; progress = timer / duration; } } } timer += Time.deltaTime; } private void AndroidWaitCopyAssetComplete() { if (!SDKUtils.Instance.AssetCopyFinished) { done = false; progress = timer / duration; } else { done = true; } } private void AndroidCopyAsset() { if (!SDKUtils.Instance.AssetCopyFinished) { //每次由sdk回调拷贝成功 firstLaunch = true; UnityEngine.Debug.Log("开始拷贝builtin资源"); SDKUtils.Instance.CopyAsset(1); //ynmbxxjUtil.Instance.CopyOneAsset("builtin_assetbundle"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin_assetbundle.manifest"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/musics"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/musics.manifest"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/prefabs"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/prefabs.manifest"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/sprites"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/sprites.manifest"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/animationclips"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/animationclips.manifest"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/materials"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/materials.manifest"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/scriptableobjects"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/scriptableobjects.manifest"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/font"); //ynmbxxjUtil.Instance.CopyOneAsset("builtin/font.manifest"); //foreach (var config in ConfigInitiator.builtinConfig) //{ // ynmbxxjUtil.Instance.CopyOneAsset("config/" + config); //} //AssetDeCompressTask.Decompress(ResourcesPath.Instance.ExternalStorePath); //LocalSave.SetString("BuiltInAssetCopyCompleted_Android", VersionConfig.Get().version); } else UnityEngine.Debug.Log("builtin资源已经拷贝过了"); } private void IosCopyAsset() { if (!VersionUtility.Instance.InIosAuditTime()) { if (!SDKUtils.builtinAssetCopyFinished) { firstLaunch = true; var targetDirectory = ResourcesPath.Instance.ExternalStorePath; if (!Directory.Exists(targetDirectory)) { Directory.CreateDirectory(targetDirectory); } var fileNames = new List(); //var files = new List(); //FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "builtin"), files); //foreach (var file in files) //{ // var name = Path.GetFileName(file.FullName); // fileNames.Add(StringUtility.Contact("builtin", Path.DirectorySeparatorChar, name)); //} //fileNames.Add("builtin_assetbundle"); //fileNames.Add("builtin_assetbundle.manifest"); var configFiles = new List(); FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "config"), configFiles); foreach (var file in configFiles) { var name = Path.GetFileName(file.FullName); fileNames.Add(StringUtility.Contact("config", Path.DirectorySeparatorChar, name)); } foreach (var item in fileNames) { var fromPath = StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, item); var toPath = StringUtility.Contact(targetDirectory, item); var destDirectoryName = Path.GetDirectoryName(toPath); if (!Directory.Exists(destDirectoryName)) { Directory.CreateDirectory(destDirectoryName); } File.Copy(fromPath, toPath, true); } LocalSave.SetString("BuiltInAssetCopyCompleted_IOSorStandalone", VersionConfig.Get().version); } } } private void StandaloneCopyAsset() { var targetDirectory = ResourcesPath.Instance.ExternalStorePath; if (!Directory.Exists(targetDirectory)) { Directory.CreateDirectory(targetDirectory); } var fileNames = new List(); //var files = new List(); //FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "builtin"), files); //foreach (var file in files) //{ // var name = Path.GetFileName(file.FullName); // fileNames.Add(StringUtility.Contact("builtin", Path.DirectorySeparatorChar, name)); //} //fileNames.Add("builtin_assetbundle"); //fileNames.Add("builtin_assetbundle.manifest"); var configFiles = new List(); FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "config"), configFiles); foreach (var file in configFiles) { var name = Path.GetFileName(file.FullName); fileNames.Add(StringUtility.Contact("config", Path.DirectorySeparatorChar, name)); } foreach (var item in fileNames) { var fromPath = StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, item); var toPath = StringUtility.Contact(targetDirectory, item); if (File.Exists(toPath)) { continue; } var destDirectoryName = Path.GetDirectoryName(toPath); if (!Directory.Exists(destDirectoryName)) { Directory.CreateDirectory(destDirectoryName); } File.Copy(fromPath, toPath, true); } } private void EditorCopyAsset() { if (AssetSource.isUseAssetBundle) { FileExtersion.DirectoryCopy(ResourcesPath.CONFIG_FODLER, ResourcesPath.Instance.StreamingAssetPath + "config"); FileExtersion.DirectoryCopy(ResourcesPath.ResourcesOutPath + "BuiltIn", ResourcesPath.Instance.StreamingAssetPath + "builtin"); } } }