少年修仙传客户端代码仓库
client_Wu Xijin
2019-02-13 69384fc92aa4934adf668ed05fc2b15bc91e0b46
3335 修改启动逻辑,加强首次启动游戏拷贝资源的健壮性。
1个文件已修改
305 ■■■■■ 已修改文件
Core/GameEngine/Login/Launch.cs 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Login/Launch.cs
@@ -9,122 +9,11 @@
public class Launch : MonoBehaviour
{
    static LaunchStage m_CurrentStage = LaunchStage.None;
    static int step = 0;
    static LaunchStage m_CurrentStage = LaunchStage.None;
    public static ProgressInfo progressInfo { get; private set; }
    private void Awake()
    {
        ResourcesPath.Instance.Init();
        SnxxzGame.Instance.gameObject.name = "__SnxxzGame__";
        Screen.sleepTimeout = SleepTimeout.NeverSleep;
        SDKUtility.Instance.Init();
#if UNITY_ANDROID && !UNITY_EDITOR
        if (!SDKUtility.builtinAssetCopyFinished)
        {
            SDKUtility.Instance.CopyOneAsset("builtin_assetbundle.7z");
            SDKUtility.Instance.CopyOneAsset("builtin_assetbundle.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/musics.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/musics.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/prefabs.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/prefabs.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/sprites.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/sprites.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/animationclips.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/animationclips.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/materials.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/materials.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/scriptableobjects.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/scriptableobjects.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("config/Contact.txt.7z");
            SDKUtility.Instance.CopyOneAsset("config/HelpInfo.txt.7z");
            SDKUtility.Instance.CopyOneAsset("config/PriorBundle.txt.7z");
            SDKUtility.Instance.CopyOneAsset("config/PriorLanguage.txt.7z");
            SDKUtility.Instance.CopyOneAsset("config/ApkUpdateUrl.txt.7z");
            AssetDeCompressTask.Decompress(ResourcesPath.Instance.ExternalStorePath);
            LocalSave.SetString("BuiltInAssetCopyCompleted_Android", VersionConfig.Get().version);
        }
#endif
#if UNITY_IOS && !UNITY_EDITOR
        if (!VersionUtility.Instance.InIosAuditTime())
        {
            if (!SDKUtility.builtinAssetCopyFinished)
            {
                var targetDirectory = ResourcesPath.Instance.ExternalStorePath;
                if (!Directory.Exists(targetDirectory))
                {
                    Directory.CreateDirectory(targetDirectory);
                }
                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);
                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_IOS", VersionConfig.Get().version);
            }
        }
#endif
        if (!AssetSource.builtInFromEditor)
        {
            AssetBundleUtility.Instance.InitBuiltInAsset();
        }
        ShaderUtility.InitGlobalParams();
        SoundPlayer.CreateSoundPlayer();
        SystemSetting.Instance.SetSoundVolume(SystemSetting.Instance.GetSoundVolume());
        SystemSetting.Instance.SetSoundEffect(SystemSetting.Instance.GetSoundEffect());
        SystemSetting.Instance.SetGameFps(SystemSetting.Instance.GetGameFps());
        GameObjectPoolManager.Instance.gameObject.name = "GameObjectPool";
        GameObjectPoolManager.Instance.Initialize();
        ExceptionCatcher.Init();
        ExceptionCatcher.Catch();
        DebugUtility.Instance.Init();
        GlobalTimeEvent.Instance.Begin();
    }
    float timer = 0f;
    Queue<LaunchTask> tasks = new Queue<LaunchTask>();
    LaunchTask currentTask = null;
    bool launchComplete = false;
@@ -133,18 +22,14 @@
    void Start()
    {
        WindowCenter.Instance.DestoryWinsByStage(WindowCenter.WindowStage.Launch);
        AssetBundleUtility.Instance.UnloadAssetBundle("builtin/prefabs", true, false);
        Application.backgroundLoadingPriority = ThreadPriority.High;
        SoundPlayer.Instance.PlayLoginMusic();
        Config.Instance.PreLoadConfigs();
        SystemSetting.Instance.LetFPSUnLimit();
        Config.Instance.RegisterGlobalEvent();
        PackageRegedit.Init();
        DebugUtility.Instance.CreateDebugRoot();
        WindowCenter.Instance.OpenFromLocal<LaunchWin>();
        ResourcesPath.Instance.Init();
        SnxxzGame.Instance.gameObject.name = "__SnxxzGame__";
        Screen.sleepTimeout = SleepTimeout.NeverSleep;
        SDKUtility.Instance.Init();
        var builtInAssetCopyTask = new BuiltInAssetCopyTask();
        var initSettingTask = new InitSettingTask();
        var sdkInitedTask = new SDKInitedTask();
        var assetCopyTask = new AssetCopyTask();
        var assetDecompressTask = new AssetDecompressTask();
@@ -155,6 +40,8 @@
        var configInitTask = new ConfigInitTask();
        var launchFadeOutTask = new LaunchFadeOutTask();
        tasks.Enqueue(builtInAssetCopyTask);
        tasks.Enqueue(initSettingTask);
#if !UNITY_EDITOR
        tasks.Enqueue(sdkInitedTask);
#endif
@@ -306,6 +193,180 @@
    }
    public class BuiltInAssetCopyTask : LaunchTask
    {
        bool firstLaunch = false;
        public override void Begin()
        {
            duration = Mathf.Max(0.1f, expectTime);
#if UNITY_ANDROID && !UNITY_EDITOR
        if (!SDKUtility.builtinAssetCopyFinished)
        {
            firstLaunch=true;
            SDKUtility.Instance.CopyOneAsset("builtin_assetbundle.7z");
            SDKUtility.Instance.CopyOneAsset("builtin_assetbundle.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/musics.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/musics.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/prefabs.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/prefabs.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/sprites.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/sprites.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/animationclips.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/animationclips.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/materials.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/materials.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/scriptableobjects.7z");
            SDKUtility.Instance.CopyOneAsset("builtin/scriptableobjects.manifest.7z");
            SDKUtility.Instance.CopyOneAsset("config/Contact.txt.7z");
            SDKUtility.Instance.CopyOneAsset("config/HelpInfo.txt.7z");
            SDKUtility.Instance.CopyOneAsset("config/PriorBundle.txt.7z");
            SDKUtility.Instance.CopyOneAsset("config/PriorLanguage.txt.7z");
            SDKUtility.Instance.CopyOneAsset("config/ApkUpdateUrl.txt.7z");
            AssetDeCompressTask.Decompress(ResourcesPath.Instance.ExternalStorePath);
            LocalSave.SetString("BuiltInAssetCopyCompleted_Android", VersionConfig.Get().version);
        }
#endif
#if UNITY_IOS && !UNITY_EDITOR
        if (!VersionUtility.Instance.InIosAuditTime())
        {
            if (!SDKUtility.builtinAssetCopyFinished)
            {
                firstLaunch=true;
                var targetDirectory = ResourcesPath.Instance.ExternalStorePath;
                if (!Directory.Exists(targetDirectory))
                {
                    Directory.CreateDirectory(targetDirectory);
                }
                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);
                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_IOS", VersionConfig.Get().version);
            }
        }
#endif
            if (!firstLaunch)
            {
                done = true;
            }
        }
        public override void End()
        {
            if (!AssetSource.builtInFromEditor)
            {
                AssetBundleUtility.Instance.InitBuiltInAsset();
            }
            Config.Instance.RegisterGlobalEvent();
            Config.Instance.PreLoadConfigs();
            WindowCenter.Instance.DestoryWinsByStage(WindowCenter.WindowStage.Launch);
            AssetBundleUtility.Instance.UnloadAssetBundle("builtin/prefabs", true, false);
            WindowCenter.Instance.OpenFromLocal<LaunchWin>();
        }
        public override void Update()
        {
            if (done)
            {
                return;
            }
            if (timer > duration)
            {
                done = true;
            }
            else
            {
                done = false;
                progress = timer / duration;
            }
            timer += Time.deltaTime;
        }
    }
    public class InitSettingTask : LaunchTask
    {
        public override float expectTime {
            get { return LocalSave.GetFloat("InitSettingTask_ExpectTime", 1f); }
            protected set { LocalSave.SetFloat("InitSettingTask_ExpectTime", value); }
        }
        public override void Begin()
        {
            ShaderUtility.InitGlobalParams();
            SoundPlayer.CreateSoundPlayer();
            SystemSetting.Instance.SetSoundVolume(SystemSetting.Instance.GetSoundVolume());
            SystemSetting.Instance.SetSoundEffect(SystemSetting.Instance.GetSoundEffect());
            SystemSetting.Instance.SetGameFps(SystemSetting.Instance.GetGameFps());
            GameObjectPoolManager.Instance.gameObject.name = "GameObjectPool";
            GameObjectPoolManager.Instance.Initialize();
            ExceptionCatcher.Init();
            ExceptionCatcher.Catch();
            DebugUtility.Instance.Init();
            GlobalTimeEvent.Instance.Begin();
            SoundPlayer.Instance.PlayLoginMusic();
            Config.Instance.PreLoadConfigs();
            SystemSetting.Instance.LetFPSUnLimit();
            Config.Instance.RegisterGlobalEvent();
            PackageRegedit.Init();
            DebugUtility.Instance.CreateDebugRoot();
            done = true;
        }
        public override void End()
        {
            expectTime = timer;
        }
        public override void Update()
        {
            timer += Time.deltaTime;
        }
    }
    public class SDKInitedTask : LaunchTask
    {
        public override float expectTime {