yyl
2026-05-11 51b0f6ed9f4e1d3bb6f8144470b46908c7699a96
Main/Core/GameEngine/Launch/BuiltInAssetCopyTask.cs
@@ -1,4 +1,4 @@
using System.Collections;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
@@ -10,17 +10,25 @@
{
    bool firstLaunch = false;
    private bool doneInBegin = true;
    public override void Begin()
    {
        PriorLanguageConfig.LazyInitAsync().Forget();
        InitialFunctionConfig.LazyInitAsync().Forget();
        duration = Mathf.Max(0.2f, expectTime);  //非安卓平台的时间,安卓由sdk拷贝完成回调
        if (Application.isEditor)
        {
            EditorCopyAsset();
        }
        else if (Application.platform == RuntimePlatform.WebGLPlayer)
        {
            // WebGL平台无需拷贝文件,直接跳过
        }
        else
        {
            //安卓每次由sdk回调拷贝成功,其他平台由unity自己存储标记
            switch (Application.platform)
            {
                case RuntimePlatform.Android:
@@ -37,10 +45,10 @@
        if (!firstLaunch)
        {
            //LoadInitalConfig().Forget();
            done = true;
            doneInBegin = true;
        }
    }
    //应该是下载最新的表格后再次加载 非拷贝
    //protected async UniTask LoadInitalConfig()
@@ -50,16 +58,26 @@
    //    done = true;
    //}
    public override void End()
    public override async void End()
    {
        if (AssetSource.isUseAssetBundle)
        {
            AssetBundleUtility.Instance.InitBuiltInAsset();
        {
            // YooAsset 已在 Launch 阶段初始化内置资源,不再需要 AssetBundleUtility.InitBuiltInAsset()
            // YooAssetInitializer.Instance.DefaultPackage 已包含内置资源
            await LaunchInHot.Instance.InitSystemMgr();
            //  这里还没开始加载配置 但是提前加载了供LaunchWin使用
            UIManager.Instance.OpenWindowAsync<LaunchWin>().Forget();
        }
        // ConfigInitiator.SyncInit();
        UIManager.Instance.CloseWindow<DownLoadWin>();
        UIManager.Instance.CloseWindow<VersionUpdateWin>();
        Language.InitDefaultLanguage();
        OperationLogCollect.Instance.RecordLauchEvent(8);
    }
    public override void Update()
@@ -68,6 +86,18 @@
        {
            return;
        }
        if (!(PriorLanguageConfig.isInit && InitialFunctionConfig.isInit))
        {
            return;
        }
        if (doneInBegin)
        {
            done = true;
            return;
        }
        if (!Application.isEditor)
        {
            //安卓每次由sdk回调拷贝成功,其他平台由unity自己存储标记
@@ -112,43 +142,19 @@
    {
        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()
    private async void IosCopyAsset()
    {
        if (!VersionUtility.Instance.InIosAuditTime())
        if (!await VersionUtility.Instance.InIosAuditTime())
        {
            if (!SDKUtils.builtinAssetCopyFinished)
            {
@@ -161,28 +167,28 @@
                var fileNames = new List<string>();
                //var files = new List<FileInfo>();
                //FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "builtin"), files);
                //FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(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(StringUtility.Concat("builtin", Path.DirectorySeparatorChar, name));
                //}
                //fileNames.Add("builtin_assetbundle");
                //fileNames.Add("builtin_assetbundle.manifest");
                var configFiles = new List<FileInfo>();
                FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "config"), configFiles);
                FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(ResourcesPath.Instance.StreamingAssetPath, "config"), configFiles);
                foreach (var file in configFiles)
                {
                    var name = Path.GetFileName(file.FullName);
                    fileNames.Add(StringUtility.Contact("config", Path.DirectorySeparatorChar, name));
                    fileNames.Add(StringUtility.Concat("config", Path.DirectorySeparatorChar.ToString(), name));
                }
                foreach (var item in fileNames)
                {
                    var fromPath = StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, item);
                    var toPath = StringUtility.Contact(targetDirectory, item);
                    var fromPath = StringUtility.Concat(ResourcesPath.Instance.StreamingAssetPath, item);
                    var toPath = StringUtility.Concat(targetDirectory, item);
                    var destDirectoryName = Path.GetDirectoryName(toPath);
                    if (!Directory.Exists(destDirectoryName))
@@ -193,7 +199,10 @@
                    File.Copy(fromPath, toPath, true);
                }
                LocalSave.SetString("BuiltInAssetCopyCompleted_IOSorStandalone", VersionConfig.Get().version);
                VersionConfig.GetAsync().ContinueWith(config =>
                {
                    LocalSave.SetString("BuiltInAssetCopyCompleted_IOSorStandalone", config.version);
                }).Forget();
            }
        }
    }
@@ -207,29 +216,18 @@
        }
        var fileNames = new List<string>();
        //var files = new List<FileInfo>();
        //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<FileInfo>();
        FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "config"), configFiles);
        FileExtersion.GetAllDirectoryFileInfos(StringUtility.Concat(ResourcesPath.Instance.StreamingAssetPath, "config"), configFiles);
        foreach (var file in configFiles)
        {
            var name = Path.GetFileName(file.FullName);
            fileNames.Add(StringUtility.Contact("config", Path.DirectorySeparatorChar, name));
            fileNames.Add(StringUtility.Concat("config", Path.DirectorySeparatorChar.ToString(), name));
        }
        foreach (var item in fileNames)
        {
            var fromPath = StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, item);
            var toPath = StringUtility.Contact(targetDirectory, item);
            var fromPath = StringUtility.Concat(ResourcesPath.Instance.StreamingAssetPath, item);
            var toPath = StringUtility.Concat(targetDirectory, item);
            if (File.Exists(toPath))
            {
@@ -248,11 +246,11 @@
    private void EditorCopyAsset()
    {
        if (AssetSource.isUseAssetBundle)
        {
            FileExtersion.DirectoryCopy(ResourcesPath.CONFIG_FODLER, ResourcesPath.Instance.StreamingAssetPath + "config");
            FileExtersion.DirectoryCopy(ResourcesPath.ResourcesOutPath + "BuiltIn", ResourcesPath.Instance.StreamingAssetPath + "builtin");
        }
        // if (AssetSource.isUseAssetBundle)
        // {
        //     FileExtersion.DirectoryCopy(ResourcesPath.CONFIG_FODLER, ResourcesPath.Instance.StreamingAssetPath + "config");
        //     FileExtersion.DirectoryCopy(ResourcesPath.ResourcesOutPath + "BuiltIn", ResourcesPath.Instance.StreamingAssetPath + "builtin");
        // }
    }
}