hexiaojie 8 bulan lalu
induk
melakukan
183bc00ec1

+ 53 - 19
GameClient/Assets/Game/HotUpdate/Assets/PrefabManager.cs

@@ -30,14 +30,16 @@ namespace GFGGame
         public GameObject SpawnSync(string resPath)
         {
             var t = GetPreDrawObj(resPath);
-            if(t != null)
+            if (t != null)
             {
                 return t;
             }
+
             if (!YooAssets.CheckResExist(resPath))
             {
                 return null;
             }
+
             if (!_entitySpawner.IsGameObjectPoolExisted(resPath))
             {
                 // 创建游戏对象池,销毁时间单位为秒
@@ -64,19 +66,46 @@ namespace GFGGame
         //    return handle.GameObj;
         //}
 
-        public GameObject InstantiateSync(string resPath)
+        // public GameObject InstantiateSync(string resPath)
+        // {
+        //     AssetOperationHandle handle = YooAssets.LoadAssetSync<GameObject>(resPath);
+        //     GameObject gameObject = handle.InstantiateSync();
+        //     if(gameObject != null)
+        //     {
+        //         AssetReleaserHelper.AddReleaserToInstantiateObj(gameObject, resPath, handle);
+        //     }
+        //     else
+        //     {
+        //         handle.Release();
+        //     }
+        //     return gameObject;
+        // }
+
+        public void InstantiateAsync(string resPath, System.Action<GameObject> callback)
         {
-            AssetOperationHandle handle = YooAssets.LoadAssetSync<GameObject>(resPath);
-            GameObject gameObject = handle.InstantiateSync();
-            if(gameObject != null)
-            {
-                AssetReleaserHelper.AddReleaserToInstantiateObj(gameObject, resPath, handle);
-            }
-            else
+            var operation = YooAssets.LoadAssetAsync<GameObject>(resPath);
+            operation.Completed += (op) =>
             {
-                handle.Release();
-            }
-            return gameObject;
+                if (op.Status == EOperationStatus.Succeed)
+                {
+                    GameObject gameObject = op.InstantiateSync();
+                    if (gameObject != null)
+                    {
+                        AssetReleaserHelper.AddReleaserToInstantiateObj(gameObject, resPath, op);
+                        callback?.Invoke(gameObject);
+                    }
+                    else
+                    {
+                        op.Release();
+                        callback?.Invoke(null);
+                    }
+                }
+                else
+                {
+                    Debug.LogError($"Failed to load asset: {resPath}");
+                    callback?.Invoke(null);
+                }
+            };
         }
 
         public void Restore(GameObject gameObject)
@@ -85,7 +114,8 @@ namespace GFGGame
             {
                 return;
             }
-            AssetReleaser assetRestorer = gameObject.GetComponent<AssetReleaser>(); 
+
+            AssetReleaser assetRestorer = gameObject.GetComponent<AssetReleaser>();
             if (assetRestorer != null && assetRestorer.IsSpawn)
             {
                 assetRestorer.Restore();
@@ -95,13 +125,14 @@ namespace GFGGame
                 var assetReleasers = gameObject.GetComponentsInChildren<AssetReleaser>();
                 if (assetReleasers != null && assetReleasers.Length > 0)
                 {
-                    foreach(var t in assetReleasers)
+                    foreach (var t in assetReleasers)
                     {
-                        if(t.IsSpawn)
+                        if (t.IsSpawn)
                         {
                             t.Restore();
                         }
                     }
+
                     GameObject.Destroy(gameObject);
                 }
                 else
@@ -114,11 +145,12 @@ namespace GFGGame
         public void PreDraw(string resPath)
         {
             preDrawDic.TryGetValue(resPath, out var list);
-            if(list == null)
+            if (list == null)
             {
                 list = new List<GameObject>();
                 preDrawDic[resPath] = list;
             }
+
             var t = PrefabManager.Instance.SpawnSync(resPath);
             t.transform.SetParent(preDrawRoot.transform, false);
             list.Add(t);
@@ -131,20 +163,22 @@ namespace GFGGame
             {
                 return null;
             }
-            if(list.Count > 0)
+
+            if (list.Count > 0)
             {
                 int index = list.Count - 1;
                 var t = list[index];
                 list.RemoveAt(index);
                 return t;
             }
+
             return null;
         }
 
         public void CancelPreDraw(string resPath)
         {
             preDrawDic.TryGetValue(resPath, out var list);
-            if(list != null && list.Count > 0)
+            if (list != null && list.Count > 0)
             {
                 int index = list.Count - 1;
                 var t = list[index];
@@ -153,4 +187,4 @@ namespace GFGGame
             }
         }
     }
-}
+}

+ 17 - 13
GameClient/Assets/Game/HotUpdate/FairyGUI/GFGGLoader.cs

@@ -9,6 +9,7 @@ namespace GFGGame
 
         private AssetOperationHandle handle;
 
+        //TODO webgl异步加载
         protected override void LoadExternal()
         {
             //LogUtil.LogEditor($"GFGGLoader this.url {this.url}");
@@ -16,19 +17,22 @@ namespace GFGGame
             {
                 return;
             }
-            bool isAsync = !this.url.Contains(ResPathUtil.TEXTURE_BGIMG_DIR_PATH);
-            if (isAsync)
-            {
-                //异步
-                handle = YooAssets.LoadAssetAsync<Texture2D>(this.url);
-                handle.Completed += Handle_Completed;
-            }
-            else
-            {
-                //同步
-                handle = YooAssets.LoadAssetSync<Texture2D>(this.url);
-                Handle_Completed(handle);
-            }
+            //bool isAsync = !this.url.Contains(ResPathUtil.TEXTURE_BGIMG_DIR_PATH);
+            //异步
+            handle = YooAssets.LoadAssetAsync<Texture2D>(this.url);
+            handle.Completed += Handle_Completed;
+            // if (isAsync)
+            // {
+            //     //异步
+            //     handle = YooAssets.LoadAssetAsync<Texture2D>(this.url);
+            //     handle.Completed += Handle_Completed;
+            // }
+            // else
+            // {
+            //     //同步
+            //     handle = YooAssets.LoadAssetSync<Texture2D>(this.url);
+            //     Handle_Completed(handle);
+            // }
         }
 
         protected override void FreeExternal(NTexture texture)

+ 27 - 27
GameClient/Assets/Game/HotUpdate/FairyGUI/GFGUIPackage.cs

@@ -12,33 +12,33 @@ namespace GFGGame
         private static Dictionary<string, List<AssetOperationHandle>> assetHandleCacheDic = new Dictionary<string, List<AssetOperationHandle>>();
         private static Dictionary<string, int> _assetCount = new Dictionary<string, int>();
 
-        public static void AddPackage(string descFilePath)
-        {
-            _assetCount.TryGetValue(descFilePath, out var count);
-            if (count > 0)
-            {
-                _assetCount[descFilePath] = count + 1;
-                return;
-            }
-            _assetCount.Add(descFilePath, count + 1);
-            var handle = YooAssets.LoadAssetSync<TextAsset>($"{descFilePath}_fui.bytes");
-            TextAsset textAsset = handle.AssetObject as TextAsset;
-            CacheAssetHandle(descFilePath, handle);
-            //同步
-            var uiPackage = UIPackage.AddPackage(textAsset.bytes, descFilePath, (string name, string extension, System.Type type, out DestroyMethod destroyMethod) =>
-            {
-                string location = name + extension;
-                destroyMethod = DestroyMethod.None; //注意:这里一定要设置为None
-                if (!YooAssets.CheckResExist(location))
-                {
-                    return null;
-                }
-                var handle = YooAssets.LoadAssetSync(location, type);
-                CacheAssetHandle(descFilePath, handle);
-                return handle.AssetObject;
-            });
-            _packages.Add(descFilePath, uiPackage);
-        }
+        // public static void AddPackage(string descFilePath)
+        // {
+        //     _assetCount.TryGetValue(descFilePath, out var count);
+        //     if (count > 0)
+        //     {
+        //         _assetCount[descFilePath] = count + 1;
+        //         return;
+        //     }
+        //     _assetCount.Add(descFilePath, count + 1);
+        //     var handle = YooAssets.LoadAssetSync<TextAsset>($"{descFilePath}_fui.bytes");
+        //     TextAsset textAsset = handle.AssetObject as TextAsset;
+        //     CacheAssetHandle(descFilePath, handle);
+        //     //同步
+        //     var uiPackage = UIPackage.AddPackage(textAsset.bytes, descFilePath, (string name, string extension, System.Type type, out DestroyMethod destroyMethod) =>
+        //     {
+        //         string location = name + extension;
+        //         destroyMethod = DestroyMethod.None; //注意:这里一定要设置为None
+        //         if (!YooAssets.CheckResExist(location))
+        //         {
+        //             return null;
+        //         }
+        //         var handle = YooAssets.LoadAssetSync(location, type);
+        //         CacheAssetHandle(descFilePath, handle);
+        //         return handle.AssetObject;
+        //     });
+        //     _packages.Add(descFilePath, uiPackage);
+        // }
 
         public static async Task AddPackageAsync(string descFilePath)
         {

+ 1 - 1
GameClient/Assets/Game/HotUpdate/GameConfig.cs

@@ -32,7 +32,7 @@ namespace GFGGame
             var result = JsonMapper.ToObject<Result>(json);
             LoginAddress = result.loginApiUrl;
             //LoginAddress = "43.139.184.240:10003";
-            LoginAddress = "192.168.1.191:11005";//测试地址
+            LoginAddress = "192.168.1.113:11005";//测试地址
             showGM = int.Parse(result.showGM);
             if(!string.IsNullOrEmpty(result.openTime))
             {

+ 18 - 10
GameClient/Assets/Game/HotUpdate/Sound/VoiceManager.cs

@@ -15,12 +15,10 @@ namespace GFGGame
         private Coroutine coroutine;
 
         private bool _isOn = true;
+
         public bool isOn
         {
-            get
-            {
-                return _isOn;
-            }
+            get { return _isOn; }
             set
             {
                 if (_isOn != value)
@@ -35,6 +33,7 @@ namespace GFGGame
                         //player.volume = 0;
                         Stop();
                     }
+
                     LocalCache.SetBool(GameConfig.VOICE_KEY, _isOn);
                 }
             }
@@ -50,14 +49,20 @@ namespace GFGGame
             player.volume = LocalCache.GetFloat(GameConfig.VOICE_VOLUMN_KEY, 1.0f);
         }
 
-        public void LoadRes(string path)
+        public void LoadResAsync(string path)
         {
             if (player.volume == 0 || !isOn || !YooAssets.CheckResExist(path))
-            {
                 return;
-            }
-            handle = YooAssets.LoadAssetSync<AudioClip>(path);
-            player.clip = handle.AssetObject as AudioClip;
+
+            var operation = YooAssets.LoadAssetAsync<AudioClip>(path);
+            operation.Completed += (op) =>
+            {
+                // 直接操作Unity对象(假设回调已在主线程)
+                if (op.Status == EOperationStatus.Succeed)
+                    player.clip = op.AssetObject as AudioClip;
+                else
+                    Debug.LogError($"加载失败: {path}");
+            };
         }
 
         public void PlayVoice()
@@ -70,7 +75,7 @@ namespace GFGGame
 
         public void StopVoice()
         {
-            if(player == null)
+            if (player == null)
             {
                 return;
             }
@@ -86,6 +91,7 @@ namespace GFGGame
             {
                 return player.clip.length;
             }
+
             return 0;
         }
 
@@ -95,6 +101,7 @@ namespace GFGGame
             {
                 return Mathf.Ceil(player.clip.length - player.time);
             }
+
             return 0;
         }
 
@@ -104,6 +111,7 @@ namespace GFGGame
             {
                 StopCoroutine(coroutine);
             }
+
             handle?.Release();
             if (_isOn)
             {

+ 66 - 34
GameClient/Assets/Game/HotUpdate/UGUI/UICGView.cs

@@ -24,14 +24,31 @@ namespace GFGGame
         {
             MusicManager.Instance.Stop();
             string path = ResPathUtil.GetUUIPrefabPath("UICG");
-            handle = YooAssets.LoadAssetSync<GameObject>(path);
-            _ui = handle.InstantiateSync(UGUIManager.Instance.desktop.transform);
+
+            // 异步加载UI预制体
+            var uiLoadOperation = YooAssets.LoadAssetAsync<GameObject>(path);
+            uiLoadOperation.Completed += (op) =>
+            {
+                if (op.Status == EOperationStatus.Succeed)
+                {
+                    _ui = op.InstantiateSync(UGUIManager.Instance.desktop.transform);
+                    InitializeUIComponents();
+                    LoadAndPlayVideo();
+                }
+                else
+                {
+                    Debug.LogError($"Failed to load UI prefab: {path}");
+                }
+            };
+        }
+
+        private void InitializeUIComponents()
+        {
             imgVideo = _ui.transform.Find("ImgVideo").GetComponent<RawImage>();
             Vector2 imgVideoSizeDelta = imgVideo.rectTransform.sizeDelta;
             imgVideoSizeDelta.x = Screen.width;
             imgVideoSizeDelta.y = (VideoHeight / VideoWidth) * imgVideoSizeDelta.x;
             imgVideo.rectTransform.sizeDelta = imgVideoSizeDelta;
-            
 
             BtnFullScreen = _ui.transform.Find("BtnFullScreen").GetComponent<Button>();
             RectTransform rectbtnFullScreen = BtnFullScreen.GetComponent<RectTransform>();
@@ -41,7 +58,6 @@ namespace GFGGame
             rectbtnFullScreen.anchoredPosition = anchoredPosition;
             BtnFullScreen.onClick.AddListener(OnClickBtnFullScreen);
 
-
             BtnSkipVertical = _ui.transform.Find("BtnSkipVertical").GetComponent<Button>();
             RectTransform rectBtnSkipVertical = BtnSkipVertical.GetComponent<RectTransform>();
             anchoredPosition = rectBtnSkipVertical.anchoredPosition;
@@ -49,7 +65,6 @@ namespace GFGGame
             rectBtnSkipVertical.anchoredPosition = anchoredPosition;
             BtnSkipVertical.onClick.AddListener(OnClickrectBtnSkip);
 
-
             BtnSkipHorizontal = _ui.transform.Find("BtnSkipHorizontal").GetComponent<Button>();
             BtnSkipHorizontal.gameObject.SetActive(false);
             BtnSkipHorizontal.onClick.AddListener(OnClickrectBtnSkip);
@@ -57,13 +72,25 @@ namespace GFGGame
             videoPlayer = _ui.transform.Find("VideoPlayer").GetComponent<VideoPlayer>();
             videoPlayer.loopPointReached += OnVideoEnded;
             videoPlayer.prepareCompleted += OnVideoPrepared;
+        }
 
+        private void LoadAndPlayVideo()
+        {
             string assetPath = ResPathUtil.GetVideoPath("cg");
-            videoHandle = YooAssets.LoadRawFileSync(assetPath);
-            videoPlayer.url = videoHandle.GetRawFilePath();
-            videoPlayer.Play();
-
-            
+            var videoLoadOperation = YooAssets.LoadRawFileAsync(assetPath);
+            videoLoadOperation.Completed += (op) =>
+            {
+                if (op.Status == EOperationStatus.Succeed)
+                {
+                    videoHandle = op;
+                    videoPlayer.url = videoHandle.GetRawFilePath();
+                    videoPlayer.Play();
+                }
+                else
+                {
+                    Debug.LogError($"Failed to load video: {assetPath}");
+                }
+            };
         }
 
         private void OnVideoPrepared(VideoPlayer source)
@@ -77,34 +104,22 @@ namespace GFGGame
         IEnumerator FadeButtonOverTime(Button btn)
         {
             Image buttonImage = btn.GetComponent<Image>();
-            //Image img = btn.GetComponentInChildren<Image>();
             yield return new WaitForSeconds((float)videoPlayer.length - 3f);
             if (buttonImage != null)
             {
-                // 获取初始颜色
                 Color startColor = buttonImage.color;
-                //Color startColorText = img.color;
-
-                // 目标颜色,透明度设为 0
                 Color targetColor = new Color(startColor.r, startColor.g, startColor.b, 0f);
-                //Color targetColorText = new Color(startColorText.r, startColorText.g, startColorText.b, 0f);
-
                 float fadeDuration = 1f;
-                // 记录开始时间
                 float startTime = Time.time;
 
                 while (Time.time - startTime < fadeDuration)
                 {
-                    // 在一定时间内逐渐插值颜色
                     float t = (Time.time - startTime) / fadeDuration;
                     buttonImage.color = Color.Lerp(startColor, targetColor, t);
-                    //img.color = Color.Lerp(startColorText, targetColorText, t);
-                    yield return null; // 等待下一帧
+                    yield return null;
                 }
 
-                // 设置最终颜色,确保透明度为 0
                 buttonImage.color = targetColor;
-                //img.color = targetColorText;
             }
         }
 
@@ -128,29 +143,46 @@ namespace GFGGame
             imgVideoSizeDelta.y = Screen.width;
             imgVideoSizeDelta.x = (VideoWidth / VideoHeight) * imgVideoSizeDelta.y;
             imgVideo.rectTransform.sizeDelta = imgVideoSizeDelta;
-            if(videoPlayer.time <= 3)
+            if (videoPlayer.time <= 3)
             {
                 videoPlayer.Stop();
                 videoPlayer.Play();
             }
+
             RectTransform rectBtnSkipVertical = BtnSkipHorizontal.GetComponent<RectTransform>();
             Vector2 anchoredPosition = rectBtnSkipVertical.anchoredPosition;
-            anchoredPosition.y = (Screen.height - imgVideoSizeDelta.x)/2 + rectBtnSkipVertical.sizeDelta.x/2;
+            anchoredPosition.y = (Screen.height - imgVideoSizeDelta.x) / 2 + rectBtnSkipVertical.sizeDelta.x / 2;
             rectBtnSkipVertical.anchoredPosition = anchoredPosition;
         }
 
         public void Hide()
         {
             StopAllCoroutines();
-            videoPlayer.Stop();
-            videoPlayer.loopPointReached -= OnVideoEnded;
-            handle.Release();
-            handle = null;
-            videoHandle.Release();
-            videoHandle = null;
-            GameObject.Destroy(_ui);
-            _ui = null;
+            if (videoPlayer != null)
+            {
+                videoPlayer.Stop();
+                videoPlayer.loopPointReached -= OnVideoEnded;
+            }
+
+            if (handle != null)
+            {
+                handle.Release();
+                handle = null;
+            }
+
+            if (videoHandle != null)
+            {
+                videoHandle.Release();
+                videoHandle = null;
+            }
+
+            if (_ui != null)
+            {
+                GameObject.Destroy(_ui);
+                _ui = null;
+            }
+
             StoryController.ShowLevelView(100001001);
         }
     }
-}
+}

+ 44 - 9
GameClient/Assets/Game/HotUpdate/Views/Arena/ArenaView.cs

@@ -93,9 +93,12 @@ namespace GFGGame
             _arenaCfg = CommonDataManager.Tables.TblArenaOpenCfg.GetOrDefault(_dataManager.SeasonId);
             _valueBarController.OnShown();
             _dataManager.SetMineFightAttrs();
+
             if (_dataManager.DressupList.Count == 0) return;
+
             InstanceZonesDataManager.FightScene = ConstInstanceZonesType.Arena;
             _dataManager.CurFightIndex = 0;
+
             if (_targetData == null)
             {
                 _dataManager.SelectTargetIndex = -1;
@@ -103,7 +106,6 @@ namespace GFGGame
                 _dataManager.targetScore.Clear();
                 _dataManager.myFightPower.Clear();
                 _dataManager.targetFightPower.Clear();
-
                 UpdateTargetList();
             }
             else
@@ -114,19 +116,52 @@ namespace GFGGame
 
             if (_sceneObject == null)
             {
-                _sceneObject = PrefabManager.Instance.InstantiateSync(ResPathUtil.GetPrefabPath("SceneArena"));
-                var handle = YooAssets.LoadAssetSync<Sprite>(ResPathUtil.GetBgImgPath("fhl_bg"));
-                Sprite bgSprite = handle.AssetObject as Sprite;
-                _sceneObject.transform.Find("Bg").GetComponent<SpriteRenderer>().sprite = bgSprite;
+                PrefabManager.Instance.InstantiateAsync(
+                    ResPathUtil.GetPrefabPath("SceneArena"),
+                    (go) =>
+                    {
+                        _sceneObject = go;
+                        if (_sceneObject != null)
+                        {
+                            LoadBackgroundAsync();
+                            UpdateNormal();
+                            UpdateValue();
+                            UpdateRole();
+                        }
+                    });
+            }
+            else
+            {
+                UpdateNormal();
+                UpdateValue();
+                UpdateRole();
             }
-
-            UpdateNormal();
-            UpdateValue();
-            UpdateRole();
 
             Timers.inst.AddUpdate(CheckGuide);
         }
 
+        private void LoadBackgroundAsync()
+        {
+            string bgPath = ResPathUtil.GetBgImgPath("fhl_bg");
+            var operation = YooAssets.LoadAssetAsync<Sprite>(bgPath);
+            operation.Completed += (op) =>
+            {
+                if (op.Status == EOperationStatus.Succeed && _sceneObject != null)
+                {
+                    Sprite bgSprite = op.AssetObject as Sprite;
+                    Transform bgTransform = _sceneObject.transform.Find("Bg");
+                    if (bgTransform != null)
+                    {
+                        bgTransform.GetComponent<SpriteRenderer>().sprite = bgSprite;
+                    }
+                }
+                else
+                {
+                    Debug.LogError($"Failed to load background sprite: {bgPath}");
+                }
+            };
+        }
+
         protected override void OnHide()
         {
             base.OnHide();

+ 117 - 49
GameClient/Assets/Game/HotUpdate/Views/ClothingSynthetic/ClothingSyntheticView.cs

@@ -29,10 +29,20 @@ namespace GFGGame
 
         private const float DURATION = 0.6f;
 
-        private readonly int[] HEAD_Y_ARR = new int[] { ConstDressUpItemType.TOU_SHI, ConstDressUpItemType.ER_SHI, ConstDressUpItemType.JING_SHI, ConstDressUpItemType.ZHUANG_RONG };
+        private readonly int[] HEAD_Y_ARR = new int[]
+        {
+            ConstDressUpItemType.TOU_SHI, ConstDressUpItemType.ER_SHI, ConstDressUpItemType.JING_SHI,
+            ConstDressUpItemType.ZHUANG_RONG
+        };
+
         private readonly int[] FA_XING_Y_ARR = new int[] { ConstDressUpItemType.FA_XING };
-        private readonly int[] UPPER_BODY_Y_ARR = new int[] { ConstDressUpItemType.NEI_DA, ConstDressUpItemType.SHANG_YI };
-        private readonly int[] LOWER_BODY_Y_ARR = new int[] { ConstDressUpItemType.XIA_ZHUANG, ConstDressUpItemType.SHOU_SHI };
+
+        private readonly int[] UPPER_BODY_Y_ARR = new int[]
+            { ConstDressUpItemType.NEI_DA, ConstDressUpItemType.SHANG_YI };
+
+        private readonly int[] LOWER_BODY_Y_ARR = new int[]
+            { ConstDressUpItemType.XIA_ZHUANG, ConstDressUpItemType.SHOU_SHI };
+
         private readonly int[] SHOES_Y_ARR = new int[] { ConstDressUpItemType.WA_ZI, ConstDressUpItemType.XIE_ZI };
 
         private UI_ClothingSyntheticUI _ui;
@@ -65,6 +75,7 @@ namespace GFGGame
                 _imgSelected.RemoveFromParent();
                 _imgSelected.Dispose();
             }
+
             if (_dressUpObjUI != null)
             {
                 _dressUpObjUI.Dispose();
@@ -76,6 +87,7 @@ namespace GFGGame
                 _ui.Dispose();
                 _ui = null;
             }
+
             base.Dispose();
         }
 
@@ -112,13 +124,14 @@ namespace GFGGame
             _ui.m_loaBg.url = ResPathUtil.GetBgImgPath("hc_bj_1");
 
             UpdateMaskHeight();
-
         }
+
         protected override void AddEventListener()
         {
             base.AddEventListener();
             EventAgent.AddEventListener(ConstMessage.ITEM_CHANGED, OnItemNumChanged);
         }
+
         protected override void OnShown()
         {
             base.OnShown();
@@ -129,9 +142,10 @@ namespace GFGGame
             {
                 _suitId = (int)(this.viewData as object[])[0];
                 _selectedItemId = (this.viewData as object[]).Length > 1 ? (int)(this.viewData as object[])[1] : 0;
-                if((this.viewData as object[]).Length > 2)
+                if ((this.viewData as object[]).Length > 2)
                     _chapterID = (int)(this.viewData as object[])[2];
             }
+
             UpdateCardSyntheticBtn();
 
             if (DressUpMenuSuitDataManager.chooseClothing > 0)
@@ -140,7 +154,7 @@ namespace GFGGame
             _valueBarController.OnShown();
             _ui.m_loaBg2.url = ResPathUtil.GetBgImgPath("hc_bj_1");
             UpdateClothingList(false);
-    
+
             Timers.inst.AddUpdate(CheckGuide);
         }
 
@@ -151,14 +165,16 @@ namespace GFGGame
             _ui.m_listMaterias.selectedIndex = 0;
             Timers.inst.Remove(CheckGuide);
             _dressUpObjUI.dressUpObj.TakeOffAll();
-            if(_chapterID > 0)
+            if (_chapterID > 0)
                 MainStoryDataManager.currentChapterCfgId = _chapterID;
         }
+
         protected override void RemoveEventListener()
         {
             base.RemoveEventListener();
             EventAgent.RemoveEventListener(ConstMessage.ITEM_CHANGED, OnItemNumChanged);
         }
+
         private void OnClickBtnBack()
         {
             DressUpMenuSuitDataManager.chooseClothing = 0;
@@ -192,12 +208,14 @@ namespace GFGGame
                 return;
             }
 
-            List<ItemData> materiarsOfSelectedItem = ItemUtil.CreateItemDataList(itemCfg.SyntheticMateriars.ToGfgGameItemParam());
+            List<ItemData> materiarsOfSelectedItem =
+                ItemUtil.CreateItemDataList(itemCfg.SyntheticMateriars.ToGfgGameItemParam());
             for (int i = 0; i < materiarsOfSelectedItem.Count; i++)
             {
                 ItemData itemData = materiarsOfSelectedItem[i];
                 if (itemData == null || !ItemUtil.CheckItemEnough(itemData.id, itemData.num, true)) return;
             }
+
             bool result = await ClothingSyntheticSProxy.ClothtingSynthetic(_selectedItemId);
             if (result)
             {
@@ -209,7 +227,6 @@ namespace GFGGame
                 EventAgent.DispatchEvent(ConstMessage.CLOTHING_SYNTHETIC_SUCCESS);
                 EventAgent.DispatchEvent(ConstMessage.STUDIO_FILING_UPDATE);
             }
-
         }
 
         private void ListClothingItemRender(int index, GObject item)
@@ -223,11 +240,13 @@ namespace GFGGame
             listItem.m_txtName.text = itemName;
             listItem.m_imgOwned.visible = ItemDataManager.GetItemNum(itemId) > 0;
 
-            RedDotController.Instance.SetComRedDot(listItem.target, RedDotDataManager.Instance.CheckCanSynthetic(itemId), "", -18, 20);
+            RedDotController.Instance.SetComRedDot(listItem.target,
+                RedDotDataManager.Instance.CheckCanSynthetic(itemId), "", -18, 20);
             UI_ClothingListItem.ProxyEnd();
         }
 
         private EaseType ease = EaseType.CubicOut;
+
         private void UpdateRole(bool tween)
         {
             // 隐藏遮罩
@@ -250,6 +269,7 @@ namespace GFGGame
                 duration = 0;
                 _ui.m_hide.Play();
             }
+
             var dy = _ui.m_compHolder.target.height - 642;
             if (Array.IndexOf(HEAD_Y_ARR, type) >= 0)
             {
@@ -259,24 +279,28 @@ namespace GFGGame
             else if (Array.IndexOf(FA_XING_Y_ARR, type) >= 0)
             {
                 _compMover.target.TweenMoveY(FA_XING_Y + dy, duration).SetEase(ease);
-                _compMover.target.TweenScale(new Vector2(FA_XING_SCALE * rate, FA_XING_SCALE * rate), duration).SetEase(ease);
+                _compMover.target.TweenScale(new Vector2(FA_XING_SCALE * rate, FA_XING_SCALE * rate), duration)
+                    .SetEase(ease);
             }
             else if (Array.IndexOf(UPPER_BODY_Y_ARR, type) >= 0)
             {
                 _ui.m_compHolder.m_compHolder.m_compMover.target.TweenMoveY(UPPER_BODY_Y + dy, duration).SetEase(ease);
-                _compMover.target.TweenScale(new Vector2(UPPER_BODY_SCALE * rate, UPPER_BODY_SCALE * rate), duration).SetEase(ease);
+                _compMover.target.TweenScale(new Vector2(UPPER_BODY_SCALE * rate, UPPER_BODY_SCALE * rate), duration)
+                    .SetEase(ease);
             }
             else if (Array.IndexOf(LOWER_BODY_Y_ARR, type) >= 0)
             {
                 _ui.m_loaBg2.visible = true;
                 _compMover.target.TweenMoveY(LOWER_BODY_Y + dy, duration).SetEase(ease);
-                _compMover.target.TweenScale(new Vector2(LOWER_BODY_SCALE * rate, LOWER_BODY_SCALE * rate), duration).SetEase(ease);
+                _compMover.target.TweenScale(new Vector2(LOWER_BODY_SCALE * rate, LOWER_BODY_SCALE * rate), duration)
+                    .SetEase(ease);
             }
             else if (Array.IndexOf(SHOES_Y_ARR, type) >= 0)
             {
                 _ui.m_loaBg2.visible = true;
                 _compMover.target.TweenMoveY(SHOES_Y + dy, duration).SetEase(ease);
-                _compMover.target.TweenScale(new Vector2(SHOES_SCALE * rate, SHOES_SCALE * rate), duration).SetEase(ease);
+                _compMover.target.TweenScale(new Vector2(SHOES_SCALE * rate, SHOES_SCALE * rate), duration)
+                    .SetEase(ease);
             }
             else
             {
@@ -288,7 +312,6 @@ namespace GFGGame
             {
                 Timers.inst.StartCoroutine(DelayShow());
             }
-
         }
 
         /// <summary>
@@ -328,9 +351,11 @@ namespace GFGGame
                         {
                             index = i;
                         }
+
                         UI_ClothingListItem.ProxyEnd();
                     }
                 }
+
                 _ui.m_listClothing.ScrollToView(index);
                 _ui.m_listClothing.selectedIndex = index;
                 UpdateSelectedItemInfo(_ui.m_listClothing.GetChildAt(index) as GComponent, tween);
@@ -370,14 +395,18 @@ namespace GFGGame
                 Log.Error($"请为物品 {clothingSyntheticCfg.Id} 增加合成相关配置!");
                 return;
             }
-            ItemUtil.UpdateItemNeedNum(_ui.m_comCostCurrency, clothingSyntheticCfg.SyntheticCostID, clothingSyntheticCfg.SyntheticCostNum);
-            _materiarsOfSelectedItem = ItemUtil.CreateItemDataList(clothingSyntheticCfg.SyntheticMateriars.ToGfgGameItemParam());
+
+            ItemUtil.UpdateItemNeedNum(_ui.m_comCostCurrency, clothingSyntheticCfg.SyntheticCostID,
+                clothingSyntheticCfg.SyntheticCostNum);
+            _materiarsOfSelectedItem =
+                ItemUtil.CreateItemDataList(clothingSyntheticCfg.SyntheticMateriars.ToGfgGameItemParam());
             _ui.m_listMaterias.numItems = _materiarsOfSelectedItem.Count;
 
 
             _ui.m_listMaterias.selectedIndex = 0;
             _ui.m_btnProduction.grayed = ItemDataManager.GetItemNum(_selectedItemId) > 0;
         }
+
         private void RenderListMateriasItem(int index, GObject obj)
         {
             UI_MateriasListItem listItem = UI_MateriasListItem.Proxy(obj);
@@ -401,6 +430,7 @@ namespace GFGGame
             listItem.target.data = index;
             UI_MateriasListItem.ProxyEnd();
         }
+
         private void OnClickMateriasItemPlus(EventContext context)
         {
             GuideCfg cfg = CommonDataManager.Tables.TblGuideCfg.GetOrDefault(ConstGuideId.CLOTHING_SYNTHETIC);
@@ -408,11 +438,13 @@ namespace GFGGame
             {
                 return;
             }
+
             if (ItemDataManager.GetItemNum(_selectedItemId) > 0)
             {
                 PromptController.Instance.ShowFloatTextPrompt("该部件已制作完成");
                 return;
             }
+
             int index = (int)(context.data as GObject).data;
             _ui.m_listMaterias.selectedIndex = index;
             ItemData itemData = _materiarsOfSelectedItem[index];
@@ -421,7 +453,13 @@ namespace GFGGame
                 ET.Log.Error("OnClickMateriasItemPlus itemData is null");
                 return;
             }
-            object[] sourceDatas = new object[] { itemData.id, new object[] { typeof(ClothingSyntheticView).FullName, new object[] { _suitId, _selectedItemId } }, (int)itemData.num };
+
+            object[] sourceDatas = new object[]
+            {
+                itemData.id,
+                new object[] { typeof(ClothingSyntheticView).FullName, new object[] { _suitId, _selectedItemId } },
+                (int)itemData.num
+            };
             GoodsItemTipsController.ShowItemTips(itemData.id, sourceDatas);
         }
 
@@ -450,9 +488,10 @@ namespace GFGGame
         {
             GameController.GoBackToMainView();
         }
+
         private void CheckGuide(object param)
         {
-            if (GuideDataManager.IsGuideFinish(ConstGuideId.CLOTHING_SYNTHETIC) <= 0 
+            if (GuideDataManager.IsGuideFinish(ConstGuideId.CLOTHING_SYNTHETIC) <= 0
                 || (GuideDataManager.IsGuideFinish(ConstGuideId.CARD_HECHENG) <= 0 && IsGetSuit()))
             {
                 UpdateToCheckGuide(null);
@@ -462,12 +501,15 @@ namespace GFGGame
                 Timers.inst.Remove(CheckGuide);
             }
         }
+
         protected override void UpdateToCheckGuide(object param)
         {
             if (ViewManager.isViewOpen(typeof(GuideView).Name))
             {
-                (ViewManager.GetUIView(typeof(GuideView).Name) as GuideView).viewCom.visible = !ViewManager.isViewOpen(typeof(GetSuitItemVIew).Name);
+                (ViewManager.GetUIView(typeof(GuideView).Name) as GuideView).viewCom.visible =
+                    !ViewManager.isViewOpen(typeof(GetSuitItemVIew).Name);
             }
+
             if (!ViewManager.CheckIsTopView(this.viewCom)) return;
 
             int itemId = 10566;
@@ -484,29 +526,34 @@ namespace GFGGame
                 }
             }
 
-            bool guide = GuideController.TryGuide(_ui.m_listClothing, ConstGuideId.CLOTHING_SYNTHETIC, 3, "找到需要合成的物品。", itemIndex);
+            bool guide = GuideController.TryGuide(_ui.m_listClothing, ConstGuideId.CLOTHING_SYNTHETIC, 3, "找到需要合成的物品。",
+                itemIndex);
             if (guide) _ui.m_listClothing.ScrollToView(itemIndex);
 
-            GuideController.TryGuide(_ui.m_listMaterias, ConstGuideId.CLOTHING_SYNTHETIC, 4, "这里可以查看合成需要的材料,和材料的获取途径。", 0);
+            GuideController.TryGuide(_ui.m_listMaterias, ConstGuideId.CLOTHING_SYNTHETIC, 4, "这里可以查看合成需要的材料,和材料的获取途径。",
+                0);
             UI_MateriasListItem.ProxyEnd();
 
             GuideController.TryGuide(_ui.m_btnProduction, ConstGuideId.CLOTHING_SYNTHETIC, 5, "点击获得新的服饰。");
             GuideController.TryGuide(_ui.m_btnBack, ConstGuideId.CLOTHING_SYNTHETIC, 6, "获得新衣服啦,继续通关主线剧情吧。");
 
             GuideController.TryGuide(_ui.m_cardSyntheticBtn, ConstGuideId.CARD_HECHENG, 1, "领取卡牌。");
-            GuideController.TryGuide(null, ConstGuideId.CARD_HECHENG, 2, "获得套装卡牌后可进行技能书合成!", -1, true, _ui.target.height - 600);
+            GuideController.TryGuide(null, ConstGuideId.CARD_HECHENG, 2, "获得套装卡牌后可进行技能书合成!", -1, true,
+                _ui.target.height - 600);
             GuideController.TryGuide(_ui.m_cardSyntheticBtn, ConstGuideId.CARD_HECHENG, 3, "进入卡牌合成");
         }
+
         protected override void TryCompleteGuide()
         {
             base.TryCompleteGuide();
             GuideController.TryCompleteGuideIndex(ConstGuideId.CARD_HECHENG, 3);
             GuideController.TryCompleteGuide(ConstGuideId.CARD_HECHENG, 3);
         }
-            /// <summary>
-            /// 按照屏幕尺寸 更新遮罩的高度
-            /// </summary>
-            /// <returns></returns>
+
+        /// <summary>
+        /// 按照屏幕尺寸 更新遮罩的高度
+        /// </summary>
+        /// <returns></returns>
         private async Task UpdateMaskHeight()
         {
             await Task.Delay(5);
@@ -519,38 +566,58 @@ namespace GFGGame
         /// </summary>
         private void SetSoftMask()
         {
-            var handle = YooAssets.LoadAssetSync<Material>(ResPathUtil.GetMaterialPath("ImageGradient"));
-            Material m = handle.AssetObject as Material;
-            Material copyM = new Material(m.shader);
-            handle.Release();
-            copyM.CopyPropertiesFromMaterial(m);
-
-            _ui.m_loaBg2.material = copyM;
-            _ui.m_loaBg2.position = _ui.m_loaBg.position;
-            float startY = _ui.m_loaBg2Pos.position.y;
-            float endY = _ui.m_posHelper.position.y + ViewGlobal.GetRealTopOffset();
-            float rate = 1 - ((Mathf.Abs(startY - endY)) / _ui.m_loaBg2.height);
-            _ui.m_loaBg2.material.SetFloat("_MinHeight", rate - 0.01f);
-            _ui.m_loaBg2.material.SetFloat("_MaxHeight", rate - 0.03f);
+            string materialPath = ResPathUtil.GetMaterialPath("ImageGradient");
+            var operation = YooAssets.LoadAssetAsync<Material>(materialPath);
+            operation.Completed += (op) =>
+            {
+                if (op.Status == EOperationStatus.Succeed && _ui != null && _ui.m_loaBg2 != null)
+                {
+                    Material m = op.AssetObject as Material;
+                    if (m != null)
+                    {
+                        Material copyM = new Material(m.shader);
+                        copyM.CopyPropertiesFromMaterial(m);
+
+                        _ui.m_loaBg2.material = copyM;
+                        _ui.m_loaBg2.position = _ui.m_loaBg.position;
+
+                        float startY = _ui.m_loaBg2Pos.position.y;
+                        float endY = _ui.m_posHelper.position.y + ViewGlobal.GetRealTopOffset();
+                        float rate = 1 - Mathf.Abs(startY - endY) / _ui.m_loaBg2.height;
+
+                        _ui.m_loaBg2.material.SetFloat("_MinHeight", rate - 0.01f);
+                        _ui.m_loaBg2.material.SetFloat("_MaxHeight", rate - 0.03f);
+                    }
+                }
+                else
+                {
+                    Debug.LogError($"Failed to load material: {materialPath}");
+                }
+
+                // 记得释放资源
+                op.Release();
+            };
         }
 
         private void RemoveSoftMask()
         {
             _ui.m_loaBg2.material = null;
         }
+
         private void UpdateCardSyntheticBtn()
         {
-            int count =  CommonDataManager.Tables.TblItemCfg.GetGroup1BySuitId(_suitId).Count - 1;
+            int count = CommonDataManager.Tables.TblItemCfg.GetGroup1BySuitId(_suitId).Count - 1;
             ItemCfg item = CommonDataManager.Tables.TblItemCfg.GetGroup1BySuitId(_suitId)[count];
             _cardID = item.Id;
             int rewardStatus = DressUpMenuSuitDataManager.GetSuitSyntheticRewardStatus(_suitId);
 
-            if(item.SyntheticTimes > 0)
+            if (item.SyntheticTimes > 0)
             {
                 _ui.m_cardSyntheticBtn.visible = true;
-                if(rewardStatus == 1)
+                if (rewardStatus == 1)
                 {
-                    _ui.m_cardSyntheticBtn.icon = ResPathUtil.GetIconPath(CommonDataManager.Tables.TblItemCfg.GetOrDefault(_cardID).Res,"png");
+                    _ui.m_cardSyntheticBtn.icon =
+                        ResPathUtil.GetIconPath(CommonDataManager.Tables.TblItemCfg.GetOrDefault(_cardID).Res, "png");
                     RedDotController.Instance.SetComRedDot(_ui.m_cardSyntheticBtn, true, "", -18, 20);
                 }
                 else
@@ -563,7 +630,6 @@ namespace GFGGame
             {
                 _ui.m_cardSyntheticBtn.visible = false;
             }
-
         }
 
         private async void OnClickBtnCardSyntheticView()
@@ -571,7 +637,7 @@ namespace GFGGame
             int rewardStatus = DressUpMenuSuitDataManager.GetSuitSyntheticRewardStatus(_suitId);
             if (DressUpMenuSuitDataManager.CheckHaveSuit(_suitId))
             {
-                if(rewardStatus == 1)
+                if (rewardStatus == 1)
                 {
                     bool result = await ClothingSyntheticSProxy.GetSuitGetReward(_suitId);
                     UpdateCardSyntheticBtn();
@@ -579,22 +645,24 @@ namespace GFGGame
                 else
                 {
                     ViewManager.Show<CardSyntheticView>(new object[] { _cardID, _selectedItemId });
-                }  
+                }
             }
             else
             {
                 PromptController.Instance.ShowFloatTextPrompt("集齐套装后可领取卡牌奖励");
-            }  
+            }
         }
+
         private bool IsGetSuit()
         {
-            int count = 0;//套装当前拥有的部件数量
+            int count = 0; //套装当前拥有的部件数量
             int totalCount = 1;
             DressUpMenuSuitDataManager.GetSuitProgressBySuitId(_suitId, out count, out totalCount);
             if (count >= totalCount)
             {
                 return true;
             }
+
             return false;
         }
     }

+ 45 - 11
GameClient/Assets/Game/HotUpdate/Views/LuckyBox/LuckyBoxVideoView.cs

@@ -25,15 +25,36 @@ namespace GFGGame
         {
             FairyGUI.GRoot.inst.touchable = false;
             string path = ResPathUtil.GetUUIPrefabPath("UILuckyBox");
-            handle = YooAssets.LoadAssetSync<GameObject>(path);
-            _ui = handle.InstantiateSync(UGUIManager.Instance.desktop.transform);
+
+            // 异步加载UI预制体
+            var uiLoadOperation = YooAssets.LoadAssetAsync<GameObject>(path);
+            uiLoadOperation.Completed += (op) =>
+            {
+                if (op.Status == EOperationStatus.Succeed)
+                {
+                    handle = op;
+                    _ui = handle.InstantiateSync(UGUIManager.Instance.desktop.transform);
+                    InitializeUIComponents();
+                    LoadAndPlayVideo();
+                }
+                else
+                {
+                    Debug.LogError($"Failed to load UI prefab: {path}");
+                    FairyGUI.GRoot.inst.touchable = true; // 恢复触摸
+                }
+            };
+
+            _rewardList = _reward;
+        }
+
+        private void InitializeUIComponents()
+        {
             imgVideo = _ui.transform.Find("ImgVideo").GetComponent<RawImage>();
             Vector2 imgVideoSizeDelta = imgVideo.rectTransform.sizeDelta;
             imgVideoSizeDelta.y = Screen.height;
             imgVideoSizeDelta.x = (VideoWidth / VideoHeight) * imgVideoSizeDelta.y;
             imgVideo.rectTransform.sizeDelta = imgVideoSizeDelta;
 
-
             BtnSkipVertical = _ui.transform.Find("BtnSkipVertical").GetComponent<Button>();
             BtnSkipVertical.onClick.AddListener(OnClickrectBtnSkip);
             BtnSkipVertical.gameObject.SetActive(true);
@@ -42,15 +63,28 @@ namespace GFGGame
             videoPlayer.loopPointReached += OnVideoEnded;
             videoPlayer.prepareCompleted += OnVideoPrepared;
 
-            string assetPath = ResPathUtil.GetVideoPath("normalLucky");
-            videoHandle = YooAssets.LoadRawFileSync(assetPath);
-            videoPlayer.url = videoHandle.GetRawFilePath();
-            videoPlayer.Play();
-
             audioSource = _ui.transform.GetComponent<AudioSource>();
-            audioSource.Play();
+        }
 
-            _rewardList = _reward;
+        private void LoadAndPlayVideo()
+        {
+            string assetPath = ResPathUtil.GetVideoPath("normalLucky");
+            var videoLoadOperation = YooAssets.LoadRawFileAsync(assetPath);
+            videoLoadOperation.Completed += (op) =>
+            {
+                if (op.Status == EOperationStatus.Succeed)
+                {
+                    videoHandle = op;
+                    videoPlayer.url = videoHandle.GetRawFilePath();
+                    videoPlayer.Play();
+                    audioSource.Play();
+                }
+                else
+                {
+                    Debug.LogError($"Failed to load video: {assetPath}");
+                    // 可以在这里处理视频加载失败的情况
+                }
+            };
         }
 
         private void OnVideoPrepared(VideoPlayer source)
@@ -136,4 +170,4 @@ namespace GFGGame
             ViewManager.Show<LuckyBoxBonusShowView>(_rewardList);
         }
     }
-}
+}

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Views/MainStory/StoryDialogView.cs

@@ -552,7 +552,7 @@ namespace GFGGame
             if(_speedAutoPlay == 1 || !_autoPlay)
             {
                 // 如果配置了语音,读取语音
-                VoiceManager.Instance.LoadRes(ResPathUtil.GetVoicePath(storyDialogCfg.VoiceRes));
+                VoiceManager.Instance.LoadResAsync(ResPathUtil.GetVoicePath(storyDialogCfg.VoiceRes));
             }
 
             _wordList = Regex.Split(words, "&&");

+ 2 - 2
GameClient/GameClient.sln.DotSettings.user

@@ -1,13 +1,13 @@
 <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AActivator_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F3789ee403a53437cbb6b5d9ab6311f51573620_003F56_003F27c54aae_003FActivator_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AActivator_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F695d1cc93cca45069c528c15c9fdd7493e2800_003F20_003F3a0a5fc0_003FActivator_002Ecs_002Fz_003A2_002D1/@EntryIndexedValue">ForceIncluded</s:String>
-	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssetDatabase_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F8d4895b259be41298a685a0c9b42357576b400_003F9d_003Fa1138e9c_003FAssetDatabase_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ABuildResult_002Ecs_002Fl_003AC_0021_003FUsers_003Fadmin_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F8d4895b259be41298a685a0c9b42357576b400_003Fa9_003Fbef924de_003FBuildResult_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEditorUtility_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F8d4895b259be41298a685a0c9b42357576b400_003F3f_003Fa805acc1_003FEditorUtility_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFile_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F695d1cc93cca45069c528c15c9fdd7493e2800_003Fc3_003F83d8926e_003FFile_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIEnumerator_00601_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F3789ee403a53437cbb6b5d9ab6311f51573620_003F4e_003Faad6c3b2_003FIEnumerator_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMemberInfo_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F9c2967a135e648bdb993c5397a44991b573620_003F69_003F4bdfd6bb_003FMemberInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMethodInfo_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb18a8b3398e74bca86895881dd02956c573648_003F94_003Fb7912d02_003FMethodInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMonoBehaviour_002Ecs_002Fl_003AC_0021_003FUsers_003Fadmin_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F683a2b31bf9142429c44f02c75dbc6c913ce00_003F2e_003F343a2d95_003FMonoBehaviour_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMonoBehaviour_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F683a2b31bf9142429c44f02c75dbc6c913ce00_003F2e_003F343a2d95_003FMonoBehaviour_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANotImplementedException_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F695d1cc93cca45069c528c15c9fdd7493e2800_003F57_003F429a851a_003FNotImplementedException_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AObject_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F683a2b31bf9142429c44f02c75dbc6c913ce00_003F6d_003Fb884eed9_003FObject_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
@@ -21,5 +21,5 @@
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATask_00601_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F3789ee403a53437cbb6b5d9ab6311f51573620_003Fa4_003F44ebb4e8_003FTask_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATask_00601_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F695d1cc93cca45069c528c15c9fdd7493e2800_003Fba_003Fd47fe324_003FTask_00601_002Ecs_002Fz_003A2_002D1/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AVector3_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F683a2b31bf9142429c44f02c75dbc6c913ce00_003F1a_003F53ed0524_003FVector3_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
-	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AWebSocket_002Ecs_002Fl_003AC_0021_003FUsers_003Fss510_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5a2009c85b134970925993880e2ecb2e29fa00_003Fc4_003F1c942964_003FWebSocket_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AWebSocketState_002Ecs_002Fl_003AC_0021_003FUsers_003Fadmin_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fc0c221501f3a41f8ac0af9d6a9dc9ff335fd90_003Fb5_003F7e198be5_003FWebSocketState_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	</wpf:ResourceDictionary>