Просмотр исходного кода

本地webgl雏形,避免跨域问题,获取服务器地址的json文件读的是本地

yun200895 1 месяц назад
Родитель
Сommit
b286d74d49
45 измененных файлов с 719 добавлено и 295 удалено
  1. 27 40
      GameClient/Assets/AssetBundleCollectorSetting.asset
  2. 6 6
      GameClient/Assets/Game/HotUpdate/Controller/GameController.cs
  3. 1 2
      GameClient/Assets/Game/HotUpdate/Game.HotUpdate.asmdef
  4. 5 0
      GameClient/Assets/Game/HotUpdate/HotUpdateDriver.cs
  5. 34 7
      GameClient/Assets/Game/HotUpdate/NetworkTCP/WChannel_WebGL.cs
  6. 24 11
      GameClient/Assets/Game/HotUpdate/UGUI/UGUIManager.cs
  7. 57 25
      GameClient/Assets/Game/HotUpdate/Views/Login/LoginView.cs
  8. 2 2
      GameClient/Assets/Game/Launcher/Game.Launcher.asmdef
  9. 24 8
      GameClient/Assets/Game/Launcher/HotUpdateProxy/HotUpdateCodeLoader.cs
  10. 12 10
      GameClient/Assets/Game/Launcher/LauncherController.cs
  11. 37 19
      GameClient/Assets/Game/Launcher/Version/VersionController.cs
  12. 0 0
      GameClient/Assets/Resources/Scenes/HotUpdate.unity
  13. 0 0
      GameClient/Assets/Resources/Scenes/HotUpdate.unity.meta
  14. 8 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData.meta
  15. BIN
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/MemoryProfiler.png
  16. 7 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/MemoryProfiler.png.meta
  17. BIN
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/favicon.ico
  18. 7 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/favicon.ico.meta
  19. BIN
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/fullscreen-button.png
  20. 7 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/fullscreen-button.png.meta
  21. BIN
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-empty-dark.png
  22. 7 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-empty-dark.png.meta
  23. BIN
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-empty-light.png
  24. 7 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-empty-light.png.meta
  25. BIN
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-full-dark.png
  26. 7 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-full-dark.png.meta
  27. BIN
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-full-light.png
  28. 7 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-full-light.png.meta
  29. 16 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/style.css
  30. 7 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/style.css.meta
  31. BIN
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/unity-logo-dark.png
  32. 7 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/unity-logo-dark.png.meta
  33. BIN
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/unity-logo-light.png
  34. 7 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/unity-logo-light.png.meta
  35. BIN
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/webgl-logo.png
  36. 7 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/webgl-logo.png.meta
  37. BIN
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/webmemd-icon.png
  38. 7 0
      GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/webmemd-icon.png.meta
  39. 4 2
      GameClient/Assets/link.xml
  40. 1 2
      GameClient/Packages/com.tuyoogame.yooasset@2.3.17/Editor/YooAsset.Editor.asmdef
  41. 3 0
      GameClient/ProjectSettings/EditorBuildSettings.asset
  42. 16 13
      GameClient/ProjectSettings/ProjectSettings.asset
  43. 86 12
      GameClient/ProjectSettings/QualitySettings.asset
  44. 7 1
      GameClient/UserSettings/EditorUserSettings.asset
  45. 265 135
      GameClient/UserSettings/Layouts/default-2022.dwlt

+ 27 - 40
GameClient/Assets/AssetBundleCollectorSetting.asset

@@ -33,7 +33,7 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/UI
         CollectorGUID: aed08f1fe291a0745900a0b2b06269b0
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackTopDirectory
         FilterRuleName: CollectUIResFile
         AssetTags: 
@@ -41,7 +41,7 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/Prefab
         CollectorGUID: 5d87553e524b6a648b7e76e811575a5a
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackDirectory
         FilterRuleName: CollectAll
         AssetTags: 
@@ -49,7 +49,7 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/Fight
         CollectorGUID: bf9dee37b45508541a010f8b143cb9dd
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackDirectory
         FilterRuleName: CollectAll
         AssetTags: 
@@ -57,7 +57,7 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/UI
         CollectorGUID: aed08f1fe291a0745900a0b2b06269b0
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackCollector
         FilterRuleName: CollectUIBytesFile
         AssetTags: 
@@ -65,7 +65,7 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/UUI
         CollectorGUID: ded485335a4aed145a2313c073d1c3a0
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackSeparately
         FilterRuleName: CollectAll
         AssetTags: 
@@ -73,7 +73,7 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/Material
         CollectorGUID: 003a7ea568804294c94a860b7ce88416
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackDirectory
         FilterRuleName: CollectAll
         AssetTags: 
@@ -84,17 +84,17 @@ MonoBehaviour:
       ActiveRuleName: EnableGroup
       Collectors:
       - CollectPath: Assets/Res/Effect/DressUp
-        CollectorGUID: 4b0c1f03aa4fd074d9a32273318bb07c
+        CollectorGUID: 
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackTopDirectory
         FilterRuleName: CollectArtDynamic
         AssetTags: 
         UserData: 
       - CollectPath: Assets/Res/Texture/DressUp
-        CollectorGUID: 5ac6c75fa17f3584d98c5e7cf7d7304e
+        CollectorGUID: 
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackArt
         FilterRuleName: CollectAll
         AssetTags: 
@@ -102,7 +102,7 @@ MonoBehaviour:
       - CollectPath: Assets/Res/Animation/DressUp
         CollectorGUID: d4f446a19a378c544afe71377d27d83f
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackDirectory
         FilterRuleName: CollectAll
         AssetTags: 
@@ -113,9 +113,9 @@ MonoBehaviour:
       ActiveRuleName: EnableGroup
       Collectors:
       - CollectPath: Assets/Res/Animation/Card
-        CollectorGUID: 33f777d553cae254a950b2f1303efb0c
+        CollectorGUID: 
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackTopDirectory
         FilterRuleName: CollectArtDynamic
         AssetTags: 
@@ -126,9 +126,9 @@ MonoBehaviour:
       ActiveRuleName: EnableGroup
       Collectors:
       - CollectPath: Assets/Res/ShaderVariants
-        CollectorGUID: 676a2f3558d319645a95dd8783120082
+        CollectorGUID: 
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackShaderVariants
         FilterRuleName: CollectShaderVariants
         AssetTags: 
@@ -139,9 +139,9 @@ MonoBehaviour:
       ActiveRuleName: EnableGroup
       Collectors:
       - CollectPath: Assets/Res
-        CollectorGUID: 4b7ed63121c873b47abab778da89ae6d
+        CollectorGUID: 
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackArt
         FilterRuleName: CollectArtPreload
         AssetTags: 
@@ -154,7 +154,7 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/LoginRes
         CollectorGUID: e9a4504fc7b6f554a9ff915668eb371c
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackDirectory
         FilterRuleName: CollectAll
         AssetTags: 
@@ -162,24 +162,11 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/Dll
         CollectorGUID: 245d660d0740f254aa5fbfc8ad44f173
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackTopDirectory
         FilterRuleName: CollectAll
         AssetTags: 
         UserData: 
-    - GroupName: scene
-      GroupDesc: 
-      AssetTags: preload
-      ActiveRuleName: EnableGroup
-      Collectors:
-      - CollectPath: Assets/ResIn/Scene
-        CollectorGUID: 95e5901e274f74f419ed53268ff767ba
-        CollectorType: 0
-        AddressRuleName: AddressByFileName
-        PackRuleName: PackSeparately
-        FilterRuleName: CollectAll
-        AssetTags: 
-        UserData: 
     - GroupName: scenebg
       GroupDesc: 
       AssetTags: dynamic
@@ -188,7 +175,7 @@ MonoBehaviour:
       - CollectPath: Assets/Res/Texture/SceneBg
         CollectorGUID: 3800eeb86dfe6154a81435999b1708b7
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackArt
         FilterRuleName: CollectAll
         AssetTags: 
@@ -201,7 +188,7 @@ MonoBehaviour:
       - CollectPath: Assets/Res/video
         CollectorGUID: 75ef5add5a95a8c459409ffa4c638de9
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackVideo
         FilterRuleName: CollectAll
         AssetTags: 
@@ -214,7 +201,7 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/Font/GameFont1
         CollectorGUID: 36d5a074a2920124590b00f3b24350c3
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackDirectory
         FilterRuleName: CollectAll
         AssetTags: 
@@ -222,7 +209,7 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/Font/GameFont2
         CollectorGUID: d98be5d53e8eb594d8d512b4d4756ba7
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackDirectory
         FilterRuleName: CollectAll
         AssetTags: 
@@ -230,7 +217,7 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/Font/GameFont3
         CollectorGUID: 7dc764fb74cd01e4a8918b93faa5e7e6
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackDirectory
         FilterRuleName: CollectAll
         AssetTags: 
@@ -238,7 +225,7 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/Font/GameFont4
         CollectorGUID: 9d9fa12371b1ed74aa7e1d473b1dd9ce
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackDirectory
         FilterRuleName: CollectAll
         AssetTags: 
@@ -246,7 +233,7 @@ MonoBehaviour:
       - CollectPath: Assets/ResIn/Font/GameFont5
         CollectorGUID: c598897a97f00b84eb208a2dbd784dae
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackDirectory
         FilterRuleName: CollectAll
         AssetTags: 
@@ -254,7 +241,7 @@ MonoBehaviour:
       - CollectPath: Assets/Game/CSShare/GFG/HotUpdate/LuBanConfig/LubanData
         CollectorGUID: 4c3156d3772f9344a90455ef1e9a93ba
         CollectorType: 0
-        AddressRuleName: AddressByFileName
+        AddressRuleName: AddressByFolderAndFileName
         PackRuleName: PackDirectory
         FilterRuleName: CollectAll
         AssetTags: 

+ 6 - 6
GameClient/Assets/Game/HotUpdate/Controller/GameController.cs

@@ -81,8 +81,8 @@ namespace GFGGame
                             ViewManager.PreloadViews<LoginView>();
                             ViewManager.PreloadViews<SystemNoticeView>();
                             ViewManager.PreloadViews<LoadingView>();
-                            ViewManager.PreloadViews<ModalStatusView>();
-                            ViewManager.PreloadViews<CreateRoleView>();
+                            //ViewManager.PreloadViews<ModalStatusView>();
+                            //ViewManager.PreloadViews<CreateRoleView>();
                         });
                     }
                     catch (Exception e)
@@ -101,10 +101,10 @@ namespace GFGGame
             await FontLoader.Instance.Init2();
             
             // ViewManager.PreloadViews<MainUIView>();
-            ViewManager.PreloadViews<StoryDialogView>();
-            ViewManager.PreloadViews<RewardView>();
-            ViewManager.PreloadViews<StoryChapterView>();
-            ViewManager.PreloadViews<SuitItemView>();
+            //ViewManager.PreloadViews<StoryDialogView>();
+            //ViewManager.PreloadViews<RewardView>();
+            //ViewManager.PreloadViews<StoryChapterView>();
+            //ViewManager.PreloadViews<SuitItemView>();
         }
 
         public static bool CheckLoginCache(bool doLogin)

+ 1 - 2
GameClient/Assets/Game/HotUpdate/Game.HotUpdate.asmdef

@@ -10,8 +10,7 @@
         "GUID:f22fac247a56d2d41b687bb0d900e54e",
         "GUID:2a81c6962524d424a8ef5072bd3b0fa0",
         "GUID:3c0fd0809f219634896c0ddb3fa25f71",
-        "GUID:b2b60b59554a33b41b16ef821fecbac2",
-        "GUID:4d1926c9df5b052469a1c63448b7609a"
+        "GUID:b2b60b59554a33b41b16ef821fecbac2"
     ],
     "includePlatforms": [],
     "excludePlatforms": [],

+ 5 - 0
GameClient/Assets/Game/HotUpdate/HotUpdateDriver.cs

@@ -9,13 +9,18 @@ namespace GFGGame
         {
             //UniFramework
             // 初始化对象池系统
+            Debug.Log("进入HotUpdateDriver");
             UniPooling.Initalize();
             //Litjson
+            Debug.Log("UnityTypeBindings.Register");
             LitJson.UnityTypeBindings.Register();
             //ET
+            Debug.Log("ET");
             ETManager.Instance.Init();
             //Game
+            Debug.Log("OperationSystem");
             OperationSystem.Initialize();
+            Debug.Log("GameController.Start");
             GameController.Start();
             Reporter reporter = GameObject.Find("Reporter").GetComponent<Reporter>();
             if ((LauncherConfig.ChannelId != (int)ChannelID.Test) && reporter != null)

+ 34 - 7
GameClient/Assets/Game/HotUpdate/NetworkTCP/WChannel_WebGL.cs

@@ -24,20 +24,47 @@ namespace ET
             this.ChannelType = ChannelType.Connect;
             this.Id = id;
 
-            string wsStr = $"ws://{ipEndPoint}";
+            string wsStr;
+            bool isHttps = LauncherConfig.isHttps;
 
-            Log.Debug($"wc address:{address}");
-            if (LauncherConfig.isHttps)
+            // 检查address是否是URL格式
+            if (!string.IsNullOrEmpty(address) && (address.StartsWith("http://") || address.StartsWith("https://")))
+            {
+                // 如果是URL格式,转换为WebSocket协议
+                if (address.StartsWith("https://"))
+                {
+                    wsStr = address.Replace("https://", "wss://");
+                    isHttps = true;
+                }
+                else
+                {
+                    wsStr = address.Replace("http://", "ws://");
+                }
+            }
+            else if (ipEndPoint != null)
+            {
+                // 如果不是URL格式但有IPEndPoint,使用IP+端口方式
+                wsStr = $"ws://{ipEndPoint}";
+            }
+            else if (!string.IsNullOrEmpty(address))
             {
-                Uri uri = new Uri(address);
-                string hostAndPath = uri.Host + uri.AbsolutePath;
-                wsStr = $"wss://{hostAndPath}";
+                // 如果没有IPEndPoint但有address,直接使用address作为WebSocket地址
+                // 支持IP:端口格式
+                wsStr = address.StartsWith("ws://") || address.StartsWith("wss://") ? address : $"ws://{address}";
             }
+            else
+            {
+                // 无法构造WebSocket地址
+                Log.Error($"WChannel: Invalid address and ipEndPoint are both null");
+                throw new ArgumentException("Invalid address and ipEndPoint are both null");
+            }
+
+            Log.Debug($"wc address:{address}");
             Log.Debug($"wc wsStr:{wsStr}");
 
             WebSocket ws = new WebSocket(new Uri(wsStr));
 
-            if (LauncherConfig.isHttps)
+            if (isHttps || ipEndPoint == null)
             {
                 this.RemoteAddress = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
             }

+ 24 - 11
GameClient/Assets/Game/HotUpdate/UGUI/UGUIManager.cs

@@ -91,19 +91,32 @@ namespace GFGGame
         {
             var url = LauncherConfig.cfgUrl.Replace("{cfgName}", GameGlobal.cfgName);
             url = url + "?t=" + TimeHelper.ClientNow();
+            Debug.Log($" HttpTool.Instance.Get, {url}");
             LauncherView.Instance.SetDesc("正在解压数据...");
-            HttpTool.Instance.Get(url, (string data) =>
-            {
-                //初始化游戏配置
-                GameConfig.InitData(data);
-                Debug.Log($"初始化游戏配置");
+            //HttpTool.Instance.Get(url, (string data) =>
+            //{
+            //    //初始化游戏配置
+            //    GameConfig.InitData(data);
+            //    Debug.Log($"初始化游戏配置");
+
+            //    LauncherView.Instance.Close();
+            //    QDJHGameManagerInit.Instance.InitSDK();
+            //    QDJGameManager.Instance.Init();
+            //    //显示登录
+            //    LoginController.ShowLogin();
+            //});
+
+            //---------------------------------------------------------测试
+            string data = "{\"loginApiUrl\":\"129.204.4.238:11005\",\"platformName\":\"\",\"showGM\":\"1\",\"tsStatus\":\"0\",\"openTime\":\"[2024][6][19][05:00:00]\",\"tsServer\":\"1\"}";
+            Debug.Log(data);
+            GameConfig.InitData(data);
+            Debug.Log($"初始化游戏配置");
 
-                LauncherView.Instance.Close();
-                QDJHGameManagerInit.Instance.InitSDK();
-                QDJGameManager.Instance.Init();
-                //显示登录
-                LoginController.ShowLogin();
-            });
+            LauncherView.Instance.Close();
+            QDJHGameManagerInit.Instance.InitSDK();
+            QDJGameManager.Instance.Init();
+            //显示登录
+            LoginController.ShowLogin();
         }
 
         public void Show()

+ 57 - 25
GameClient/Assets/Game/HotUpdate/Views/Login/LoginView.cs

@@ -4,6 +4,7 @@ using UI.Login;
 using ET;
 using GFGGame.Launcher;
 using System;
+using SimpleJSON;
 
 namespace GFGGame
 {
@@ -201,37 +202,68 @@ namespace GFGGame
         private void TryLogin(Action<bool> action)
         {
             var url = LauncherConfig.cfgUrl.Replace("{cfgName}", LauncherConfig.cfgName);
+            Debug.Log($"TryLogin, {url}");
             url = url + "?t=" + DateTime.Now.Ticks;
-            HttpTool.Instance.Get(url, json =>
+            //HttpTool.Instance.Get(url, json =>
+            //{
+            //    LauncherConfig.InitPlatform(json);
+            //    if (LauncherConfig.serverStatus == 1)
+            //    {
+            //        if (string.IsNullOrEmpty(LauncherConfig.statusPrompt))
+            //        {
+            //            _ui.m_btnStart.text = "维护中";
+            //            LauncherConfig.statusPrompt = "游戏正在更新维护中,请稍后再试。";
+            //        }
+
+            //        AlertSystem.Show(LauncherConfig.statusPrompt)
+            //            .SetLeftButton(true, "知道了", (data) => { Application.Quit(); });
+            //        return;
+            //    }
+
+            //    if (!_ui.m_btnAgree.selected)
+            //    {
+            //        PromptController.Instance.ShowFloatTextPrompt("请仔细阅读并同意游戏用户协议、隐私保护指引、儿童隐私政策");
+            //        return;
+            //    }
+                
+            //    LoginHelper.H5Login(GameGlobal.zoneScene, GameConfig.LoginAddress,
+            //        error =>
+            //        {
+            //            LoginController.OnLoginSuccess(action).Coroutine();
+            //            _ui.m_btnStart.visible = true;
+            //            _ui.m_btnStart.text = "开始游戏";
+            //        }).Coroutine();
+            //});
+
+            //-------------------测试--------
+            string data = "{\"loginApiUrl\":\"129.204.4.238:11005\",\"platformName\":\"\",\"showGM\":\"1\",\"tsStatus\":\"0\",\"openTime\":\"[2024][6][19][05:00:00]\",\"tsServer\":\"1\"}";
+            LauncherConfig.InitPlatform(data);
+            if (LauncherConfig.serverStatus == 1)
             {
-                LauncherConfig.InitPlatform(json);
-                if (LauncherConfig.serverStatus == 1)
+                if (string.IsNullOrEmpty(LauncherConfig.statusPrompt))
                 {
-                    if (string.IsNullOrEmpty(LauncherConfig.statusPrompt))
-                    {
-                        _ui.m_btnStart.text = "维护中";
-                        LauncherConfig.statusPrompt = "游戏正在更新维护中,请稍后再试。";
-                    }
-
-                    AlertSystem.Show(LauncherConfig.statusPrompt)
-                        .SetLeftButton(true, "知道了", (data) => { Application.Quit(); });
-                    return;
+                    _ui.m_btnStart.text = "维护中";
+                    LauncherConfig.statusPrompt = "游戏正在更新维护中,请稍后再试。";
                 }
 
-                if (!_ui.m_btnAgree.selected)
+                AlertSystem.Show(LauncherConfig.statusPrompt)
+                    .SetLeftButton(true, "知道了", (data) => { Application.Quit(); });
+                return;
+            }
+
+            if (!_ui.m_btnAgree.selected)
+            {
+                PromptController.Instance.ShowFloatTextPrompt("请仔细阅读并同意游戏用户协议、隐私保护指引、儿童隐私政策");
+                return;
+            }
+
+            LoginHelper.H5Login(GameGlobal.zoneScene, GameConfig.LoginAddress,
+                error =>
                 {
-                    PromptController.Instance.ShowFloatTextPrompt("请仔细阅读并同意游戏用户协议、隐私保护指引、儿童隐私政策");
-                    return;
-                }
-                
-                LoginHelper.H5Login(GameGlobal.zoneScene, GameConfig.LoginAddress,
-                    error =>
-                    {
-                        LoginController.OnLoginSuccess(action).Coroutine();
-                        _ui.m_btnStart.visible = true;
-                        _ui.m_btnStart.text = "开始游戏";
-                    }).Coroutine();
-            });
+                    LoginController.OnLoginSuccess(action).Coroutine();
+                    _ui.m_btnStart.visible = true;
+                    _ui.m_btnStart.text = "开始游戏";
+                }).Coroutine();
         }
 
 

+ 2 - 2
GameClient/Assets/Game/Launcher/Game.Launcher.asmdef

@@ -3,9 +3,9 @@
     "rootNamespace": "",
     "references": [
         "GUID:7a41fac89c3ce014e99efb3723e6a98e",
-        "GUID:e34a5702dd353724aa315fb8011f08c3",
         "GUID:b0a84d582f6a6fa4185f67ce934d99c2",
-        "GUID:f22fac247a56d2d41b687bb0d900e54e"
+        "GUID:f22fac247a56d2d41b687bb0d900e54e",
+        "GUID:e34a5702dd353724aa315fb8011f08c3"
     ],
     "includePlatforms": [],
     "excludePlatforms": [],

+ 24 - 8
GameClient/Assets/Game/Launcher/HotUpdateProxy/HotUpdateCodeLoader.cs

@@ -6,6 +6,7 @@ using GFGGame.Launcher;
 using System.Collections.Generic;
 using System.Linq;
 using YooAsset;
+using UnityEngine.SceneManagement;
 
 namespace GFGGame
 {
@@ -27,15 +28,30 @@ namespace GFGGame
 
         public void StartLoad()
         {
-            StartCoroutine(LoadGameScene());
-        }
+            //StartCoroutine(LoadGameScene());
 
-        IEnumerator LoadGameScene()
-        {
-            // 这里可以添加一些加载前的准备工作
-            // 直接加载游戏场景
-            var sceneHandle = YooAssets.LoadSceneAsync("Assets/ResIn/Scene/HotUpdate.unity");
-            yield return sceneHandle;
+            Debug.Log(VersionController.Instance.package.CheckLocationValid("Assets/ResIn/Font/GameFont2/FZKTJW--GB1-0.ttf"));
+            SceneManager.LoadScene("HotUpdate");
         }
+
+        //IEnumerator LoadGameScene()
+        //{
+        //    // 这里可以添加一些加载前的准备工作
+        //    // 直接加载游戏场景
+        //    Debug.Log("11111");
+        //    //var sceneHandle = YooAssets.LoadSceneAsync("Assets/ResIn/Scene/HotUpdate.unity");
+        //    //var sceneHandle = YooAssets.LoadSceneAsync("HotUpdate");
+
+        //    string location = "Assets/ResIn/Scene/HotUpdate";
+        //    var sceneMode = UnityEngine.SceneManagement.LoadSceneMode.Single;
+        //    var physicsMode = LocalPhysicsMode.None;
+        //    bool suspendLoad = false;
+        //    string packageName = VersionController.DefaultPackage;
+        //    SceneHandle handle = YooAssets.GetPackage(packageName).LoadSceneAsync(location, sceneMode, physicsMode, suspendLoad);
+        //    yield return handle;
+
+        //    Debug.Log("22222");
+        //    //yield return sceneHandle;
+        //}
     }
 }

+ 12 - 10
GameClient/Assets/Game/Launcher/LauncherController.cs

@@ -13,15 +13,17 @@ namespace GFGGame
         /// </summary>
         public static void InitLauncherCfg()
         {
-            LauncherView.Instance.SetDesc("正在检查更新...");
-            Debug.Log($"正在检查更新...");
-            var url = LauncherConfig.cfgUrl.Replace("{cfgName}", LauncherConfig.cfgName);
-            url = url + "?t=" + DateTime.Now.Ticks;
-            HttpTool.Instance.Get(url, (string json) =>
-            {
-                LauncherConfig.InitPlatform(json);
-                CheckGameStatus();
-            });
+            //LauncherView.Instance.SetDesc("正在检查更新...");
+            //Debug.Log($"正在检查更新...");
+            //var url = LauncherConfig.cfgUrl.Replace("{cfgName}", LauncherConfig.cfgName);
+            //url = url + "?t=" + DateTime.Now.Ticks;
+            //HttpTool.Instance.Get(url, (string json) =>
+            //{
+            //    LauncherConfig.InitPlatform(json);
+            //    CheckGameStatus();
+            //});
+
+            InitSDK();
         }
 
         private static void CheckShowAgreeView(Action onSuccess)
@@ -124,8 +126,8 @@ namespace GFGGame
 
         private static void StartGame()
         {
-            LauncherView.Instance.SetDesc($"正在初始化...");
             HotUpdateCodeLoader.Instance.StartLoad();
+           
         }
 
         private static void InitReporter()

+ 37 - 19
GameClient/Assets/Game/Launcher/Version/VersionController.cs

@@ -12,6 +12,8 @@ namespace GFGGame
         string defaultHostServer = "http://127.0.0.1/CDN/Android/v1.0";
         string fallbackHostServer = "http://127.0.0.1/CDN/Android/v1.0";
 
+        public ResourcePackage package;
+
         /// <summary>
         /// 包裹的版本信息
         /// </summary>
@@ -30,32 +32,41 @@ namespace GFGGame
             yield return InitDefaultPackage();
             if (string.IsNullOrEmpty(LauncherConfig.manifest_v))
             {
-                yield return GetStaticVersion(DefaultPackage);
+                var cor = StartCoroutine(GetStaticVersion(DefaultPackage));
+                yield return cor;
             }
             else
             {
                 VersionController.Instance.PackageVersion = LauncherConfig.manifest_v;
             }
-            
             yield return UpdateManifest(DefaultPackage);
             CreateDownloader(DefaultPackage);
+        
         }
 
         private IEnumerator InitDefaultPackage()
         {
             // 创建默认的资源包
-            string packageName = DefaultPackage;
-            var package = YooAssets.TryGetPackage(packageName);
-            if (package == null)
-            {
-                package = YooAssets.CreatePackage(packageName);
-                YooAssets.SetDefaultPackage(package);
-            }
+            //string packageName = DefaultPackage;
+            //var package = YooAssets.TryGetPackage(packageName);
+            //Debug.Log($"是否找到包:{package}");
+            //if (package == null)
+            //{
+            //    package = YooAssets.CreatePackage(packageName);
+            //    YooAssets.SetDefaultPackage(package);
+            //}
+
+            package = YooAssets.CreatePackage(DefaultPackage);
+            YooAssets.SetDefaultPackage(package);
 
             var playMode = GameLauncher.Instance.PlayMode;
-#if !UNITY_EDITOR
-            playMode = EPlayMode.HostPlayMode;
+
+#if UNITY_EDITOR 
+
+#elif UNITY_WEBGL            
+            playMode = EPlayMode.WebPlayMode;
 #endif
+
             InitializationOperation initializationOperation = null;
             if (playMode == EPlayMode.EditorSimulateMode)
             {
@@ -124,21 +135,23 @@ namespace GFGGame
             }
             else if (playMode == EPlayMode.WebPlayMode)
             {
+                Debug.Log("进入EPlayMode.WebPlayMode");
+                defaultHostServer = Application.streamingAssetsPath + "\\yoo\\GameLogic\\";
+                fallbackHostServer = Application.streamingAssetsPath + "\\yoo\\GameLogic\\";
                 IRemoteServices remoteServices = new RemoteServices(defaultHostServer, fallbackHostServer);
-                var webServerFileSystemParams = FileSystemParameters.CreateDefaultWebServerFileSystemParameters();
+                //var webServerFileSystemParams = FileSystemParameters.CreateDefaultWebServerFileSystemParameters();
                 var webRemoteFileSystemParams = FileSystemParameters.CreateDefaultWebRemoteFileSystemParameters(remoteServices); //支持跨域下载
-
                 var createParameters = new WebPlayModeParameters();
-                createParameters.WebServerFileSystemParameters = webServerFileSystemParams;
+                //createParameters.WebServerFileSystemParameters = webServerFileSystemParams;
                 createParameters.WebRemoteFileSystemParameters = webRemoteFileSystemParams;
-
                 initializationOperation = package.InitializeAsync(createParameters);
-                yield return initializationOperation;
 
+                yield return initializationOperation;
                 if (initializationOperation.Status == EOperationStatus.Succeed)
                     Debug.Log("资源包初始化成功!");
                 else
                     Debug.LogError($"资源包初始化失败:{initializationOperation.Error}");
+
             }
 
             yield return initializationOperation;
@@ -150,7 +163,8 @@ namespace GFGGame
 
         private IEnumerator GetStaticVersion(string packageName)
         {
-            var package = YooAssets.GetPackage(packageName);
+            //var package = YooAssets.GetPackage(packageName);
+            Debug.Log(package.PackageName);
             //var operation = package.UpdatePackageVersionAsync();
             var operation = package.RequestPackageVersionAsync();
             yield return operation;
@@ -169,7 +183,7 @@ namespace GFGGame
         private IEnumerator UpdateManifest(string packageName)
         {
             bool savePackageVersion = true;
-            var package = YooAssets.GetPackage(packageName);
+            //var package = YooAssets.GetPackage(packageName);
             var operation =
                 package.UpdatePackageManifestAsync(VersionController.Instance.PackageVersion);
             //package.UpdatePackageManifestAsync(VersionController.Instance.PackageVersion, savePackageVersion);
@@ -184,9 +198,13 @@ namespace GFGGame
 
         private void CreateDownloader(string packageName)
         {
+
+            LauncherController.OnVersionCompleted();
+            return;
+
             int downloadingMaxNum = 10;
             int failedTryAgain = 3;
-            ResourcePackage package = YooAssets.GetPackage(packageName);
+           // ResourcePackage package = YooAssets.GetPackage(packageName);
             //ResourceDownloaderOperation downloaderOperation = package.CreateResourceDownloader(new string[] { "preload", "dynamic" }, downloadingMaxNum, failedTryAgain);
             ResourceDownloaderOperation downloaderOperation =
                 package.CreateResourceDownloader(new string[] { "preload" }, downloadingMaxNum, failedTryAgain);

+ 0 - 0
GameClient/Assets/ResIn/Scene/HotUpdate.unity → GameClient/Assets/Resources/Scenes/HotUpdate.unity


+ 0 - 0
GameClient/Assets/ResIn/Scene/HotUpdate.unity.meta → GameClient/Assets/Resources/Scenes/HotUpdate.unity.meta


+ 8 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f404a688a2dcb7e4bbe2eac9d45da495
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/MemoryProfiler.png


+ 7 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/MemoryProfiler.png.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 79247ba639956da488909246effe07f3
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/favicon.ico


+ 7 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/favicon.ico.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e7ffb3bf9b0bf59488d32c73d5947c59
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/fullscreen-button.png


+ 7 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/fullscreen-button.png.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e1d431dc8d9e9c74db7d330c8029db89
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-empty-dark.png


+ 7 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-empty-dark.png.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f2229acdba3c2204495fad5bd8633620
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-empty-light.png


+ 7 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-empty-light.png.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5c1953b2e022b9f47921eefea21907ff
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-full-dark.png


+ 7 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-full-dark.png.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 537e56954447f7b4e8d68e887ba50cdf
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-full-light.png


+ 7 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/progress-bar-full-light.png.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 66ec436a4476b68498350c3547918087
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 16 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/style.css

@@ -0,0 +1,16 @@
+body { padding: 0; margin: 0 }
+#unity-container { position: absolute }
+#unity-container.unity-desktop { left: 50%; top: 50%; transform: translate(-50%, -50%) }
+#unity-container.unity-mobile { position: fixed; width: 100%; height: 100% }
+#unity-canvas { background: #FFFFFF }
+.unity-mobile #unity-canvas { width: 100%; height: 100% }
+#unity-loading-bar { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); display: none }
+#unity-logo { width: 154px; height: 130px; background: url('unity-logo-dark.png') no-repeat center }
+#unity-progress-bar-empty { width: 141px; height: 18px; margin-top: 10px; margin-left: 6.5px; background: url('progress-bar-empty-dark.png') no-repeat center }
+#unity-progress-bar-full { width: 0%; height: 18px; margin-top: 10px; background: url('progress-bar-full-dark.png') no-repeat center }
+#unity-footer { position: relative }
+.unity-mobile #unity-footer { display: none }
+#unity-webgl-logo { float:left; width: 204px; height: 38px; background: url('webgl-logo.png') no-repeat center }
+#unity-build-title { float: right; margin-right: 10px; line-height: 38px; font-family: arial; font-size: 18px }
+#unity-fullscreen-button { cursor:pointer; float: right; width: 38px; height: 38px; background: url('fullscreen-button.png') no-repeat center }
+#unity-warning { position: absolute; left: 50%; top: 5%; transform: translate(-50%); background: white; padding: 10px; display: none }

+ 7 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/style.css.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4046f4f8f21c5f14cab2650ae4252c69
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/unity-logo-dark.png


+ 7 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/unity-logo-dark.png.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ff6470a3acfea7c49bcf31103a171fa9
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/unity-logo-light.png


+ 7 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/unity-logo-light.png.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a42976e6e4f08e642bec336ba20382d0
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/webgl-logo.png


+ 7 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/webgl-logo.png.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ca8c08cd75b2aa0478a34fc994810dfa
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/webmemd-icon.png


+ 7 - 0
GameClient/Assets/WebGLTemplates/MyCustomTemplate/TemplateData/webmemd-icon.png.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 1136d57dcad3bba48a01ac8947e66204
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 4 - 2
GameClient/Assets/link.xml

@@ -23,11 +23,13 @@
     <assembly fullname="Unity.2D.Animation.Runtime" preserve="all"/>
 
     <!-- 保留 YooAsset 程序集中的所有类型 -->
-    <assembly fullname="YooAsset">
+    <!-- <assembly fullname="YooAsset">
         <type fullname="YooAsset.YooAssets" preserve="all"/>
         <type fullname="YooAsset.ResourcePackage" preserve="all"/>
         <type fullname="YooAsset.PlayModeServices" preserve="all"/>
-    </assembly>
+    </assembly> -->
+
+   <assembly fullname="YooAsset" preserve="all"/>
 
     <!-- 保留 System.Core 程序集中的必要类型 -->
     <assembly fullname="System.Core">

+ 1 - 2
GameClient/Packages/com.tuyoogame.yooasset@2.3.17/Editor/YooAsset.Editor.asmdef

@@ -2,10 +2,9 @@
     "name": "YooAsset.Editor",
     "rootNamespace": "",
     "references": [
-        "YooAsset",
         "Unity.ScriptableBuildPipeline",
         "Unity.ScriptableBuildPipeline.Editor",
-        ""
+        "YooAsset"
     ],
     "includePlatforms": [
         "Editor"

+ 3 - 0
GameClient/ProjectSettings/EditorBuildSettings.asset

@@ -11,4 +11,7 @@ EditorBuildSettings:
   - enabled: 1
     path: Assets/Resources/Scenes/VersionChecker.unity
     guid: f000ae970476b4b4d97895000615565e
+  - enabled: 1
+    path: Assets/Resources/Scenes/HotUpdate.unity
+    guid: dbe866f85c772f64c9f1eb61eb15937d
   m_configObjects: {}

+ 16 - 13
GameClient/ProjectSettings/ProjectSettings.asset

@@ -44,8 +44,8 @@ PlayerSettings:
   m_HolographicTrackingLossScreen: {fileID: 0}
   defaultScreenWidth: 1920
   defaultScreenHeight: 1080
-  defaultScreenWidthWeb: 960
-  defaultScreenHeightWeb: 600
+  defaultScreenWidthWeb: 768
+  defaultScreenHeightWeb: 1024
   m_StereoRenderingPath: 0
   m_ActiveColorSpace: 0
   m_SpriteBatchVertexThreshold: 300
@@ -166,7 +166,7 @@ PlayerSettings:
   AndroidTargetSdkVersion: 0
   AndroidPreferredInstallLocation: 1
   aotOptions: 
-  stripEngineCode: 1
+  stripEngineCode: 0
   iPhoneStrippingLevel: 0
   iPhoneScriptCallOptimization: 0
   ForceInternetPermission: 0
@@ -174,7 +174,7 @@ PlayerSettings:
   CreateWallpaper: 0
   APKExpansionFiles: 0
   keepLoadedShadersAlive: 0
-  StripUnusedMeshComponents: 0
+  StripUnusedMeshComponents: 1
   strictShaderVariantMatching: 0
   VertexChannelCompressionMask: 4054
   iPhoneSdkVersion: 988
@@ -235,7 +235,7 @@ PlayerSettings:
   iOSRequireARKit: 0
   iOSAutomaticallyDetectAndAddCapabilities: 1
   appleEnableProMotion: 0
-  shaderPrecisionModel: 1
+  shaderPrecisionModel: 0
   clonedFromGUID: 10ad67313f4034357812315f3c407484
   templatePackageId: com.unity.template.2d@5.0.0
   templateDefaultScene: Assets/Scenes/SampleScene.unity
@@ -522,12 +522,15 @@ PlayerSettings:
   openGLRequireES31: 0
   openGLRequireES31AEP: 0
   openGLRequireES32: 0
-  m_TemplateCustomTags: {}
+  m_TemplateCustomTags:
+    PRODUCT_DESCRIPTION: 
   mobileMTRendering:
     Android: 1
     iPhone: 1
     tvOS: 1
-  m_BuildTargetGroupLightmapEncodingQuality: []
+  m_BuildTargetGroupLightmapEncodingQuality:
+  - m_BuildTarget: WebGL
+    m_EncodingQuality: 0
   m_BuildTargetGroupHDRCubemapEncodingQuality: []
   m_BuildTargetGroupLightmapSettings: []
   m_BuildTargetGroupLoadStoreDebugModeSettings: []
@@ -769,14 +772,14 @@ PlayerSettings:
   blurSplashScreenBackground: 0
   spritePackerPolicy: 
   webGLMemorySize: 32
-  webGLExceptionSupport: 0
+  webGLExceptionSupport: 1
   webGLNameFilesAsHashes: 0
   webGLShowDiagnostics: 0
-  webGLDataCaching: 1
+  webGLDataCaching: 0
   webGLDebugSymbols: 0
   webGLEmscriptenArgs: 
   webGLModulesDirectory: 
-  webGLTemplate: PROJECT:MyCustomTemplate
+  webGLTemplate: APPLICATION:Default
   webGLAnalyzeBuildSize: 0
   webGLUseEmbeddedResources: 0
   webGLCompressionFormat: 1
@@ -820,7 +823,7 @@ PlayerSettings:
     tvOS: 1
   incrementalIl2cppBuild: {}
   suppressCommonWarnings: 1
-  allowUnsafeCode: 1
+  allowUnsafeCode: 0
   useDeterministicCompilation: 1
   selectedPlatform: 2
   additionalIl2CppArgs: 
@@ -829,7 +832,7 @@ PlayerSettings:
   gcWBarrierValidation: 0
   apiCompatibilityLevelPerPlatform:
     Android: 3
-    WebGL: 3
+    WebGL: 6
   m_RenderingPath: 1
   m_MobileRenderingPath: 1
   metroPackageName: 2DBuiltInRenderer
@@ -917,4 +920,4 @@ PlayerSettings:
   hmiLoadingImage: {fileID: 0}
   platformRequiresReadableAssets: 0
   virtualTexturingSupportEnabled: 0
-  insecureHttpOption: 0
+  insecureHttpOption: 2

+ 86 - 12
GameClient/ProjectSettings/QualitySettings.asset

@@ -6,7 +6,7 @@ QualitySettings:
   serializedVersion: 5
   m_CurrentQuality: 5
   m_QualitySettings:
-  - serializedVersion: 2
+  - serializedVersion: 3
     name: Very Low
     pixelLightCount: 0
     shadows: 0
@@ -19,16 +19,19 @@ QualitySettings:
     shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
     shadowmaskMode: 0
     skinWeights: 1
-    textureQuality: 1
+    globalTextureMipmapLimit: 1
+    textureMipmapLimitSettings: []
     anisotropicTextures: 0
     antiAliasing: 0
     softParticles: 0
     softVegetation: 0
     realtimeReflectionProbes: 0
     billboardsFaceCameraPosition: 0
+    useLegacyDetailDistribution: 1
     vSyncCount: 0
     lodBias: 0.3
     maximumLODLevel: 0
+    enableLODCrossFade: 1
     streamingMipmapsActive: 0
     streamingMipmapsAddAllCameras: 1
     streamingMipmapsMemoryBudget: 512
@@ -41,8 +44,17 @@ QualitySettings:
     asyncUploadPersistentBuffer: 1
     resolutionScalingFixedDPIFactor: 1
     customRenderPipeline: {fileID: 0}
+    terrainQualityOverrides: 0
+    terrainPixelError: 1
+    terrainDetailDensityScale: 1
+    terrainBasemapDistance: 1000
+    terrainDetailDistance: 80
+    terrainTreeDistance: 5000
+    terrainBillboardStart: 50
+    terrainFadeLength: 5
+    terrainMaxTrees: 50
     excludedTargetPlatforms: []
-  - serializedVersion: 2
+  - serializedVersion: 3
     name: Low
     pixelLightCount: 0
     shadows: 0
@@ -55,16 +67,19 @@ QualitySettings:
     shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
     shadowmaskMode: 0
     skinWeights: 2
-    textureQuality: 0
+    globalTextureMipmapLimit: 0
+    textureMipmapLimitSettings: []
     anisotropicTextures: 0
     antiAliasing: 0
     softParticles: 0
     softVegetation: 0
     realtimeReflectionProbes: 0
     billboardsFaceCameraPosition: 0
+    useLegacyDetailDistribution: 1
     vSyncCount: 0
     lodBias: 0.4
     maximumLODLevel: 0
+    enableLODCrossFade: 1
     streamingMipmapsActive: 0
     streamingMipmapsAddAllCameras: 1
     streamingMipmapsMemoryBudget: 512
@@ -77,8 +92,17 @@ QualitySettings:
     asyncUploadPersistentBuffer: 1
     resolutionScalingFixedDPIFactor: 1
     customRenderPipeline: {fileID: 0}
+    terrainQualityOverrides: 0
+    terrainPixelError: 1
+    terrainDetailDensityScale: 1
+    terrainBasemapDistance: 1000
+    terrainDetailDistance: 80
+    terrainTreeDistance: 5000
+    terrainBillboardStart: 50
+    terrainFadeLength: 5
+    terrainMaxTrees: 50
     excludedTargetPlatforms: []
-  - serializedVersion: 2
+  - serializedVersion: 3
     name: Medium
     pixelLightCount: 1
     shadows: 1
@@ -91,16 +115,19 @@ QualitySettings:
     shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
     shadowmaskMode: 0
     skinWeights: 2
-    textureQuality: 0
+    globalTextureMipmapLimit: 0
+    textureMipmapLimitSettings: []
     anisotropicTextures: 1
     antiAliasing: 0
     softParticles: 0
     softVegetation: 0
     realtimeReflectionProbes: 0
     billboardsFaceCameraPosition: 0
+    useLegacyDetailDistribution: 1
     vSyncCount: 1
     lodBias: 0.7
     maximumLODLevel: 0
+    enableLODCrossFade: 1
     streamingMipmapsActive: 0
     streamingMipmapsAddAllCameras: 1
     streamingMipmapsMemoryBudget: 512
@@ -113,8 +140,17 @@ QualitySettings:
     asyncUploadPersistentBuffer: 1
     resolutionScalingFixedDPIFactor: 1
     customRenderPipeline: {fileID: 0}
+    terrainQualityOverrides: 0
+    terrainPixelError: 1
+    terrainDetailDensityScale: 1
+    terrainBasemapDistance: 1000
+    terrainDetailDistance: 80
+    terrainTreeDistance: 5000
+    terrainBillboardStart: 50
+    terrainFadeLength: 5
+    terrainMaxTrees: 50
     excludedTargetPlatforms: []
-  - serializedVersion: 2
+  - serializedVersion: 3
     name: High
     pixelLightCount: 2
     shadows: 2
@@ -127,16 +163,19 @@ QualitySettings:
     shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
     shadowmaskMode: 1
     skinWeights: 2
-    textureQuality: 0
+    globalTextureMipmapLimit: 0
+    textureMipmapLimitSettings: []
     anisotropicTextures: 1
     antiAliasing: 0
     softParticles: 0
     softVegetation: 1
     realtimeReflectionProbes: 1
     billboardsFaceCameraPosition: 1
+    useLegacyDetailDistribution: 1
     vSyncCount: 1
     lodBias: 1
     maximumLODLevel: 0
+    enableLODCrossFade: 1
     streamingMipmapsActive: 0
     streamingMipmapsAddAllCameras: 1
     streamingMipmapsMemoryBudget: 512
@@ -149,8 +188,17 @@ QualitySettings:
     asyncUploadPersistentBuffer: 1
     resolutionScalingFixedDPIFactor: 1
     customRenderPipeline: {fileID: 0}
+    terrainQualityOverrides: 0
+    terrainPixelError: 1
+    terrainDetailDensityScale: 1
+    terrainBasemapDistance: 1000
+    terrainDetailDistance: 80
+    terrainTreeDistance: 5000
+    terrainBillboardStart: 50
+    terrainFadeLength: 5
+    terrainMaxTrees: 50
     excludedTargetPlatforms: []
-  - serializedVersion: 2
+  - serializedVersion: 3
     name: Very High
     pixelLightCount: 3
     shadows: 2
@@ -163,16 +211,19 @@ QualitySettings:
     shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
     shadowmaskMode: 1
     skinWeights: 4
-    textureQuality: 0
+    globalTextureMipmapLimit: 0
+    textureMipmapLimitSettings: []
     anisotropicTextures: 2
     antiAliasing: 2
     softParticles: 1
     softVegetation: 1
     realtimeReflectionProbes: 1
     billboardsFaceCameraPosition: 1
+    useLegacyDetailDistribution: 1
     vSyncCount: 1
     lodBias: 1.5
     maximumLODLevel: 0
+    enableLODCrossFade: 1
     streamingMipmapsActive: 0
     streamingMipmapsAddAllCameras: 1
     streamingMipmapsMemoryBudget: 512
@@ -185,8 +236,17 @@ QualitySettings:
     asyncUploadPersistentBuffer: 1
     resolutionScalingFixedDPIFactor: 1
     customRenderPipeline: {fileID: 0}
+    terrainQualityOverrides: 0
+    terrainPixelError: 1
+    terrainDetailDensityScale: 1
+    terrainBasemapDistance: 1000
+    terrainDetailDistance: 80
+    terrainTreeDistance: 5000
+    terrainBillboardStart: 50
+    terrainFadeLength: 5
+    terrainMaxTrees: 50
     excludedTargetPlatforms: []
-  - serializedVersion: 2
+  - serializedVersion: 3
     name: Ultra
     pixelLightCount: 4
     shadows: 2
@@ -199,16 +259,19 @@ QualitySettings:
     shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
     shadowmaskMode: 1
     skinWeights: 255
-    textureQuality: 0
+    globalTextureMipmapLimit: 0
+    textureMipmapLimitSettings: []
     anisotropicTextures: 2
     antiAliasing: 2
     softParticles: 1
     softVegetation: 1
     realtimeReflectionProbes: 1
     billboardsFaceCameraPosition: 1
+    useLegacyDetailDistribution: 1
     vSyncCount: 1
     lodBias: 2
     maximumLODLevel: 0
+    enableLODCrossFade: 1
     streamingMipmapsActive: 0
     streamingMipmapsAddAllCameras: 1
     streamingMipmapsMemoryBudget: 512
@@ -221,12 +284,23 @@ QualitySettings:
     asyncUploadPersistentBuffer: 1
     resolutionScalingFixedDPIFactor: 1
     customRenderPipeline: {fileID: 0}
+    terrainQualityOverrides: 0
+    terrainPixelError: 1
+    terrainDetailDensityScale: 1
+    terrainBasemapDistance: 1000
+    terrainDetailDistance: 80
+    terrainTreeDistance: 5000
+    terrainBillboardStart: 50
+    terrainFadeLength: 5
+    terrainMaxTrees: 50
     excludedTargetPlatforms: []
+  m_TextureMipmapLimitGroupNames: []
   m_PerPlatformDefaultQuality:
     Android: 2
     Lumin: 5
     Nintendo Switch: 5
     PS4: 5
+    Server: 0
     Stadia: 5
     Standalone: 5
     WebGL: 3

+ 7 - 1
GameClient/UserSettings/EditorUserSettings.asset

@@ -6,9 +6,15 @@ EditorUserSettings:
   serializedVersion: 4
   m_ConfigSettings:
     RecentlyUsedSceneGuid-0:
-      value: 0753515e53030f03580d5b7542250944154e1e7b292a7061282b4c66bbb3633c
+      value: 5503020506040c5e5e085f76487a5e444f161a292e2d7068752a4c32e1b1666c
       flags: 0
     RecentlyUsedSceneGuid-1:
+      value: 050104560450500c5d5a5b7412775d44124e4f72757d76607d7f4c66b7b6613d
+      flags: 0
+    RecentlyUsedSceneGuid-2:
+      value: 0753515e53030f03580d5b7542250944154e1e7b292a7061282b4c66bbb3633c
+      flags: 0
+    RecentlyUsedSceneGuid-3:
       value: 515250075c0c595e5f5a5e71122159444e4e4a2f7a7d7f602f284d66b4b76661
       flags: 0
     RecentlyUsedScenePath-0:

+ 265 - 135
GameClient/UserSettings/Layouts/default-2022.dwlt

@@ -1,6 +1,30 @@
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
 --- !u!114 &1
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_PixelRect:
+    serializedVersion: 2
+    x: 536
+    y: 569
+    width: 640
+    height: 601
+  m_ShowMode: 0
+  m_Title: Build Settings
+  m_RootView: {fileID: 4}
+  m_MinSize: {x: 640, y: 601}
+  m_MaxSize: {x: 4000, y: 4021}
+  m_Maximized: 0
+--- !u!114 &2
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -16,15 +40,65 @@ MonoBehaviour:
     serializedVersion: 2
     x: 0
     y: 43
-    width: 1920
-    height: 989
+    width: 2560
+    height: 1357
   m_ShowMode: 4
-  m_Title: Project
-  m_RootView: {fileID: 6}
+  m_Title: Console
+  m_RootView: {fileID: 9}
   m_MinSize: {x: 875, y: 300}
   m_MaxSize: {x: 10000, y: 10000}
   m_Maximized: 1
---- !u!114 &2
+--- !u!114 &3
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: BuildPlayerWindow
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 640
+    height: 601
+  m_MinSize: {x: 640, y: 580}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_ActualView: {fileID: 16}
+  m_Panes:
+  - {fileID: 16}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &4
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 3}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 640
+    height: 601
+  m_MinSize: {x: 640, y: 601}
+  m_MaxSize: {x: 4000, y: 4021}
+  vertical: 0
+  controlID: 180
+--- !u!114 &5
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -40,17 +114,17 @@ MonoBehaviour:
   m_Position:
     serializedVersion: 2
     x: 0
-    y: 575
-    width: 535
-    height: 364
-  m_MinSize: {x: 101, y: 121}
-  m_MaxSize: {x: 4001, y: 4021}
-  m_ActualView: {fileID: 13}
+    y: 795
+    width: 673
+    height: 512
+  m_MinSize: {x: 100, y: 100}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_ActualView: {fileID: 17}
   m_Panes:
-  - {fileID: 13}
+  - {fileID: 17}
   m_Selected: 0
   m_LastSelected: 0
---- !u!114 &3
+--- !u!114 &6
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -63,19 +137,19 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Children:
-  - {fileID: 11}
-  - {fileID: 2}
+  - {fileID: 14}
+  - {fileID: 5}
   m_Position:
     serializedVersion: 2
-    x: 1385
+    x: 1887
     y: 0
-    width: 535
-    height: 939
+    width: 673
+    height: 1307
   m_MinSize: {x: 100, y: 100}
   m_MaxSize: {x: 8096, y: 16192}
   vertical: 1
-  controlID: 402
---- !u!114 &4
+  controlID: 71
+--- !u!114 &7
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -90,18 +164,18 @@ MonoBehaviour:
   m_Children: []
   m_Position:
     serializedVersion: 2
-    x: 1128
+    x: 1504
     y: 0
-    width: 257
-    height: 939
-  m_MinSize: {x: 277, y: 71}
-  m_MaxSize: {x: 4002, y: 4021}
-  m_ActualView: {fileID: 16}
+    width: 383
+    height: 1307
+  m_MinSize: {x: 275, y: 50}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_ActualView: {fileID: 20}
   m_Panes:
-  - {fileID: 16}
+  - {fileID: 20}
   m_Selected: 0
   m_LastSelected: 0
---- !u!114 &5
+--- !u!114 &8
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -118,16 +192,16 @@ MonoBehaviour:
     serializedVersion: 2
     x: 0
     y: 0
-    width: 579
-    height: 939
+    width: 772
+    height: 1307
   m_MinSize: {x: 200, y: 200}
   m_MaxSize: {x: 4000, y: 4000}
-  m_ActualView: {fileID: 18}
+  m_ActualView: {fileID: 22}
   m_Panes:
-  - {fileID: 18}
+  - {fileID: 22}
   m_Selected: 0
   m_LastSelected: 0
---- !u!114 &6
+--- !u!114 &9
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -140,22 +214,22 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Children:
-  - {fileID: 7}
-  - {fileID: 8}
-  - {fileID: 9}
+  - {fileID: 10}
+  - {fileID: 11}
+  - {fileID: 12}
   m_Position:
     serializedVersion: 2
     x: 0
     y: 0
-    width: 1920
-    height: 989
+    width: 2560
+    height: 1357
   m_MinSize: {x: 875, y: 300}
   m_MaxSize: {x: 10000, y: 10000}
   m_UseTopView: 1
   m_TopViewHeight: 30
   m_UseBottomView: 1
   m_BottomViewHeight: 20
---- !u!114 &7
+--- !u!114 &10
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -172,12 +246,12 @@ MonoBehaviour:
     serializedVersion: 2
     x: 0
     y: 0
-    width: 1920
+    width: 2560
     height: 30
   m_MinSize: {x: 0, y: 0}
   m_MaxSize: {x: 0, y: 0}
   m_LastLoadedLayoutName: 
---- !u!114 &8
+--- !u!114 &11
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -190,22 +264,22 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Children:
-  - {fileID: 5}
-  - {fileID: 12}
-  - {fileID: 10}
-  - {fileID: 4}
-  - {fileID: 3}
+  - {fileID: 8}
+  - {fileID: 15}
+  - {fileID: 13}
+  - {fileID: 7}
+  - {fileID: 6}
   m_Position:
     serializedVersion: 2
     x: 0
     y: 30
-    width: 1920
-    height: 939
+    width: 2560
+    height: 1307
   m_MinSize: {x: 500, y: 100}
   m_MaxSize: {x: 40480, y: 16192}
   vertical: 0
-  controlID: 281
---- !u!114 &9
+  controlID: 70
+--- !u!114 &12
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -221,12 +295,12 @@ MonoBehaviour:
   m_Position:
     serializedVersion: 2
     x: 0
-    y: 969
-    width: 1920
+    y: 1337
+    width: 2560
     height: 20
   m_MinSize: {x: 0, y: 0}
   m_MaxSize: {x: 0, y: 0}
---- !u!114 &10
+--- !u!114 &13
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -241,18 +315,18 @@ MonoBehaviour:
   m_Children: []
   m_Position:
     serializedVersion: 2
-    x: 914
+    x: 1219
     y: 0
-    width: 214
-    height: 939
-  m_MinSize: {x: 202, y: 221}
-  m_MaxSize: {x: 4002, y: 4021}
-  m_ActualView: {fileID: 15}
+    width: 285
+    height: 1307
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_ActualView: {fileID: 19}
   m_Panes:
-  - {fileID: 15}
+  - {fileID: 19}
   m_Selected: 0
   m_LastSelected: 0
---- !u!114 &11
+--- !u!114 &14
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -269,16 +343,16 @@ MonoBehaviour:
     serializedVersion: 2
     x: 0
     y: 0
-    width: 535
-    height: 575
+    width: 673
+    height: 795
   m_MinSize: {x: 231, y: 271}
   m_MaxSize: {x: 10001, y: 10021}
-  m_ActualView: {fileID: 17}
+  m_ActualView: {fileID: 21}
   m_Panes:
-  - {fileID: 17}
+  - {fileID: 21}
   m_Selected: 0
   m_LastSelected: 0
---- !u!114 &12
+--- !u!114 &15
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -293,19 +367,75 @@ MonoBehaviour:
   m_Children: []
   m_Position:
     serializedVersion: 2
-    x: 579
+    x: 772
     y: 0
-    width: 335
-    height: 939
-  m_MinSize: {x: 202, y: 221}
-  m_MaxSize: {x: 4002, y: 4021}
-  m_ActualView: {fileID: 19}
+    width: 447
+    height: 1307
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_ActualView: {fileID: 23}
   m_Panes:
-  - {fileID: 19}
-  - {fileID: 14}
+  - {fileID: 23}
+  - {fileID: 18}
   m_Selected: 0
   m_LastSelected: 1
---- !u!114 &13
+--- !u!114 &16
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12043, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 640, y: 580}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Build Settings
+    m_Image: {fileID: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 536
+    y: 569
+    width: 640
+    height: 580
+  m_SerializedDataModeController:
+    m_DataMode: 0
+    m_PreferredDataMode: 0
+    m_SupportedDataModes: 
+    isAutomatic: 1
+  m_ViewDataDictionary: {fileID: 0}
+  m_OverlayCanvas:
+    m_LastAppliedPresetName: Default
+    m_SaveData: []
+    m_OverlaysVisible: 1
+  m_TreeViewState:
+    scrollPos: {x: 0, y: 0}
+    m_SelectedIDs: 
+    m_LastClickedID: 0
+    m_ExpandedIDs: 
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 0
+      m_ClientGUIView: {fileID: 0}
+    m_SearchString: 
+--- !u!114 &17
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -325,10 +455,10 @@ MonoBehaviour:
     m_Tooltip: 
   m_Pos:
     serializedVersion: 2
-    x: 1385
-    y: 648
-    width: 534
-    height: 343
+    x: 1887
+    y: 868
+    width: 672
+    height: 491
   m_SerializedDataModeController:
     m_DataMode: 0
     m_PreferredDataMode: 0
@@ -339,7 +469,7 @@ MonoBehaviour:
     m_LastAppliedPresetName: Default
     m_SaveData: []
     m_OverlaysVisible: 1
---- !u!114 &14
+--- !u!114 &18
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -409,7 +539,7 @@ MonoBehaviour:
   m_CurrentEditor: 0
   m_LayerEditor:
     m_SelectedLayerIndex: 0
---- !u!114 &15
+--- !u!114 &19
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -429,10 +559,10 @@ MonoBehaviour:
     m_Tooltip: 
   m_Pos:
     serializedVersion: 2
-    x: 914
+    x: 1219
     y: 73
-    width: 212
-    height: 918
+    width: 283
+    height: 1286
   m_SerializedDataModeController:
     m_DataMode: 0
     m_PreferredDataMode: 0
@@ -446,9 +576,9 @@ MonoBehaviour:
   m_SceneHierarchy:
     m_TreeViewState:
       scrollPos: {x: 0, y: 0}
-      m_SelectedIDs: c84c0000
+      m_SelectedIDs: e8ef0000
       m_LastClickedID: 0
-      m_ExpandedIDs: 2a7bd7ff
+      m_ExpandedIDs: 1efbffff
       m_RenameOverlay:
         m_UserAcceptedRename: 0
         m_Name: 
@@ -464,7 +594,7 @@ MonoBehaviour:
         m_IsRenaming: 0
         m_OriginalEventType: 11
         m_IsRenamingFilename: 0
-        m_ClientGUIView: {fileID: 10}
+        m_ClientGUIView: {fileID: 13}
       m_SearchString: 
     m_ExpandedScenes: []
     m_CurrenRootInstanceID: 0
@@ -472,7 +602,7 @@ MonoBehaviour:
       m_IsLocked: 0
     m_CurrentSortingName: TransformSorting
   m_WindowGUID: 4ca40d111d51deb4f81f85b0a6d43c19
---- !u!114 &16
+--- !u!114 &20
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -492,10 +622,10 @@ MonoBehaviour:
     m_Tooltip: 
   m_Pos:
     serializedVersion: 2
-    x: 1128
+    x: 1504
     y: 73
-    width: 255
-    height: 918
+    width: 381
+    height: 1286
   m_SerializedDataModeController:
     m_DataMode: 0
     m_PreferredDataMode: 0
@@ -519,7 +649,7 @@ MonoBehaviour:
   m_LockTracker:
     m_IsLocked: 0
   m_PreviewWindow: {fileID: 0}
---- !u!114 &17
+--- !u!114 &21
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -539,10 +669,10 @@ MonoBehaviour:
     m_Tooltip: 
   m_Pos:
     serializedVersion: 2
-    x: 1385
+    x: 1887
     y: 73
-    width: 534
-    height: 554
+    width: 672
+    height: 774
   m_SerializedDataModeController:
     m_DataMode: 0
     m_PreferredDataMode: 0
@@ -566,7 +696,7 @@ MonoBehaviour:
     m_SkipHidden: 0
     m_SearchArea: 1
     m_Folders:
-    - Packages
+    - Assets
     m_Globs: []
     m_OriginalText: 
     m_ImportLogFlags: 0
@@ -574,16 +704,16 @@ MonoBehaviour:
   m_ViewMode: 1
   m_StartGridSize: 64
   m_LastFolders:
-  - Packages
+  - Assets
   m_LastFoldersGridSize: -1
-  m_LastProjectPath: F:\GFG_webgl_v2\client_webgl\GameClient
+  m_LastProjectPath: D:\Client\Client\GameClient
   m_LockTracker:
     m_IsLocked: 0
   m_FolderTreeState:
     scrollPos: {x: 0, y: 0}
-    m_SelectedIDs: ffffff7f
-    m_LastClickedID: 2147483647
-    m_ExpandedIDs: 00000000ea0500003206000000ca9a3bffffff7f
+    m_SelectedIDs: acc60000
+    m_LastClickedID: 50860
+    m_ExpandedIDs: 00000000a8c60000aac60000acc60000aec60000b0c60000b2c60000b4c60000b6c60000b8c60000bac60000bcc60000bec60000c0c60000c2c60000c4c60000c6c60000c8c60000cac60000ccc60000cec60000d0c60000d2c60000d4c6000066c7000000ca9a3b
     m_RenameOverlay:
       m_UserAcceptedRename: 0
       m_Name: 
@@ -599,7 +729,7 @@ MonoBehaviour:
       m_IsRenaming: 0
       m_OriginalEventType: 11
       m_IsRenamingFilename: 1
-      m_ClientGUIView: {fileID: 11}
+      m_ClientGUIView: {fileID: 14}
     m_SearchString: 
     m_CreateAssetUtility:
       m_EndAction: {fileID: 0}
@@ -611,7 +741,7 @@ MonoBehaviour:
     scrollPos: {x: 0, y: 0}
     m_SelectedIDs: 
     m_LastClickedID: 0
-    m_ExpandedIDs: 00000000ea05000000ca9a3bffffff7f
+    m_ExpandedIDs: 00000000a8c60000aac60000acc60000aec60000b0c60000b2c60000b4c60000b6c60000b8c60000bac60000bcc60000bec60000c0c60000c2c60000c4c60000c6c60000c8c60000cac60000ccc60000cec60000d0c60000d2c60000d4c60000
     m_RenameOverlay:
       m_UserAcceptedRename: 0
       m_Name: 
@@ -638,7 +768,7 @@ MonoBehaviour:
   m_ListAreaState:
     m_SelectedInstanceIDs: 
     m_LastClickedInstanceID: 0
-    m_HadKeyboardFocusLastEvent: 0
+    m_HadKeyboardFocusLastEvent: 1
     m_ExpandedInstanceIDs: 3ac8000028d3000068c90700
     m_RenameOverlay:
       m_UserAcceptedRename: 0
@@ -655,7 +785,7 @@ MonoBehaviour:
       m_IsRenaming: 0
       m_OriginalEventType: 11
       m_IsRenamingFilename: 1
-      m_ClientGUIView: {fileID: 11}
+      m_ClientGUIView: {fileID: 14}
     m_CreateAssetUtility:
       m_EndAction: {fileID: 0}
       m_InstanceID: 0
@@ -667,7 +797,7 @@ MonoBehaviour:
     m_GridSize: 64
   m_SkipHiddenPackages: 0
   m_DirectoriesAreaWidth: 245
---- !u!114 &18
+--- !u!114 &22
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -689,8 +819,8 @@ MonoBehaviour:
     serializedVersion: 2
     x: 0
     y: 73
-    width: 578
-    height: 918
+    width: 771
+    height: 1286
   m_SerializedDataModeController:
     m_DataMode: 0
     m_PreferredDataMode: 0
@@ -707,7 +837,7 @@ MonoBehaviour:
   m_ShowGizmos: 0
   m_TargetDisplay: 0
   m_ClearColor: {r: 0, g: 0, b: 0, a: 0}
-  m_TargetSize: {x: 3840, y: 2160}
+  m_TargetSize: {x: 1080, y: 1920}
   m_TextureFilterMode: 0
   m_TextureHideFlags: 61
   m_RenderIMGUI: 1
@@ -716,16 +846,16 @@ MonoBehaviour:
   m_VSyncEnabled: 0
   m_Gizmos: 0
   m_Stats: 0
-  m_SelectedSizes: 06000000000000000000000000000000000000000000000000000000000000000000000000000000
+  m_SelectedSizes: 0a000000000000000000000000000000000000000000000000000000000000000000000000000000
   m_ZoomArea:
     m_HRangeLocked: 0
     m_VRangeLocked: 0
     hZoomLockedByDefault: 0
     vZoomLockedByDefault: 0
-    m_HBaseRangeMin: -1920
-    m_HBaseRangeMax: 1920
-    m_VBaseRangeMin: -1080
-    m_VBaseRangeMax: 1080
+    m_HBaseRangeMin: -540
+    m_HBaseRangeMax: 540
+    m_VBaseRangeMin: -960
+    m_VBaseRangeMax: 960
     m_HAllowExceedBaseRangeMin: 1
     m_HAllowExceedBaseRangeMax: 1
     m_VAllowExceedBaseRangeMin: 1
@@ -743,29 +873,29 @@ MonoBehaviour:
       serializedVersion: 2
       x: 0
       y: 21
-      width: 578
-      height: 897
-    m_Scale: {x: 0.15052083, y: 0.15052083}
-    m_Translation: {x: 289, y: 448.5}
+      width: 771
+      height: 1265
+    m_Scale: {x: 0.6588542, y: 0.6588542}
+    m_Translation: {x: 385.5, y: 632.5}
     m_MarginLeft: 0
     m_MarginRight: 0
     m_MarginTop: 0
     m_MarginBottom: 0
     m_LastShownAreaInsideMargins:
       serializedVersion: 2
-      x: -1920
-      y: -2979.654
-      width: 3840
-      height: 5959.308
+      x: -585.1067
+      y: -960
+      width: 1170.2134
+      height: 1920
     m_MinimalGUI: 1
-  m_defaultScale: 0.15052083
-  m_LastWindowPixelSize: {x: 578, y: 918}
+  m_defaultScale: 0.6588542
+  m_LastWindowPixelSize: {x: 771, y: 1286}
   m_ClearInEditMode: 1
   m_NoCameraWarning: 1
   m_LowResolutionForAspectRatios: 01000000000000000000
   m_XRRenderMode: 0
   m_RenderTexture: {fileID: 0}
---- !u!114 &19
+--- !u!114 &23
 MonoBehaviour:
   m_ObjectHideFlags: 52
   m_CorrespondingSourceObject: {fileID: 0}
@@ -785,10 +915,10 @@ MonoBehaviour:
     m_Tooltip: 
   m_Pos:
     serializedVersion: 2
-    x: 579
+    x: 772
     y: 73
-    width: 333
-    height: 918
+    width: 445
+    height: 1286
   m_SerializedDataModeController:
     m_DataMode: 0
     m_PreferredDataMode: 0
@@ -804,7 +934,7 @@ MonoBehaviour:
       collapsed: 0
       displayed: 1
       snapOffset: {x: -156, y: -26}
-      snapOffsetDelta: {x: -10, y: 0}
+      snapOffsetDelta: {x: 0, y: 0}
       snapCorner: 3
       id: Tool Settings
       index: 0
@@ -829,7 +959,7 @@ MonoBehaviour:
       floating: 0
       collapsed: 0
       displayed: 1
-      snapOffset: {x: 0, y: 0}
+      snapOffset: {x: 0, y: 25}
       snapOffsetDelta: {x: 0, y: 0}
       snapCorner: 0
       id: unity-scene-view-toolbar
@@ -855,7 +985,7 @@ MonoBehaviour:
       floating: 0
       collapsed: 0
       displayed: 1
-      snapOffset: {x: 0, y: 0}
+      snapOffset: {x: 0, y: 25}
       snapOffsetDelta: {x: 0, y: 0}
       snapCorner: 0
       id: unity-transform-toolbar
@@ -1108,9 +1238,9 @@ MonoBehaviour:
   m_PlayAudio: 0
   m_AudioPlay: 0
   m_Position:
-    m_Target: {x: 0.5749625, y: -1.1621449, z: -0.014116665}
+    m_Target: {x: -0.020534059, y: 3.9694219, z: 0.052318692}
     speed: 2
-    m_Value: {x: 0.5749625, y: -1.1621449, z: -0.014116665}
+    m_Value: {x: -0.020534059, y: 3.9694219, z: 0.052318692}
   m_RenderMode: 0
   m_CameraMode:
     drawMode: 0
@@ -1160,9 +1290,9 @@ MonoBehaviour:
     speed: 2
     m_Value: {x: 0, y: 0, z: 0, w: 1}
   m_Size:
-    m_Target: 11.411661
+    m_Target: 11.015626
     speed: 2
-    m_Value: 11.411661
+    m_Value: 11.015626
   m_Ortho:
     m_Target: 1
     speed: 2