浏览代码

添加一些红点逻辑

lzx 1 天之前
父节点
当前提交
b3d7f8ec94
共有 48 个文件被更改,包括 2787 次插入30 次删除
  1. 93 0
      Assets/Res/Config/ReddotConfig.json
  2. 7 0
      Assets/Res/Config/ReddotConfig.json.meta
  3. 333 0
      Assets/Res/UI/AppBarPanel/AppBarPanel.prefab
  4. 107 0
      Assets/Res/UI/HeroInformainPanel/CaveMainPanel.prefab
  5. 103 0
      Assets/Res/UI/HeroInformainPanel/HeroInformationPanel.prefab
  6. 123 0
      Assets/Res/UI/MainHeroPanel/BtnFaBaoWidget.prefab
  7. 119 0
      Assets/Res/UI/MainHeroPanel/SelectFaBaoPanel.prefab
  8. 8 0
      Assets/Res/UI/RedDot.meta
  9. 167 0
      Assets/Res/UI/RedDot/RedDotCom.prefab
  10. 7 0
      Assets/Res/UI/RedDot/RedDotCom.prefab.meta
  11. 167 0
      Assets/Res/UI/RedDot/RedDotComType01.prefab
  12. 7 0
      Assets/Res/UI/RedDot/RedDotComType01.prefab.meta
  13. 107 0
      Assets/Res/UI/ShopPanel/ShopBoxWidget.prefab
  14. 131 0
      Assets/Res/UI/SkillSelectPanel/SkillWidget.prefab
  15. 2 0
      Assets/Scripts/Core/Event/Event/CustomEventType.cs
  16. 4 0
      Assets/Scripts/Core/UI/Core/UIPanel.cs
  17. 90 0
      Assets/Scripts/GameData/ExcelConfig/ReddotConfig.cs
  18. 11 0
      Assets/Scripts/GameData/ExcelConfig/ReddotConfig.cs.meta
  19. 2 1
      Assets/Scripts/GameLogic/Bag/BagController.cs
  20. 4 3
      Assets/Scripts/GameLogic/Hero/HeroInfo.cs
  21. 9 1
      Assets/Scripts/GameLogic/Player/AccountFileInfo.cs
  22. 8 0
      Assets/Scripts/GameLogic/RedDot.meta
  23. 161 0
      Assets/Scripts/GameLogic/RedDot/RedDotData.cs
  24. 11 0
      Assets/Scripts/GameLogic/RedDot/RedDotData.cs.meta
  25. 123 0
      Assets/Scripts/GameLogic/RedDot/RedDotGroupData.cs
  26. 11 0
      Assets/Scripts/GameLogic/RedDot/RedDotGroupData.cs.meta
  27. 363 0
      Assets/Scripts/GameLogic/RedDot/RedDotManager.cs
  28. 11 0
      Assets/Scripts/GameLogic/RedDot/RedDotManager.cs.meta
  29. 1 0
      Assets/Scripts/GameUI/GameApplction.cs
  30. 2 0
      Assets/Scripts/GameUI/UI/AppBarPanel/AppBarPanel.cs
  31. 2 0
      Assets/Scripts/GameUI/UI/CombatPanel/SkillWidget.cs
  32. 11 0
      Assets/Scripts/GameUI/UI/CombatPanel/SkillWidgetData.cs
  33. 2 0
      Assets/Scripts/GameUI/UI/MainHeroPnael/BtnFaBaoWidget.cs
  34. 14 3
      Assets/Scripts/GameUI/UI/MainHeroPnael/BtnFaBaoWidgetData.cs
  35. 71 22
      Assets/Scripts/GameUI/UI/MainHeroPnael/MainHeroPanel.cs
  36. 6 0
      Assets/Scripts/GameUI/UI/MainHeroPnael/SelectFaBaoPanel.cs
  37. 11 0
      Assets/Scripts/GameUI/UI/MainHeroPnael/SelectFaBaoPanelData.cs
  38. 8 0
      Assets/Scripts/GameUI/UI/RedDot.meta
  39. 32 0
      Assets/Scripts/GameUI/UI/RedDot/RedDotCom.cs
  40. 11 0
      Assets/Scripts/GameUI/UI/RedDot/RedDotCom.cs.meta
  41. 34 0
      Assets/Scripts/GameUI/UI/RedDot/RedDotComData.cs
  42. 11 0
      Assets/Scripts/GameUI/UI/RedDot/RedDotComData.cs.meta
  43. 162 0
      Assets/Scripts/GameUI/UI/RedDot/RedDotWidget.cs
  44. 11 0
      Assets/Scripts/GameUI/UI/RedDot/RedDotWidget.cs.meta
  45. 98 0
      Assets/Scripts/GameUI/UI/RedDot/RedDotWidgetType01.cs
  46. 11 0
      Assets/Scripts/GameUI/UI/RedDot/RedDotWidgetType01.cs.meta
  47. 0 0
      Assets/StreamingAssets/assetConfig.txt
  48. 二进制
      Excel2Json/Excel/Reddot.xlsx

+ 93 - 0
Assets/Res/Config/ReddotConfig.json

@@ -0,0 +1,93 @@
+{
+  "configList": [
+    {
+      "ID": 1,
+      "GroupID": 1,
+      "EnableForTarget": 0,
+      "Layer": 1,
+      "Enable": 1,
+      "Visible": 1
+    },
+    {
+      "ID": 2,
+      "GroupID": 2,
+      "EnableForTarget": 0,
+      "Layer": 1,
+      "Enable": 1,
+      "Visible": 1
+    },
+    {
+      "ID": 3,
+      "GroupID": 3,
+      "LinkGroupID": [
+        4
+      ],
+      "EnableForTarget": 0,
+      "Layer": 1,
+      "Enable": 1,
+      "Visible": 1
+    },
+    {
+      "ID": 4,
+      "GroupID": 4,
+      "LinkGroupID": [
+        5
+      ],
+      "EnableForTarget": 0,
+      "Layer": 1,
+      "Enable": 1,
+      "Visible": 1
+    },
+    {
+      "ID": 5,
+      "GroupID": 5,
+      "EnableForTarget": 0,
+      "Layer": 1,
+      "Enable": 1,
+      "Visible": 1
+    },
+    {
+      "ID": 6,
+      "GroupID": 6,
+      "LinkGroupID": [
+        7
+      ],
+      "EnableForTarget": 0,
+      "Layer": 1,
+      "Enable": 1,
+      "Visible": 1
+    },
+    {
+      "ID": 7,
+      "GroupID": 7,
+      "EnableForTarget": 0,
+      "Layer": 1,
+      "Enable": 1,
+      "Visible": 1
+    },
+    {
+      "ID": 8,
+      "GroupID": 8,
+      "EnableForTarget": 0,
+      "Layer": 1,
+      "Enable": 1,
+      "Visible": 1
+    },
+    {
+      "ID": 9,
+      "GroupID": 9,
+      "EnableForTarget": 0,
+      "Layer": 1,
+      "Enable": 1,
+      "Visible": 1
+    },
+    {
+      "ID": 10,
+      "GroupID": 10,
+      "EnableForTarget": 0,
+      "Layer": 1,
+      "Enable": 1,
+      "Visible": 1
+    }
+  ]
+}

+ 7 - 0
Assets/Res/Config/ReddotConfig.json.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: CH1MvHj7VC/5Ern+BKLRkZ+DtINcLZGaHw0K2MmUBucK4zbCmxLJ2TkDWbgr
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 333 - 0
Assets/Res/UI/AppBarPanel/AppBarPanel.prefab

@@ -2689,6 +2689,7 @@ RectTransform:
   - {fileID: 2325163952557293044}
   - {fileID: 7577657693914423043}
   - {fileID: 4454644270139638089}
+  - {fileID: 3425000278206725046}
   m_Father: {fileID: 8996942401071482941}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
@@ -4028,6 +4029,7 @@ RectTransform:
   - {fileID: 676438997544141553}
   - {fileID: 2308591826730491630}
   - {fileID: 3845805147842114099}
+  - {fileID: 809197599320379405}
   m_Father: {fileID: 8996942401071482941}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
@@ -4342,6 +4344,7 @@ RectTransform:
   - {fileID: 6670433924809935015}
   - {fileID: 1896955699113511098}
   - {fileID: 8052324487370643166}
+  - {fileID: 2458206289517435795}
   m_Father: {fileID: 8996942401071482941}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
@@ -5207,3 +5210,333 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   audioName: ui_button
+--- !u!1001 &246932658548870775
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 5168510115939503355}
+    m_Modifications:
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Pivot.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Pivot.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 3.9634461
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -2.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: -10.2
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2789586574518551789, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3073202858500431554, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Name
+      value: RedDotCom (1)
+      objectReference: {fileID: 0}
+    - target: {fileID: 4409762847385456447, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: RedDotConfigId
+      value: 1
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+--- !u!224 &2458206289517435795 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+  m_PrefabInstance: {fileID: 246932658548870775}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1001 &1078614249670897234
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 4450492010835521418}
+    m_Modifications:
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Pivot.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Pivot.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 3.9634461
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: -0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -6.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: -10.2
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2789586574518551789, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3073202858500431554, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Name
+      value: RedDotCom (1)
+      objectReference: {fileID: 0}
+    - target: {fileID: 4409762847385456447, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: RedDotConfigId
+      value: 6
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+--- !u!224 &3425000278206725046 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+  m_PrefabInstance: {fileID: 1078614249670897234}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1001 &3047479565199459817
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 8909259757328014195}
+    m_Modifications:
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Pivot.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Pivot.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 3.9634461
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: -10.2
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2789586574518551789, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3073202858500431554, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Name
+      value: RedDotCom
+      objectReference: {fileID: 0}
+    - target: {fileID: 4409762847385456447, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: RedDotConfigId
+      value: 3
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+--- !u!224 &809197599320379405 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+  m_PrefabInstance: {fileID: 3047479565199459817}
+  m_PrefabAsset: {fileID: 0}

+ 107 - 0
Assets/Res/UI/HeroInformainPanel/CaveMainPanel.prefab

@@ -287,6 +287,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 4847353937859667548}
+  - {fileID: 6720174315084100051}
   m_Father: {fileID: 3122246251225988632}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
@@ -920,3 +921,109 @@ MonoBehaviour:
   m_OnValueChanged:
     m_PersistentCalls:
       m_Calls: []
+--- !u!1001 &8949444685431333943
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 2074141334421181977}
+    m_Modifications:
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Pivot.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Pivot.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 3.9634461
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -33.4
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: -10.4
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3073202858500431554, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Name
+      value: RedDotCom
+      objectReference: {fileID: 0}
+    - target: {fileID: 4409762847385456447, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: RedDotConfigId
+      value: 4
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+--- !u!224 &6720174315084100051 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+  m_PrefabInstance: {fileID: 8949444685431333943}
+  m_PrefabAsset: {fileID: 0}

+ 103 - 0
Assets/Res/UI/HeroInformainPanel/HeroInformationPanel.prefab

@@ -3401,6 +3401,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 1850109316740755711}
+  - {fileID: 2987659707157567813}
   m_Father: {fileID: 2859865283014944201}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
@@ -5405,6 +5406,108 @@ MonoBehaviour:
     - gameObject: {fileID: 5361362261105901452}
     - gameObject: {fileID: 3729610520836463702}
   isAssetBundle: 1
+--- !u!1001 &578227418006883489
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 5496005517712940668}
+    m_Modifications:
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Pivot.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Pivot.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 3.9634461
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -24.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: -23.6
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3073202858500431554, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Name
+      value: RedDotCom
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+--- !u!224 &2987659707157567813 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+  m_PrefabInstance: {fileID: 578227418006883489}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1001 &2752137599948016585
 PrefabInstance:
   m_ObjectHideFlags: 0

+ 123 - 0
Assets/Res/UI/MainHeroPanel/BtnFaBaoWidget.prefab

@@ -111,6 +111,7 @@ RectTransform:
   - {fileID: 5306337421226145797}
   - {fileID: 1790657340758011659}
   - {fileID: 4530474433833993076}
+  - {fileID: 7303714903184410405}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
@@ -192,6 +193,11 @@ MonoBehaviour:
     isAssetBundle: 0
     isList: 0
     ListCollectorDatas: []
+  - key: RedDotComType01
+    gameObject: {fileID: 1103487925169094395}
+    isAssetBundle: 0
+    isList: 0
+    ListCollectorDatas: []
   isAssetBundle: 1
 --- !u!1 &7055209374934089222
 GameObject:
@@ -327,3 +333,120 @@ MonoBehaviour:
   topOrLeftColor: {r: 1, g: 1, b: 1, a: 1}
   bottomOrRightColor: {r: 0, g: 0, b: 0, a: 1}
   direction: 0
+--- !u!1001 &4912310539317039809
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 5438064346362230487}
+    m_Modifications:
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_Pivot.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_Pivot.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 3.9634461
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -23.6
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: -19
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3073202858500431554, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_Name
+      value: RedDotComType01
+      objectReference: {fileID: 0}
+    - target: {fileID: 5439336813456305210, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: RedDotConfigId
+      value: 9
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+--- !u!114 &1103487925169094395 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 5439336813456305210, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+  m_PrefabInstance: {fileID: 4912310539317039809}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8faa9321e9f040f42aa76599adb76143, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!224 &7303714903184410405 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+  m_PrefabInstance: {fileID: 4912310539317039809}
+  m_PrefabAsset: {fileID: 0}

+ 119 - 0
Assets/Res/UI/MainHeroPanel/SelectFaBaoPanel.prefab

@@ -4403,6 +4403,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 4856613907254511130}
+  - {fileID: 3004414233910789160}
   m_Father: {fileID: 7973274776071248274}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
@@ -4811,6 +4812,11 @@ MonoBehaviour:
     isAssetBundle: 0
     isList: 0
     ListCollectorDatas: []
+  - key: RedDotComType01
+    gameObject: {fileID: 4881251883962547702}
+    isAssetBundle: 0
+    isList: 0
+    ListCollectorDatas: []
   isAssetBundle: 0
 --- !u!1 &9056821549282551153
 GameObject:
@@ -5058,6 +5064,119 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   m_HorizontalFit: 2
   m_VerticalFit: 0
+--- !u!1001 &631023719020466636
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 4734313281934727207}
+    m_Modifications:
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 3.9634461
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -21.4
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: -14.3
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3073202858500431554, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_Name
+      value: RedDotComType01
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+--- !u!224 &3004414233910789160 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+  m_PrefabInstance: {fileID: 631023719020466636}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &4881251883962547702 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 5439336813456305210, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+  m_PrefabInstance: {fileID: 631023719020466636}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8faa9321e9f040f42aa76599adb76143, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1001 &2495980306006119692
 PrefabInstance:
   m_ObjectHideFlags: 0

+ 8 - 0
Assets/Res/UI/RedDot.meta

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

+ 167 - 0
Assets/Res/UI/RedDot/RedDotCom.prefab

@@ -0,0 +1,167 @@
+%YAML 1.1
+%TAG !u! tag:yousandi.cn,2023:
+--- !u!1 &2789586574518551789
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 7
+  m_Component:
+  - component: {fileID: 5697877519372400105}
+  - component: {fileID: 4379187507766417703}
+  - component: {fileID: 7580881510408378771}
+  m_Layer: 0
+  m_HasEditorInfo: 1
+  m_Name: RedImage
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5697877519372400105
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2789586574518551789}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2409437247996614116}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 25, y: 25}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4379187507766417703
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2789586574518551789}
+  m_CullTransparentMesh: 1
+--- !u!114 &7580881510408378771
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2789586574518551789}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3c247620ca3a1fd4ab2a2f3a5b287e07, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 0, b: 0, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+  _icon_name: dec_ty_yuan
+  isNotLoadDeftIcon: 0
+  CurrSpriteAtlas: {fileID: 100100200, guid: b02f6b41a7a9fa8458f4226ab6b3ea47, type: 3}
+  packInfo:
+    packName: tongyong
+    packgJsonPath: /Art/UIAssets/TextrueJson\tongyong.txt
+    packgSpritePath: Assets/Res/UIAtlas/tongyong.spriteatlasv2
+    lasetJsonGUID: d570df61e5e429dc2d9169bbaecec167
+  imageH: 25
+  useGradient: 0
+  topOrLeftColor: {r: 1, g: 1, b: 1, a: 1}
+  bottomOrRightColor: {r: 0, g: 0, b: 0, a: 1}
+  direction: 0
+--- !u!1 &3073202858500431554
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 7
+  m_Component:
+  - component: {fileID: 2409437247996614116}
+  - component: {fileID: 3726314926250365657}
+  - component: {fileID: 4409762847385456447}
+  m_Layer: 0
+  m_HasEditorInfo: 1
+  m_Name: RedDotCom
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2409437247996614116
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3073202858500431554}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 3.9634461}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5697877519372400105}
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &3726314926250365657
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3073202858500431554}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4810a0857c909354fa00c3aafdeac753, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  data:
+  - key: RedDotWidget
+    gameObject: {fileID: 4409762847385456447}
+    isAssetBundle: 0
+    isList: 0
+    ListCollectorDatas: []
+  isAssetBundle: 0
+--- !u!114 &4409762847385456447
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3073202858500431554}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 32beee247380bac4ab2f7d6babd84d3d, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  RedDotConfigId: 0
+  GroupId: 0
+  Layer: 0
+  LinkGroupIds: 
+  UnlockId: 0
+  RedDotRoot: {fileID: 2789586574518551789}

+ 7 - 0
Assets/Res/UI/RedDot/RedDotCom.prefab.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: Xn1NsX+tAXwlg3VIYTCr7XJOKd0qLQPpIHeC6TxnxLRF6mL97B8V3T4nQyws
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 167 - 0
Assets/Res/UI/RedDot/RedDotComType01.prefab

@@ -0,0 +1,167 @@
+%YAML 1.1
+%TAG !u! tag:yousandi.cn,2023:
+--- !u!1 &2789586574518551789
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 7
+  m_Component:
+  - component: {fileID: 5697877519372400105}
+  - component: {fileID: 4379187507766417703}
+  - component: {fileID: 4639458729338371754}
+  m_Layer: 0
+  m_HasEditorInfo: 1
+  m_Name: RedImage
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &5697877519372400105
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2789586574518551789}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2409437247996614116}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 25, y: 25}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4379187507766417703
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2789586574518551789}
+  m_CullTransparentMesh: 1
+--- !u!114 &4639458729338371754
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2789586574518551789}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3c247620ca3a1fd4ab2a2f3a5b287e07, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 0, b: 0, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+  _icon_name: dec_ty_yuan
+  isNotLoadDeftIcon: 0
+  CurrSpriteAtlas: {fileID: 100100200, guid: b02f6b41a7a9fa8458f4226ab6b3ea47, type: 3}
+  packInfo:
+    packName: tongyong
+    packgJsonPath: /Art/UIAssets/TextrueJson\tongyong.txt
+    packgSpritePath: Assets/Res/UIAtlas/tongyong.spriteatlasv2
+    lasetJsonGUID: d570df61e5e429dc2d9169bbaecec167
+  imageH: 25
+  useGradient: 0
+  topOrLeftColor: {r: 1, g: 1, b: 1, a: 1}
+  bottomOrRightColor: {r: 0, g: 0, b: 0, a: 1}
+  direction: 0
+--- !u!1 &3073202858500431554
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 7
+  m_Component:
+  - component: {fileID: 2409437247996614116}
+  - component: {fileID: 3726314926250365657}
+  - component: {fileID: 5439336813456305210}
+  m_Layer: 0
+  m_HasEditorInfo: 1
+  m_Name: RedDotComType01
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2409437247996614116
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3073202858500431554}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 3.9634461}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 5697877519372400105}
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &3726314926250365657
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3073202858500431554}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4810a0857c909354fa00c3aafdeac753, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  data:
+  - key: RedDotWidget
+    gameObject: {fileID: 0}
+    isAssetBundle: 0
+    isList: 0
+    ListCollectorDatas: []
+  isAssetBundle: 1
+--- !u!114 &5439336813456305210
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3073202858500431554}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8faa9321e9f040f42aa76599adb76143, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  RedDotConfigId: 0
+  GroupId: 0
+  Layer: 0
+  LinkGroupIds: 
+  UnlockId: 0
+  RedDotRoot: {fileID: 2789586574518551789}

+ 7 - 0
Assets/Res/UI/RedDot/RedDotComType01.prefab.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: Xnkd4S+lASgAPI4m3Dud1UyYhF17MvCsxm1jMFHf3n1pkoefNG4BFZjb4Cqo
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 107 - 0
Assets/Res/UI/ShopPanel/ShopBoxWidget.prefab

@@ -4231,6 +4231,7 @@ RectTransform:
   - {fileID: 6799878124488888821}
   - {fileID: 1869103431569688402}
   - {fileID: 7738172104796716893}
+  - {fileID: 1936613669831686829}
   m_Father: {fileID: 7683316278918720752}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
@@ -4806,3 +4807,109 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   id: 10238
+--- !u!1001 &4291985102807068489
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 3207466882744590469}
+    m_Modifications:
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Pivot.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Pivot.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 3.9634461
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0.000015258789
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3073202858500431554, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: m_Name
+      value: RedDotCom
+      objectReference: {fileID: 0}
+    - target: {fileID: 4409762847385456447, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+      propertyPath: RedDotConfigId
+      value: 7
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+--- !u!224 &1936613669831686829 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2409437247996614116, guid: a7b4e0b7d50d5e34d98e74c6d3098741, type: 3}
+  m_PrefabInstance: {fileID: 4291985102807068489}
+  m_PrefabAsset: {fileID: 0}

+ 131 - 0
Assets/Res/UI/SkillSelectPanel/SkillWidget.prefab

@@ -240,6 +240,15 @@ MonoBehaviour:
     - gameObject: {fileID: 1541203404502475801}
     - gameObject: {fileID: 7344344513877532038}
     - gameObject: {fileID: 3002968146783622268}
+  - key: redDotComType01
+    gameObject: {fileID: 3298855896114479450}
+    isAssetBundle: 0
+    isList: 0
+    ListCollectorDatas:
+    - gameObject: {fileID: 7739541666801086000}
+    - gameObject: {fileID: 1541203404502475801}
+    - gameObject: {fileID: 7344344513877532038}
+    - gameObject: {fileID: 3002968146783622268}
   isAssetBundle: 1
 --- !u!114 &2107088918873752165
 MonoBehaviour:
@@ -1030,6 +1039,7 @@ RectTransform:
   - {fileID: 8005189183441926883}
   - {fileID: 4933297852123740916}
   - {fileID: 7716599432344587041}
+  - {fileID: 5173371119107913860}
   m_Father: {fileID: 8817738242950991828}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
@@ -1670,3 +1680,124 @@ MonoBehaviour:
   topOrLeftColor: {r: 1, g: 1, b: 1, a: 1}
   bottomOrRightColor: {r: 0, g: 0, b: 0, a: 1}
   direction: 0
+--- !u!1001 &7402664304662539616
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 7578534503293312128}
+    m_Modifications:
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_Pivot.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_Pivot.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 3.9634461
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -25.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: -22.2
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2789586574518551789, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3073202858500431554, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: m_Name
+      value: RedDotComType01
+      objectReference: {fileID: 0}
+    - target: {fileID: 5439336813456305210, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+      propertyPath: RedDotConfigId
+      value: 2
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+--- !u!114 &3298855896114479450 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 5439336813456305210, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+  m_PrefabInstance: {fileID: 7402664304662539616}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8faa9321e9f040f42aa76599adb76143, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!224 &5173371119107913860 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2409437247996614116, guid: a32d58bc31be04846bd2ff420b56c70c, type: 3}
+  m_PrefabInstance: {fileID: 7402664304662539616}
+  m_PrefabAsset: {fileID: 0}

+ 2 - 0
Assets/Scripts/Core/Event/Event/CustomEventType.cs

@@ -145,6 +145,8 @@ namespace Fort23.Core
       /// </summary>
       AlterName,
       DialoguePanelOpen,
+      RedDotUpdate,
+      RedDotChangeState
 
     }
 }

+ 4 - 0
Assets/Scripts/Core/UI/Core/UIPanel.cs

@@ -307,6 +307,10 @@ namespace Fort23.Mono
                 if (!UIManager.Instance.popUIPanels.Contains(this))
                     UIManager.Instance.popUIPanels.Add(this);
             }
+            
+            
+            
+       
         }
 
         /// <summary>

+ 90 - 0
Assets/Scripts/GameData/ExcelConfig/ReddotConfig.cs

@@ -0,0 +1,90 @@
+// Auto Generated Code By excel2json
+// Generate From Excel\Reddot.xlsx. SheetName: ReddotConfig
+
+using System;
+using Fort23.GameData;
+
+namespace Excel2Json
+{
+	[Config(prefab = "ReddotConfig.json")]
+	public partial class ReddotConfigHolder : ConfigHolder<ReddotConfig>
	{
+	}
+
+
+	[Serializable]
+	public struct ReddotConfig : IConfig
	{
+		public int GetID() {return ID;} 
+		/// <summary>
+		///ID
+		/// </summary>
+#if !COMBAT_SERVER
+		public int ID;
+#else
+		public int ID{ set; get; }
+#endif
+		
+
+		/// <summary>
+		///红点组ID
+		/// </summary>
+#if !COMBAT_SERVER
+		public int GroupID;
+#else
+		public int GroupID{ set; get; }
+#endif
+		
+
+		/// <summary>
+		///关联组ID 填写与本组相关联的组ID
+		/// </summary>
+#if !COMBAT_SERVER
+		public int[] LinkGroupID;
+#else
+		public int[] LinkGroupID{ set; get; }
+#endif
+		
+
+		/// <summary>
+		///激活来自指定
+		/// </summary>
+#if !COMBAT_SERVER
+		public int EnableForTarget;
+#else
+		public int EnableForTarget{ set; get; }
+#endif
+		
+
+		/// <summary>
+		///红点层级数
+		/// </summary>
+#if !COMBAT_SERVER
+		public int Layer;
+#else
+		public int Layer{ set; get; }
+#endif
+		
+
+		/// <summary>
+		///红点序列
+		/// </summary>
+#if !COMBAT_SERVER
+		public int Enable;
+#else
+		public int Enable{ set; get; }
+#endif
+		
+
+		/// <summary>
+		///是否点了暂时消失
+		/// </summary>
+#if !COMBAT_SERVER
+		public int Visible;
+#else
+		public int Visible{ set; get; }
+#endif
+		
+
+	}
+
+}
+// End of Auto Generated Code

+ 11 - 0
Assets/Scripts/GameData/ExcelConfig/ReddotConfig.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: D3IcsCOpAipiW7JAqzzKs3QqPn/TeOC7rbndwQ1Vf0hvNqgO5KtySGZBMfsj
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 2 - 1
Assets/Scripts/GameLogic/Bag/BagController.cs

@@ -247,7 +247,7 @@ namespace GameLogic.Bag
             EventManager.Instance.Dispatch(CustomEventType.AddItem,
                 new ItemUpdateData() { ItemInfo = item, Count = (int)count });
             AccountFileInfo.Instance.SaveItemData(item);
-
+            RedDotManager.Instance.AllRedDotUpDate();
             return true;
         }
 
@@ -436,6 +436,7 @@ namespace GameLogic.Bag
 
             EventManager.Instance.Dispatch(CustomEventType.ItemUpdate, new ItemUpdateData() { ItemInfo = item });
             AccountFileInfo.Instance.SaveItemData(item);
+            RedDotManager.Instance.AllRedDotUpDate();
             return true;
         }
 

+ 4 - 3
Assets/Scripts/GameLogic/Hero/HeroInfo.cs

@@ -13,8 +13,8 @@ namespace GameLogic.Hero
     {
         public int id;
         public float value;
-
     }
+
     public class HeroInfo : CombatHeroInfo
     {
         public AccountFileInfo.HeroData heroData;
@@ -24,7 +24,7 @@ namespace GameLogic.Hero
         private Map<HeroAttributeType, float> attributeBlValue = new Map<HeroAttributeType, float>();
 
         public Map<int, float> daolvBlMap = new Map<int, float>();
-        
+
         public List<DaoLVBiData> daolvBl = new List<DaoLVBiData>();
 
         // public List<int> ImmortalBond = new List<int>();
@@ -81,6 +81,7 @@ namespace GameLogic.Hero
             InitHero(heroData);
             PlayerManager.Instance.SaveHeroData(this);
             EventManager.Instance.Dispatch(CustomEventType.JingJieUpgrade, null);
+            RedDotManager.Instance.AllRedDotUpDate();
             return this;
         }
 
@@ -117,7 +118,7 @@ namespace GameLogic.Hero
                     DaoLVBiData daoLvBiData;
                     if (daolvSkill.type == 1)
                     {
-                         daoLvBiData = daolvBl.FirstOrDefault(d => d.id == i1);
+                        daoLvBiData = daolvBl.FirstOrDefault(d => d.id == i1);
                         if (daoLvBiData != null)
                         {
                             daoLvBiData = new DaoLVBiData();

+ 9 - 1
Assets/Scripts/GameLogic/Player/AccountFileInfo.cs

@@ -128,6 +128,8 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
 
         //招募数据
         public List<SummonData> SummonDatas = new List<SummonData>();
+        
+        public List<RedDot> RedDotDatas = new List<RedDot>();
 
 
         /// <summary>
@@ -151,8 +153,14 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
         public List<int> phaseKey = new List<int>();
         public List<int> phaseValue = new List<int>();
     }
+    [System.Serializable]
+    public class RedDot
+    {
+        public int id;
+        public List<string> Params = new List<string>();
+    }
 
-
+    [System.Serializable]
     public class QiankundaiData
     {
         public int id;

+ 8 - 0
Assets/Scripts/GameLogic/RedDot.meta

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

+ 161 - 0
Assets/Scripts/GameLogic/RedDot/RedDotData.cs

@@ -0,0 +1,161 @@
+using System;
+using System.Collections.Generic;
+using Excel2Json;
+using Fort23.Core;
+using Fort23.UTool;
+using GameLogic.Hero;
+using Utility;
+
+namespace Fort23.Mono
+{
+    public class RedDotData
+    {
+        /// <summary>
+        /// 具体Id
+        /// </summary>
+        public int Id;
+
+        /// <summary>
+        /// 红点组ID
+        /// </summary>
+        public int GroupId;
+
+        /// <summary>
+        /// 当前红点所属于层级 1级为最上层 
+        /// </summary>
+        public int Layer;
+
+        /// <summary>
+        /// 是否已经激活
+        /// </summary>
+        private bool _isEnable;
+
+        public bool isEnable
+        {
+            get { return _isEnable; }
+            set { _isEnable = value; }
+        }
+
+
+        public int EnableId;
+
+
+        public void Update()
+        {
+            switch (GroupId)
+            {
+                case 1:
+                    switch (EnableId) //具体出现条件
+                    {
+                        case 0: //没有自己的红点逻辑根据下层红点来决定
+                            isEnable = RedDotManager.Instance.AllRedDotGroupData[GroupId].TargetLayerIsEnable(Layer);
+                            break;
+                        case 1:
+                            var _skillPowerupConfigs = ConfigComponent.Instance.GetAll<SkillPowerupConfig>();
+                            foreach (var _skillInfo in PlayerManager.Instance.GongFaControl.allSkill)
+                            {
+                                if (_skillInfo.SkillData.level >= _skillPowerupConfigs.Length)
+                                {
+                                    isEnable = false;
+                                    return;
+                                }
+
+                                if (PlayerManager.Instance.myHero.level.Value <
+                                    _skillInfo.SkillPowerupConfig.PlayerLevelLimit)
+                                {
+                                    isEnable = false;
+                                    return;
+                                }
+
+                                for (var i = 0; i < _skillInfo.SkillPowerupConfig.LevelupItem.Length; i++)
+                                {
+                                    if (!PlayerManager.Instance.BagController.IsEnough(
+                                            _skillInfo.SkillPowerupConfig.LevelupItem[i],
+                                            _skillInfo.SkillPowerupConfig.LevelupItemNum[i]))
+                                    {
+                                        isEnable = false;
+                                        return;
+                                    }
+                                }
+                            }
+
+                            isEnable = true;
+                            break;
+                    }
+
+                    break;
+                case 5: //具体组
+
+                    switch (EnableId) //具体出现条件
+                    {
+                        case 0: //没有自己的红点逻辑根据下层红点来决定
+                            isEnable = RedDotManager.Instance.AllRedDotGroupData[GroupId].TargetLayerIsEnable(Layer);
+                            break;
+                        case 1:
+                            int currentMiao =
+                                (int)((TimeHelper.ClientNow() - PlayerManager.Instance.myHero.heroData.upTime) /
+                                      1000);
+
+                            float allexp = currentMiao * PlayerManager.Instance.myHero.powerUpConfig.AutoXiuwei;
+                            if (PlayerManager.Instance.myHero.heroData.exp + allexp <
+                                PlayerManager.Instance.myHero.powerUpConfig.levelUpExp)
+                            {
+                                isEnable = false;
+                                return;
+                            }
+
+                            isEnable = true;
+                            break;
+                    }
+
+                    break;
+                case 7: //具体组
+
+                    switch (EnableId) //具体出现条件
+                    {
+                        case 0: //没有自己的红点逻辑根据下层红点来决定
+                            isEnable = RedDotManager.Instance.AllRedDotGroupData[GroupId].TargetLayerIsEnable(Layer);
+                            break;
+                        case 1:
+                            AccountFileInfo.SummonData summonData =
+                                PlayerManager.Instance.SummonManager.summonDataMap[1];
+                            OpenBoxConfig openBoxConfig = ConfigComponent.Instance.Get<OpenBoxConfig>(1);
+                            //有免费次数,并且让到时间了就免费抽
+                            if (summonData.tenFreeCount < openBoxConfig.oneConsumeFreePara_1[1] &&
+                                PlayerManager.Instance.serverTime >= summonData.nextTenFreeTime)
+                            {
+                                isEnable = true;
+                                return;
+                            }
+
+                            isEnable = false;
+                            break;
+                    }
+
+                    break;
+
+                case 8: //具体组
+                    switch (EnableId) //具体出现条件
+                    {
+                        case 0: //没有自己的红点逻辑根据下层红点来决定
+                            isEnable = RedDotManager.Instance.AllRedDotGroupData[GroupId].TargetLayerIsEnable(Layer);
+                            break;
+                        case 1:
+                            for (int i = 0; i < 4; i++)
+                            {
+                                FaBaoInfo faBaoInfo = PlayerManager.Instance.FaBaoControl.FightFaBao[i];
+                                if (RedDotManager.Instance.IsFabaoUpgrade1(i, faBaoInfo))
+                                {
+                                    isEnable = true;
+                                    return;
+                                }
+                            }
+
+                            break;
+                    }
+
+                    break;
+            }
+        }
+    }
+}

+ 11 - 0
Assets/Scripts/GameLogic/RedDot/RedDotData.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: CCsY5n+kV33AW6sVXHbaAQV4KevlVPUnDTDAgRBChcvGWW6WYEwWa0ToHKmr
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 123 - 0
Assets/Scripts/GameLogic/RedDot/RedDotGroupData.cs

@@ -0,0 +1,123 @@
+using System;
+using System.Linq;
+using Excel2Json;
+using Fort23.UTool;
+using Utility;
+
+namespace Fort23.Mono
+{
+    public class RedDotGroupData
+    {
+        public int Id;
+
+        /// <summary>
+        /// 红点组ID
+        /// </summary>
+        public int GroupId;
+
+        /// <summary>
+        /// key层级 value id和红点信息
+        /// </summary>
+        public Map<int, Map<int, RedDotData>> AllRedDotData = new Map<int, Map<int, RedDotData>>();
+
+
+        public void Init(int id)
+        {
+            Id = id;
+            GroupId = ConfigComponent.Instance.Get<ReddotConfig>(id).GroupID;
+
+            AddRedDotData(id);
+
+
+            // Update();
+        }
+
+        public void AddRedDotData(int id)
+        {
+            ReddotConfig reddotConfig = ConfigComponent.Instance.Get<ReddotConfig>(id);
+            if (AllRedDotData.ContainsKey(reddotConfig.Layer))
+            {
+                RedDotData redDotData = new RedDotData();
+                redDotData.Id = id;
+                redDotData.GroupId = GroupId;
+                redDotData.Layer = reddotConfig.Layer;
+                redDotData.EnableId = reddotConfig.Enable;
+                AllRedDotData[reddotConfig.Layer].Add(redDotData.Id, redDotData);
+            }
+            else
+            {
+                Map<int, RedDotData> redDotDatas = new Map<int, RedDotData>();
+
+                RedDotData redDotData = new RedDotData();
+                redDotData.Id = id;
+                redDotData.GroupId = GroupId;
+                redDotData.Layer = reddotConfig.Layer;
+                redDotData.EnableId = reddotConfig.Enable;
+                redDotDatas.Add(redDotData.Id, redDotData);
+                AllRedDotData.Add(redDotData.Layer, redDotDatas);
+            }
+        }
+
+
+        public bool TargetLayerIsEnable(int layer)
+        {
+            bool isEnable = false;
+
+            int count = AllRedDotData.Keys.Count;
+
+            for (int i = count - 1; i >= 0; i--) //优先更新最底层红点
+            {
+                try
+                {
+                    int key = AllRedDotData.Keys.ToArray()[i];
+
+                    Map<int, RedDotData> redDotDatas = AllRedDotData[key];
+
+                    foreach (var redDotData in redDotDatas)
+                    {
+                        if (redDotData.Value.Layer >= layer)
+                        {
+                            if (redDotData.Value.isEnable)
+                            {
+                                isEnable = true;
+                                break;
+                            }
+                        }
+                    }
+                }
+                catch (Exception e)
+                {
+                    LogTool.Log(e);
+                    return false;
+                }
+            }
+
+            // foreach (var keyValuePair in AllRedDotData)
+
+
+            return isEnable;
+        }
+
+        public void Update()
+        {
+            int count = AllRedDotData.Keys.Count;
+            for (int i = count - 1; i >= 0; i--) //有限更新最底层红点
+            {
+                try
+                {
+                    int key = AllRedDotData.Keys.ToArray()[i];
+                    Map<int, RedDotData> redDotDatas = AllRedDotData[key];
+
+                    foreach (var keyValuePair in redDotDatas)
+                    {
+                        keyValuePair.Value.Update();
+                    }
+                }
+                catch (Exception e)
+                {
+                    LogTool.Log(e);
+                }
+            }
+        }
+    }
+}

+ 11 - 0
Assets/Scripts/GameLogic/RedDot/RedDotGroupData.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: XCge5CusAnuUuatoIgk1thFozakw3r2z9ddwlIs/qnfaHBWLd+uvA+1X86rs
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 363 - 0
Assets/Scripts/GameLogic/RedDot/RedDotManager.cs

@@ -0,0 +1,363 @@
+using System.Collections.Generic;
+using System.Linq;
+using Core.Event.Event;
+using Excel2Json;
+using Fort23.Core;
+using Fort23.Mono;
+using Fort23.UTool;
+using GameLogic.Hero;
+using Mono;
+using UnityEngine;
+using Utility;
+
+public class RedDotManager : Singleton<RedDotManager>
+{
+    public Map<int, RedDotGroupData> AllRedDotGroupData = new Map<int, RedDotGroupData>();
+
+
+    // /// <summary>
+    // /// 服务器保存的红点信息;
+    // /// </summary>
+    // private Map<int, AccountFileInfo.RedDot> RedDots = new Map<int, AccountFileInfo.RedDot>();
+
+
+    public void AddRedDot(AccountFileInfo.RedDot redDot)
+    {
+        AccountFileInfo.RedDot redDot1 = GetRedDot(redDot.id);
+
+        if (redDot1 != null)
+        {
+            redDot1 = redDot;
+        }
+        else
+        {
+            AccountFileInfo.Instance.playerData.RedDotDatas.Add(redDot);
+        }
+
+        AccountFileInfo.Instance.SavePlayerData();
+    }
+
+
+    public AccountFileInfo.RedDot GetRedDot(int id)
+    {
+        AccountFileInfo.RedDot redDot = AccountFileInfo.Instance.playerData.RedDotDatas.FirstOrDefault(r => r.id == id);
+        if (redDot == null)
+        {
+            return null;
+        }
+
+        return redDot;
+    }
+
+    /// <summary>
+    /// 所有红点检测注入
+    /// </summary>
+    public void Init()
+    {
+        ReddotConfig[] reddotConfigs = ConfigComponent.Instance.GetAll<ReddotConfig>();
+        foreach (var reddotConfig in reddotConfigs)
+        {
+            if (AllRedDotGroupData.TryGetValue(reddotConfig.GroupID, out var value))
+            {
+                value.AddRedDotData(reddotConfig.ID);
+            }
+            else
+            {
+                RedDotGroupData redDotGroupData = new RedDotGroupData();
+                redDotGroupData.Init(reddotConfig.ID);
+                AllRedDotGroupData.Add(reddotConfig.GroupID, redDotGroupData);
+            }
+        }
+    }
+
+
+    /// <summary>
+    /// 改变红点状态
+    /// </summary>
+    /// <param name="redDotConfigId">对应红点id</param>
+    /// <param name="type">0是关闭 1是开启</param>
+    public void ChangeStateRedDot(int redDotConfigId, int type)
+    {
+        ReddotConfig reddotConfig = ConfigComponent.Instance.Get<ReddotConfig>(redDotConfigId);
+
+        if (reddotConfig.ID == 0)
+        {
+            LogTool.Log("红点id找不到:" + redDotConfigId);
+            return;
+        }
+
+
+        if (AllRedDotGroupData.Count <= 0)
+            return;
+
+        if (type == 0)
+        {
+            AllRedDotGroupData[reddotConfig.GroupID].AllRedDotData[reddotConfig.Layer][redDotConfigId].isEnable = false;
+        }
+        else
+        {
+            AllRedDotGroupData[reddotConfig.GroupID].AllRedDotData[reddotConfig.Layer][redDotConfigId].isEnable = true;
+        }
+
+        AllRedDotUpDate();
+    }
+
+
+    /// <summary>
+    /// 
+    /// </summary>
+    /// <param name="redDotConfigId"></param>
+    /// <param name="type">1打开0关闭</param>
+    public void TempChangeStateRedDot(int redDotConfigId, int type)
+    {
+        ReddotConfig reddotConfig = ConfigComponent.Instance.Get<ReddotConfig>(redDotConfigId);
+
+        EventManager.Instance.Dispatch(CustomEventType.RedDotChangeState, new DefaultEventData()
+        {
+            eventData = new[]
+            {
+                redDotConfigId,
+                type
+            }
+        });
+    }
+
+
+    /// <summary>
+    /// 所有红点更新
+    /// </summary>
+    public void AllRedDotUpDate()
+    {
+        EventManager.Instance.Dispatch(CustomEventType.RedDotUpdate, new DefaultEventData() { eventData = 0 });
+    }
+
+
+    /// <summary>
+    /// 指定某个红点组更新
+    /// </summary>
+    /// <param name="targetGroupId"></param>
+    public void TarGetRedDotUpDate(int targetGroupId)
+    {
+        if (AllRedDotGroupData.ContainsKey(targetGroupId))
+        {
+            ReddotConfig reddotConfig =
+                ConfigComponent.Instance.Get<ReddotConfig>(AllRedDotGroupData[targetGroupId].Id);
+
+            if (reddotConfig.LinkGroupID != null)
+            {
+                foreach (var i in reddotConfig.LinkGroupID)
+                {
+                    EventManager.Instance.Dispatch(CustomEventType.RedDotUpdate, new DefaultEventData()
+                    {
+                        eventData = i
+                    });
+                }
+            }
+        }
+
+
+        EventManager.Instance.Dispatch(CustomEventType.RedDotUpdate, new DefaultEventData()
+        {
+            eventData = targetGroupId
+        });
+    }
+
+    public bool TargetRedDotIsEnable(int redDotConfigID)
+    {
+        if (AllRedDotGroupData.Count <= 0)
+        {
+            return false;
+        }
+
+        ReddotConfig reddotConfig = ConfigComponent.Instance.Get<ReddotConfig>(redDotConfigID);
+
+        if (reddotConfig.ID == 0)
+        {
+            // LogTool.Log("红点id找不到:" + redDotConfigID);
+            return false;
+        }
+
+
+        bool isEnable = false;
+        if (reddotConfig.LinkGroupID != null)
+        {
+            foreach (var groupID in reddotConfig.LinkGroupID) //遍历link的组
+            {
+                if (AllRedDotGroupData.ContainsKey(groupID))
+                {
+                    foreach (var keyValuePair in AllRedDotGroupData[groupID].AllRedDotData) //遍历所有layer的红点
+                    {
+                        foreach (var redDotData in keyValuePair.Value) //遍历某一个layer的红点
+                        {
+                            ReddotConfig _redDotConfig =
+                                ConfigComponent.Instance.Get<ReddotConfig>(redDotData.Value.Id); //具体某一个红点
+
+                            if (TargetRedDotIsEnable(_redDotConfig.ID))
+                            {
+                                isEnable = true;
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        else
+        {
+            AllRedDotGroupData[reddotConfig.GroupID].Update();
+            if (AllRedDotGroupData[reddotConfig.GroupID].TargetLayerIsEnable(reddotConfig.Layer))
+            {
+                isEnable = true;
+            }
+        }
+
+        return isEnable;
+    }
+
+
+    public bool TargetRedDotIsEnable2(int redDotConfigID)
+    {
+        bool isEnable = false;
+        ReddotConfig reddotConfig = ConfigComponent.Instance.Get<ReddotConfig>(redDotConfigID);
+        AllRedDotGroupData[reddotConfig.GroupID].Update();
+        if (AllRedDotGroupData[reddotConfig.GroupID].TargetLayerIsEnable(reddotConfig.Layer))
+        {
+            isEnable = true;
+        }
+
+        return isEnable;
+    }
+
+    public bool TargetRedDotIsEnableForType01(int redDotGroupID, object value)
+    {
+        switch (redDotGroupID)
+        {
+            case 2:
+                return isSkillUpgrade(value as SkillInfo);
+            case 9:
+                object[] objects = value as object[];
+                return IsFabaoUpgrade1((int)objects[1], objects[0] as FaBaoInfo);
+
+            case 10:
+                return IsFabaoUpgrade(value as FaBaoInfo);
+                break;
+        }
+
+        return false;
+    }
+
+    public bool isSkillUpgrade(SkillInfo _skillInfo)
+    {
+        var _skillPowerupConfigs = ConfigComponent.Instance.GetAll<SkillPowerupConfig>();
+        if (_skillInfo.SkillData.level >= _skillPowerupConfigs.Length)
+        {
+            return false;
+        }
+
+        if (PlayerManager.Instance.myHero.level.Value < _skillInfo.SkillPowerupConfig.PlayerLevelLimit)
+        {
+            return false;
+        }
+
+        for (var i = 0; i < _skillInfo.SkillPowerupConfig.LevelupItem.Length; i++)
+        {
+            if (!PlayerManager.Instance.BagController.IsEnough(_skillInfo.SkillPowerupConfig.LevelupItem[i],
+                    _skillInfo.SkillPowerupConfig.LevelupItemNum[i]))
+            {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    public bool IsFabaoUpgrade(FaBaoInfo faBaoInfo)
+    {
+        if (faBaoInfo == null)
+            return false;
+        if (faBaoInfo.FabaoPowerupConfig.ID >=
+            ConfigComponent.Instance.GetAll<FabaoPowerupConfig>().Length)
+        {
+            return false;
+        }
+
+        if (PlayerManager.Instance.myHero.powerUpConfig.ID < faBaoInfo.FabaoPowerupConfig.NeedLv)
+        {
+            return false;
+        }
+
+        for (var i = 0; i < faBaoInfo.FabaoPowerupConfig.PowerupItemIDs.Length; i++)
+        {
+            if (!PlayerManager.Instance.BagController.IsEnough(
+                    faBaoInfo.FabaoPowerupConfig.PowerupItemIDs[i],
+                    faBaoInfo.FabaoPowerupConfig.PowerupItemCosts[i]))
+            {
+                return false;
+            }
+        }
+
+        ItemConfig itemConfig =
+            ConfigComponent.Instance.Get<ItemConfig>(faBaoInfo.FabaoConfig.ItemID);
+        ItemConfig itemConfig2 = ConfigComponent.Instance.Get<ItemConfig>(itemConfig.associateVlaue[0]);
+        if (faBaoInfo.FabaoPowerupConfig.PromotePieceNum != null &&
+            faBaoInfo.FabaoPowerupConfig.PromotePieceNum[itemConfig2.quality - 1] != -1)
+        {
+            if (!PlayerManager.Instance.BagController.IsEnough(itemConfig.associateVlaue[0],
+                    faBaoInfo.FabaoPowerupConfig.PromotePieceNum[itemConfig2.quality - 1]))
+            {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    public bool IsFabaoUpgrade1(int index, FaBaoInfo faBaoInfo)
+    {
+        int redDotID = 9;
+        bool isEnable = true;
+        // object[] objects = value as object[];
+
+
+        if (index > PlayerManager.Instance.myHero.powerUpConfig.MaxFabaoNum - 1)
+        {
+            HeroPowerUpConfig[] heroPowerUpConfigs = ConfigComponent.Instance.GetAll<HeroPowerUpConfig>();
+            foreach (var heroPowerUpConfig in heroPowerUpConfigs)
+            {
+                if (heroPowerUpConfig.MaxFabaoNum > PlayerManager.Instance.myHero.powerUpConfig.MaxFabaoNum)
+                {
+                    isEnable = false;
+                }
+            }
+        }
+
+        if (isEnable)
+        {
+            AccountFileInfo.RedDot redDot = RedDotManager.Instance.GetRedDot(redDotID);
+            if (redDot == null)
+            {
+                return true;
+            }
+            else
+            {
+                if (redDot.Params.Contains(index.ToString()))
+                {
+                    return IsFabaoUpgrade(faBaoInfo);
+                }
+                else
+                {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+
+    public override void Dispose()
+    {
+        AllRedDotGroupData.Clear();
+        base.Dispose();
+    }
+}

+ 11 - 0
Assets/Scripts/GameLogic/RedDot/RedDotManager.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: CS9MtSP7Wi/5ot4mEPsbR3UKmVn7HeQ32AxiQZXk91miKfx8Uyg856lKe5M5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 0
Assets/Scripts/GameUI/GameApplction.cs

@@ -104,6 +104,7 @@ public class GameApplction : IGameStart
         await UIManager.Instance.InitUI();
         CustomTweenManager.Init();
 
+        RedDotManager.Instance.Init();
         // await GameNetworkClient.Instance.Connect("127.0.0.1", 1000);
         await Login();
     }

+ 2 - 0
Assets/Scripts/GameUI/UI/AppBarPanel/AppBarPanel.cs

@@ -323,6 +323,8 @@ namespace Fort23.Mono
             }
 
             appBarPanel.CustomInit(uiPanel);
+            
+            RedDotManager.Instance.AllRedDotUpDate();
         }
 
         public async static CTask ClosePanel()

+ 2 - 0
Assets/Scripts/GameUI/UI/CombatPanel/SkillWidget.cs

@@ -138,6 +138,8 @@ namespace Fort23.Mono
                     csc.ChangeState(1);
                     break;
             }
+
+            redDotComType01.CustomInit(2, skillConfigId);
         }
 
         public override void DormancyObj()

+ 11 - 0
Assets/Scripts/GameUI/UI/CombatPanel/SkillWidgetData.cs

@@ -107,6 +107,17 @@ namespace Fort23.Mono
 	      return _ShuXingCsc;
 	     }
 	   }
+	  private RedDotWidgetType01 _redDotComType01;
+	  public RedDotWidgetType01 redDotComType01
+	   {
+	   get{
+	      if (_redDotComType01 == null)
+	       {
+	         _redDotComType01  = GetUIUnit<RedDotWidgetType01>("redDotComType01"); 
+	       }
+	      return _redDotComType01;
+	     }
+	   }
 	  #endregion 自定义数据结束 
 	 public override async CTask SetUIGameObject(GameObject gObjectPoolInterface)
 	{

+ 2 - 0
Assets/Scripts/GameUI/UI/MainHeroPnael/BtnFaBaoWidget.cs

@@ -39,6 +39,8 @@ namespace Fort23.Mono
             {
                 UIManager.Instance.DormancyGComponent(faBaoWidget);
             }
+
+            RedDotComType01.CustomInit(9, new object[] { faBaoInfo, index });
         }
 
         public override void DormancyObj()

+ 14 - 3
Assets/Scripts/GameUI/UI/MainHeroPnael/BtnFaBaoWidgetData.cs

@@ -19,17 +19,28 @@ namespace Fort23.Mono
 	      return _FaBaoRoot;
 	     }
 	   }
-	  private GameObject _Text_Tips;
-	  public GameObject Text_Tips
+	  private Object _Text_Tips;
+	  public Object Text_Tips
 	   {
 	   get{
 	      if (_Text_Tips == null)
 	       {
-	         _Text_Tips  = GetUIUnit<GameObject>("Text_Tips"); 
+	         _Text_Tips  = GetUIUnit<Object>("Text_Tips"); 
 	       }
 	      return _Text_Tips;
 	     }
 	   }
+	  private RedDotWidgetType01 _RedDotComType01;
+	  public RedDotWidgetType01 RedDotComType01
+	   {
+	   get{
+	      if (_RedDotComType01 == null)
+	       {
+	         _RedDotComType01  = GetUIUnit<RedDotWidgetType01>("RedDotComType01"); 
+	       }
+	      return _RedDotComType01;
+	     }
+	   }
 	  #endregion 自定义数据结束 
 	 public override async CTask SetUIGameObject(GameObject gObjectPoolInterface)
 	{

+ 71 - 22
Assets/Scripts/GameUI/UI/MainHeroPnael/MainHeroPanel.cs

@@ -58,7 +58,8 @@ namespace Fort23.Mono
 
         private async CTask CreatHero()
         {
-            modelObj = await GObjectPool.Instance.FetchAsync<GameObjectPool>(PlayerManager.Instance.myHero.modelConfig.model + ".prefab", null);
+            modelObj = await GObjectPool.Instance.FetchAsync<GameObjectPool>(
+                PlayerManager.Instance.myHero.modelConfig.model + ".prefab", null);
             modelObj.own.transform.parent = CameraRoot;
             modelObj.own.transform.localEulerAngles = new Vector3(0, 167.575f, 0.118f);
             modelObj.own.transform.localPosition = new Vector3(-4, -211, 1482);
@@ -117,48 +118,75 @@ namespace Fort23.Mono
             heroInfo = PlayerManager.Instance.myHero;
 
 
-            HeroAttributeWidget heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
-            heroAttributeWidget.CustomInit(new HeroAttributeData("生命", "", PlayerManager.Instance.myHero.hp.Value.ToString()));
+            HeroAttributeWidget heroAttributeWidget =
+                await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null,
+                    Content, isInstance: true);
+            heroAttributeWidget.CustomInit(new HeroAttributeData("生命", "",
+                PlayerManager.Instance.myHero.hp.Value.ToString()));
             HeroAttributeWidgets.Add(heroAttributeWidget);
 
-            heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
-            heroAttributeWidget.CustomInit(new HeroAttributeData("攻击", "", PlayerManager.Instance.myHero.attack.Value.ToString()));
+            heroAttributeWidget =
+                await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null,
+                    Content, isInstance: true);
+            heroAttributeWidget.CustomInit(new HeroAttributeData("攻击", "",
+                PlayerManager.Instance.myHero.attack.Value.ToString()));
             HeroAttributeWidgets.Add(heroAttributeWidget);
 
-            heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
-            heroAttributeWidget.CustomInit(new HeroAttributeData("防御", "", PlayerManager.Instance.myHero.defense.Value.ToString()));
+            heroAttributeWidget =
+                await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null,
+                    Content, isInstance: true);
+            heroAttributeWidget.CustomInit(new HeroAttributeData("防御", "",
+                PlayerManager.Instance.myHero.defense.Value.ToString()));
             HeroAttributeWidgets.Add(heroAttributeWidget);
 
-            heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
-            heroAttributeWidget.CustomInit(new HeroAttributeData("攻击速度", "", PlayerManager.Instance.myHero.attSpeed.Value.ToString()));
+            heroAttributeWidget =
+                await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null,
+                    Content, isInstance: true);
+            heroAttributeWidget.CustomInit(new HeroAttributeData("攻击速度", "",
+                PlayerManager.Instance.myHero.attSpeed.Value.ToString()));
             HeroAttributeWidgets.Add(heroAttributeWidget);
 
 
-            heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
-            heroAttributeWidget.CustomInit(new HeroAttributeData("金灵根", "", PlayerManager.Instance.myHero.Metal.ToString()));
+            heroAttributeWidget =
+                await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null,
+                    Content, isInstance: true);
+            heroAttributeWidget.CustomInit(new HeroAttributeData("金灵根", "",
+                PlayerManager.Instance.myHero.Metal.ToString()));
             HeroAttributeWidgets.Add(heroAttributeWidget);
 
-            heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
-            heroAttributeWidget.CustomInit(new HeroAttributeData("木灵根", "", PlayerManager.Instance.myHero.Wood.ToString()));
+            heroAttributeWidget =
+                await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null,
+                    Content, isInstance: true);
+            heroAttributeWidget.CustomInit(new HeroAttributeData("木灵根", "",
+                PlayerManager.Instance.myHero.Wood.ToString()));
             HeroAttributeWidgets.Add(heroAttributeWidget);
 
-            heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
-            heroAttributeWidget.CustomInit(new HeroAttributeData("水灵根", "", PlayerManager.Instance.myHero.Water.ToString()));
+            heroAttributeWidget =
+                await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null,
+                    Content, isInstance: true);
+            heroAttributeWidget.CustomInit(new HeroAttributeData("水灵根", "",
+                PlayerManager.Instance.myHero.Water.ToString()));
             HeroAttributeWidgets.Add(heroAttributeWidget);
 
-            heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
-            heroAttributeWidget.CustomInit(new HeroAttributeData("火灵根", "", PlayerManager.Instance.myHero.Fire.ToString()));
+            heroAttributeWidget =
+                await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null,
+                    Content, isInstance: true);
+            heroAttributeWidget.CustomInit(new HeroAttributeData("火灵根", "",
+                PlayerManager.Instance.myHero.Fire.ToString()));
             HeroAttributeWidgets.Add(heroAttributeWidget);
 
-            heroAttributeWidget = await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null, Content, isInstance: true);
-            heroAttributeWidget.CustomInit(new HeroAttributeData("土灵根", "", PlayerManager.Instance.myHero.Earth.ToString()));
+            heroAttributeWidget =
+                await UIManager.Instance.CreateGComponentForObject<HeroAttributeWidget>(HeroAttributeWidgetGam, null,
+                    Content, isInstance: true);
+            heroAttributeWidget.CustomInit(new HeroAttributeData("土灵根", "",
+                PlayerManager.Instance.myHero.Earth.ToString()));
             HeroAttributeWidgets.Add(heroAttributeWidget);
         }
 
         private async void OnClick(ItemWidgetBasic obj)
         {
             BtnFaBaoWidget btnFaBaoWidget = obj as BtnFaBaoWidget;
-          
+
             if (btnFaBaoWidget.index > PlayerManager.Instance.myHero.powerUpConfig.MaxFabaoNum - 1)
             {
                 HeroPowerUpConfig[] heroPowerUpConfigs = ConfigComponent.Instance.GetAll<HeroPowerUpConfig>();
@@ -166,14 +194,34 @@ namespace Fort23.Mono
                 {
                     if (heroPowerUpConfig.MaxFabaoNum > PlayerManager.Instance.myHero.powerUpConfig.MaxFabaoNum)
                     {
-                        TipMessagePanel.OpenTipMessagePanel(LanguageManager.Instance.Text(10331,LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[0])+LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[1])+LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[2])));
+                        TipMessagePanel.OpenTipMessagePanel(LanguageManager.Instance.Text(10331,
+                            LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[0]) +
+                            LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[1]) +
+                            LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[2])));
                         return;
                     }
                 }
+
                 TipMessagePanel.OpenTipMessagePanel("当前位置未解锁");
                 return;
             }
 
+            int redDotID = 9;
+            AccountFileInfo.RedDot redDot = RedDotManager.Instance.GetRedDot(redDotID);
+            if (redDot == null)
+            {
+                redDot = new AccountFileInfo.RedDot();
+                redDot.id = redDotID;
+            }
+
+            if (!redDot.Params.Contains(btnFaBaoWidget.index.ToString()))
+            {
+                redDot.Params.Add(btnFaBaoWidget.index.ToString());
+                RedDotManager.Instance.AddRedDot(redDot);
+                RedDotManager.Instance.ChangeStateRedDot(redDotID, 0);
+            }
+
+
             SelectFaBaoPanel selectFaBaoPanel = await SelectFaBaoPanel.OpenPanel(btnFaBaoWidget.index);
             await selectFaBaoPanel.UIClosed();
             foreach (var b in btnFaBaoWidgets)
@@ -184,7 +232,8 @@ namespace Fort23.Mono
 
         public async static CTask<MainHeroPanel> OpenPanel()
         {
-            MainHeroPanel mainHeroPanel = await UIManager.Instance.LoadAndOpenPanel<MainHeroPanel>(null,isFullUI: true);
+            MainHeroPanel mainHeroPanel =
+                await UIManager.Instance.LoadAndOpenPanel<MainHeroPanel>(null, isFullUI: true);
             mainHeroPanel.CustomInit();
             return mainHeroPanel;
         }

+ 6 - 0
Assets/Scripts/GameUI/UI/MainHeroPnael/SelectFaBaoPanel.cs

@@ -330,6 +330,8 @@ namespace Fort23.Mono
             }
 
             SetSelectIcon(faBao.SelectRoot);
+            
+            RedDotComType01.CustomInit(10,selectedFaBaoInfo);
         }
 
         private void SetSelectIcon(Transform root)
@@ -362,6 +364,10 @@ namespace Fort23.Mono
 
             if (currentFaBaoWidget != null)
                 SetSelectIcon(currentFaBaoWidget.SelectRoot);
+            
+            RedDotComType01.CustomInit(10,selectedFaBaoInfo);
+            
+            
         }
 
         private async CTask UpdateCurrentFaBaoWidget()

+ 11 - 0
Assets/Scripts/GameUI/UI/MainHeroPnael/SelectFaBaoPanelData.cs

@@ -327,6 +327,17 @@ namespace Fort23.Mono
 	      return _ItemWidgetType1Game;
 	     }
 	   }
+	  private RedDotWidgetType01 _RedDotComType01;
+	  public RedDotWidgetType01 RedDotComType01
+	   {
+	   get{
+	      if (_RedDotComType01 == null)
+	       {
+	         _RedDotComType01  = GetUIUnit<RedDotWidgetType01>("RedDotComType01"); 
+	       }
+	      return _RedDotComType01;
+	     }
+	   }
 	  #endregion 自定义数据结束 
 	 public override async CTask SetUIGameObject(GameObject gObjectPoolInterface)
 	{

+ 8 - 0
Assets/Scripts/GameUI/UI/RedDot.meta

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

+ 32 - 0
Assets/Scripts/GameUI/UI/RedDot/RedDotCom.cs

@@ -0,0 +1,32 @@
+namespace Fort23.Mono
+{
+    [UIBinding(prefab = "RedDotCom")]
+    public partial class RedDotCom : UIComponent
+    {
+        private void Init()
+        {
+        }
+
+        public override void AddEvent()
+        {
+        }
+
+        public override void DelEvent()
+        {
+        }
+
+        public void CustomInit(int redDotConfigID)
+        {
+            RedDotWidget.CustomInit(redDotConfigID);
+        }
+
+        public override void AddButtonEvent()
+        {
+        }
+
+        public override void Dispose()
+        {
+            base.Dispose();
+        }
+    }
+}

+ 11 - 0
Assets/Scripts/GameUI/UI/RedDot/RedDotCom.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: DnhJsSusVC5YvnDS/wHmWBEWCBDLnvpLUhIatLNTfR6IzqRfFkkbOJQqESgG
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 34 - 0
Assets/Scripts/GameUI/UI/RedDot/RedDotComData.cs

@@ -0,0 +1,34 @@
+using Fort23.Core;
+using UnityEngine;
+namespace Fort23.Mono
+{
+    public partial class RedDotCom
+    {
+        #region 自定义数据
+
+        private RedDotWidget _RedDotWidget;
+
+        public RedDotWidget RedDotWidget
+        {
+            get
+            {
+                if (_RedDotWidget == null)
+                {
+                    _RedDotWidget = GetUIUnit<RedDotWidget>("RedDotWidget");
+                }
+
+                return _RedDotWidget;
+            }
+        }
+
+        #endregion 自定义数据结束
+
+        public override async CTask SetUIGameObject(GameObject gObjectPoolInterface)
+        {
+            await base.SetUIGameObject(gObjectPoolInterface);
+            Init();
+        }
+
+   
+    }
+}

+ 11 - 0
Assets/Scripts/GameUI/UI/RedDot/RedDotComData.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: XHsdtCr+VS2b6ZcrwwMIyGdLUHwqNmaqV+GaSZvv1QaPfNLzCxBr+3SnuE96
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 162 - 0
Assets/Scripts/GameUI/UI/RedDot/RedDotWidget.cs

@@ -0,0 +1,162 @@
+using System.Linq;
+using Core.Event.Event;
+using Excel2Json;
+using Fort23.Core;
+using Fort23.UTool;
+using UnityEngine;
+
+public class RedDotWidget : MonoBehaviour
+{
+    public int RedDotConfigId;
+
+    public int GroupId;
+
+    public int Layer;
+
+    public int[] LinkGroupIds;
+
+    public int UnlockId;
+
+    public GameObject RedDotRoot;
+    
+    [ContextMenu("test")]
+    public void Test()
+    {
+        RedDotUpdate(new DefaultEventData(){eventData = 0});
+    }
+
+    public void Start()
+    {
+        EventManager.Instance.RemoveEventListener(CustomEventType.RedDotUpdate, RedDotUpdate);
+        EventManager.Instance.AddEventListener(CustomEventType.RedDotUpdate, RedDotUpdate);
+
+        EventManager.Instance.RemoveEventListener(CustomEventType.RedDotChangeState, RedDotChangeState);
+        EventManager.Instance.AddEventListener(CustomEventType.RedDotChangeState, RedDotChangeState);
+
+        ReddotConfig reddotConfig = ConfigComponent.Instance.Get<ReddotConfig>(RedDotConfigId);
+        RedDotRoot.SetActive(false);
+        GroupId = reddotConfig.GroupID;
+        Layer = reddotConfig.Layer;
+        LinkGroupIds = reddotConfig.LinkGroupID;
+
+        RedDotUpdate(new DefaultEventData(){eventData = 0});
+    }
+
+    private void RedDotChangeState(IEventData e)
+    {
+        if (UnlockId != 0)
+        {
+            if (!ULockManager.Instance.IsULock(UnlockId))
+            {
+                return;
+            }
+        }
+
+        ReddotConfig reddotConfig = ConfigComponent.Instance.Get<ReddotConfig>(RedDotConfigId);
+
+
+        DefaultEventData data = (DefaultEventData)e;
+        int[] eventData = data.eventData as int[];
+        if (eventData[0] == RedDotConfigId)
+        {
+            if (eventData[1] == 0)
+            {
+                if (reddotConfig.Visible == 1)
+                {
+                    RedDotRoot.SetActive(false);
+                }
+            }
+            else
+            {
+                RedDotRoot.SetActive(true);
+            }
+        }
+    }
+
+    public void CustomInit(int reddDotConfigId)
+    {
+        RedDotConfigId = reddDotConfigId;
+
+        EventManager.Instance.RemoveEventListener(CustomEventType.RedDotUpdate, RedDotUpdate);
+        EventManager.Instance.AddEventListener(CustomEventType.RedDotUpdate, RedDotUpdate);
+
+        EventManager.Instance.RemoveEventListener(CustomEventType.RedDotChangeState, RedDotChangeState);
+        EventManager.Instance.AddEventListener(CustomEventType.RedDotChangeState, RedDotChangeState);
+
+        ReddotConfig reddotConfig = ConfigComponent.Instance.Get<ReddotConfig>(RedDotConfigId);
+
+        RedDotRoot.SetActive(false);
+        GroupId = reddotConfig.GroupID;
+        Layer = reddotConfig.Layer;
+        LinkGroupIds = reddotConfig.LinkGroupID;
+        RedDotUpdate(new DefaultEventData(){eventData =  0});
+    }
+
+    private void RedDotUpdate(IEventData e)
+    {
+        DefaultEventData data = (DefaultEventData)e;
+        if ((int)data.eventData != 0 && (int)data.eventData != GroupId)
+        {
+            return;
+        }
+
+        if (UnlockId != 0)
+        {
+            if (ULockManager.Instance.IsULock(UnlockId))
+            {
+                if (RedDotManager.Instance.TargetRedDotIsEnable(RedDotConfigId))
+                {
+                    RedDotRoot.SetActive(true);
+                    ReddotConfig reddotConfig = ConfigComponent.Instance.Get<ReddotConfig>(RedDotConfigId);
+
+                    if (reddotConfig.EnableForTarget != 0)
+                    {
+                        bool isEnable = RedDotManager.Instance.TargetRedDotIsEnable2(reddotConfig.EnableForTarget);
+                        if (isEnable)
+                        {
+                            RedDotRoot.SetActive(true);
+                        }
+                        else
+                        {
+                            RedDotRoot.SetActive(false);
+                        }
+                    }
+                }
+                else
+                {
+                    RedDotRoot.SetActive(false);
+                }
+            }
+        }
+        else
+        {
+            if (RedDotManager.Instance.TargetRedDotIsEnable(RedDotConfigId))
+            {
+                RedDotRoot.SetActive(true);
+                ReddotConfig reddotConfig = ConfigComponent.Instance.Get<ReddotConfig>(RedDotConfigId);
+                if (reddotConfig.EnableForTarget != 0)
+                {
+                    bool isEnable = RedDotManager.Instance.TargetRedDotIsEnable2(reddotConfig.EnableForTarget);
+                    if (isEnable)
+                    {
+                        RedDotRoot.SetActive(true);
+                    }
+                    else
+                    {
+                        RedDotRoot.SetActive(false);
+                    }
+                }
+            }
+            else
+            {
+                RedDotRoot.SetActive(false);
+            }
+        }
+    }
+
+    public void OnDestroy()
+    {
+        EventManager.Instance.RemoveEventListener(CustomEventType.RedDotUpdate, RedDotUpdate);
+        EventManager.Instance.RemoveEventListener(CustomEventType.RedDotChangeState, RedDotChangeState);
+    }
+}

+ 11 - 0
Assets/Scripts/GameUI/UI/RedDot/RedDotWidget.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: DHhN4H/4UX9t5oE2wG7KAOyzFDYm6cRSeVsXf6Xqwj4m1/KJpS2pQnqxCifL
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 98 - 0
Assets/Scripts/GameUI/UI/RedDot/RedDotWidgetType01.cs

@@ -0,0 +1,98 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Core.Event.Event;
+using Excel2Json;
+using Fort23.Core;
+using Fort23.UTool;
+using UnityEngine;
+
+
+public class RedDotWidgetType01 : MonoBehaviour
+{
+    public int RedDotConfigId;
+
+    public int GroupId;
+
+    public int Layer;
+
+    public int[] LinkGroupIds;
+
+    public int UnlockId;
+
+    public GameObject RedDotRoot;
+
+    public object ExParams;
+
+    public void Start()
+    {
+    }
+
+
+    public void SetRedEnable(bool value)
+    {
+        
+        RedDotRoot.SetActive(value);
+    }
+
+    /// <summary>
+    /// 合适情况下建议手动回收一次
+    /// </summary>
+    /// <param name="reddDotConfigId"></param>
+    /// <param name="exParams"></param>
+    public void CustomInit(int reddDotConfigId, object exParams)
+    {
+        ExParams = exParams;
+        RedDotConfigId = reddDotConfigId;
+        EventManager.Instance.RemoveEventListener(CustomEventType.RedDotUpdate, RedDotUpdate);
+        EventManager.Instance.AddEventListener(CustomEventType.RedDotUpdate, RedDotUpdate);
+
+
+        ReddotConfig reddotConfig = ConfigComponent.Instance.Get<ReddotConfig>(RedDotConfigId);
+        GroupId = reddotConfig.GroupID;
+        Layer = reddotConfig.Layer;
+        LinkGroupIds = reddotConfig.LinkGroupID;
+        RedDotUpdate(new DefaultEventData());
+    }
+
+
+    public void DelEvent()
+    {
+        EventManager.Instance.RemoveEventListener(CustomEventType.RedDotUpdate, RedDotUpdate);
+    }
+    
+    private void RedDotUpdate(IEventData e)
+    {
+        if (UnlockId != 0)
+        {
+            if (ULockManager.Instance.IsULock(UnlockId))
+            {
+                if (RedDotManager.Instance.TargetRedDotIsEnableForType01(GroupId, ExParams))
+                {
+                    RedDotRoot.SetActive(true);
+                }
+                else
+                {
+                    RedDotRoot.SetActive(false);
+                }
+            }
+        }
+        else
+        {
+            if (RedDotManager.Instance.TargetRedDotIsEnableForType01(GroupId, ExParams))
+            {
+                RedDotRoot.SetActive(true);
+            }
+            else
+            {
+                RedDotRoot.SetActive(false);
+            }
+        }
+    }
+
+    
+    public void OnDestroy()
+    {
+        EventManager.Instance.RemoveEventListener(CustomEventType.RedDotUpdate, RedDotUpdate);
+    }
+}

+ 11 - 0
Assets/Scripts/GameUI/UI/RedDot/RedDotWidgetType01.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ByxO5COuUXr5RA7SRcPvKBiuWsiE5tjapqTHkojknjWyI+FZJmjyeWV6wxg2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

文件差异内容过多而无法显示
+ 0 - 0
Assets/StreamingAssets/assetConfig.txt


二进制
Excel2Json/Excel/Reddot.xlsx


部分文件因为文件数量过多而无法显示