Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/master'

HY-LSZNWIN10\Administrator 1 mesiac pred
rodič
commit
cd242d79ad

+ 615 - 187
ActionTowerDefense/Assets/Resources/Prefab/RougueUI/Shop_UI.prefab

@@ -1621,6 +1621,7 @@ RectTransform:
   - {fileID: 2446616061742604926}
   - {fileID: 3420287635671513130}
   - {fileID: 4266509587783629744}
+  - {fileID: 3129239725437064792}
   m_Father: {fileID: 2082904518845860207}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -2192,6 +2193,43 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1 &1774777988422927700
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3129239725437064792}
+  m_Layer: 5
+  m_Name: Bag
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &3129239725437064792
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1774777988422927700}
+  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:
+  - {fileID: 5238625338855602206}
+  m_Father: {fileID: 2924262753429702587}
+  m_RootOrder: 5
+  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: -300}
+  m_SizeDelta: {x: 100, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &1794708768300398431
 GameObject:
   m_ObjectHideFlags: 0
@@ -2268,6 +2306,89 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1 &1811696208325114484
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8584850718674696612}
+  - component: {fileID: 8817973753098342137}
+  - component: {fileID: 4696534517677502037}
+  m_Layer: 5
+  m_Name: Radart
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &8584850718674696612
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1811696208325114484}
+  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: 1501446285655166608}
+  m_RootOrder: 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: 200, y: 200}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &8817973753098342137
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1811696208325114484}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 087e598e1064a254aa48295d5e9cddcd, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.38431373, g: 0.8392157, b: 0.58431375, 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_Radius: 100
+  m_SideCount: 8
+  m_ShowInner: 1
+  m_ShowOutline: 1
+  m_OutlineData:
+    width: 1
+    color: {r: 1, g: 1, b: 1, a: 1}
+  m_RatioList:
+  - 0
+  - 0.404
+  - 0
+  - 0
+  - 0
+  - 0
+  - 0
+  - 0
+--- !u!222 &4696534517677502037
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1811696208325114484}
+  m_CullTransparentMesh: 1
 --- !u!1 &1819950254340673190
 GameObject:
   m_ObjectHideFlags: 0
@@ -4333,6 +4454,133 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1 &2937069080697971306
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2341721918188266165}
+  - component: {fileID: 4945895540147874118}
+  - component: {fileID: 6136775866430094136}
+  - component: {fileID: 3346739550765065394}
+  m_Layer: 5
+  m_Name: Scrollbar Vertical
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2341721918188266165
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2937069080697971306}
+  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:
+  - {fileID: 9132540640686299522}
+  m_Father: {fileID: 5238625338855602206}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 20, y: -17}
+  m_Pivot: {x: 1, y: 1}
+--- !u!222 &4945895540147874118
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2937069080697971306}
+  m_CullTransparentMesh: 1
+--- !u!114 &6136775866430094136
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2937069080697971306}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, 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: 10907, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!114 &3346739550765065394
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2937069080697971306}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 4113043684618325535}
+  m_HandleRect: {fileID: 7101525588004522751}
+  m_Direction: 2
+  m_Value: 1.0000006
+  m_Size: 0.6666667
+  m_NumberOfSteps: 0
+  m_OnValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
 --- !u!1 &3053857947407576670
 GameObject:
   m_ObjectHideFlags: 0
@@ -5837,6 +6085,43 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1 &4295753817263055270
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 9132540640686299522}
+  m_Layer: 5
+  m_Name: Sliding Area
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &9132540640686299522
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4295753817263055270}
+  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:
+  - {fileID: 7101525588004522751}
+  m_Father: {fileID: 2341721918188266165}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -20, y: -20}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &4555911177607903869
 GameObject:
   m_ObjectHideFlags: 0
@@ -6255,6 +6540,82 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1 &5155735283052749738
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7101525588004522751}
+  - component: {fileID: 3871303618240513231}
+  - component: {fileID: 4113043684618325535}
+  m_Layer: 5
+  m_Name: Handle
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7101525588004522751
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5155735283052749738}
+  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: 9132540640686299522}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 20, y: 20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &3871303618240513231
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5155735283052749738}
+  m_CullTransparentMesh: 1
+--- !u!114 &4113043684618325535
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5155735283052749738}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, 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: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
 --- !u!1 &5290223756334021460
 GameObject:
   m_ObjectHideFlags: 0
@@ -6810,7 +7171,7 @@ MonoBehaviour:
   m_hasFontAssetChanged: 0
   m_baseMaterial: {fileID: 0}
   m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
---- !u!1 &5679810408286020222
+--- !u!1 &5874578430425637498
 GameObject:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
@@ -6818,107 +7179,24 @@ GameObject:
   m_PrefabAsset: {fileID: 0}
   serializedVersion: 6
   m_Component:
-  - component: {fileID: 2894175003364835571}
-  - component: {fileID: 4179921903264723583}
-  - component: {fileID: 5855303184339604026}
-  m_Layer: 5
-  m_Name: UIPolygon (1)
+  - component: {fileID: 2082904518845860207}
+  - component: {fileID: 6660043312470952259}
+  m_Layer: 0
+  m_Name: Shop_UI
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
---- !u!224 &2894175003364835571
-RectTransform:
+  m_IsActive: 1
+--- !u!4 &2082904518845860207
+Transform:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 5679810408286020222}
-  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: 1501446285655166608}
-  m_RootOrder: 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: 100, y: 100}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &4179921903264723583
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 5679810408286020222}
-  m_CullTransparentMesh: 1
---- !u!114 &5855303184339604026
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 5679810408286020222}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 494b71daa049bb642b696efb8577b310, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, 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_Texture: {fileID: 0}
-  fill: 1
-  showOutline: 0
-  outlineColor: {r: 1, g: 1, b: 1, a: 1}
-  outlineWidth: 2
-  sides: 8
-  rotation: 270
-  VerticesDistances:
-  - 1
-  - 1
-  - 1
-  - 1
-  - 1
-  - 1
-  - 1
-  - 1
-  - 1
---- !u!1 &5874578430425637498
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 2082904518845860207}
-  - component: {fileID: 6660043312470952259}
-  m_Layer: 0
-  m_Name: Shop_UI
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!4 &2082904518845860207
-Transform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 5874578430425637498}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 60.402832, y: 42.000595, z: -2.147348}
+  m_GameObject: {fileID: 5874578430425637498}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 60.402832, y: 42.000595, z: -2.147348}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
@@ -6956,8 +7234,7 @@ MonoBehaviour:
   - {fileID: 21300040, guid: 7ab74e659e1f0a34d9cfec21c478fc12, type: 3}
   - {fileID: 21300042, guid: 7ab74e659e1f0a34d9cfec21c478fc12, type: 3}
   refreshPriceText: {fileID: 373497747650418587}
-  uiPolygon: {fileID: 2461829563258804882}
-  uiPolygon1: {fileID: 5855303184339604026}
+  radarChart: {fileID: 8817973753098342137}
   qualitysIcon:
   - {r: 0.6627451, g: 0.6627451, b: 0.6627451, a: 1}
   - {r: 0.1764706, g: 0.6039216, b: 1, a: 1}
@@ -6970,8 +7247,7 @@ MonoBehaviour:
   - {r: 0.9764706, g: 0.76862746, b: 0.36078432, a: 1}
   interval: 20
   polygonInitMax: 5
-  polygonMaxInterval: 5
-  polygonOutline: 1.2
+  polygonMaxInterval: 2
   refreshPrice: 0
   refreshNum: 0
 --- !u!1 &5935707839865553209
@@ -7170,89 +7446,6 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
---- !u!1 &6074305002757549395
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6275091330984161204}
-  - component: {fileID: 4369713342629106445}
-  - component: {fileID: 2461829563258804882}
-  m_Layer: 5
-  m_Name: UIPolygon
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &6275091330984161204
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6074305002757549395}
-  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: 1501446285655166608}
-  m_RootOrder: 1
-  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: 100, y: 100}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &4369713342629106445
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6074305002757549395}
-  m_CullTransparentMesh: 1
---- !u!114 &2461829563258804882
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 6074305002757549395}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 494b71daa049bb642b696efb8577b310, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 0.7607843, b: 0, a: 0.6666667}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Texture: {fileID: 0}
-  fill: 1
-  showOutline: 1
-  outlineColor: {r: 1, g: 1, b: 1, a: 1}
-  outlineWidth: 1
-  sides: 8
-  rotation: 270
-  VerticesDistances:
-  - 1
-  - 1
-  - 1
-  - 1
-  - 1
-  - 1
-  - 1
-  - 1
-  - 1
 --- !u!1 &6161188349530372019
 GameObject:
   m_ObjectHideFlags: 0
@@ -8087,6 +8280,42 @@ MonoBehaviour:
             m_StringArgument: 
             m_BoolArgument: 0
           m_CallState: 2
+--- !u!1 &6629333499717271522
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3269823355644294183}
+  m_Layer: 5
+  m_Name: Content
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &3269823355644294183
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6629333499717271522}
+  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: 3231130991241287713}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 300}
+  m_Pivot: {x: 0, y: 1}
 --- !u!1 &6655405187681754689
 GameObject:
   m_ObjectHideFlags: 0
@@ -9686,7 +9915,7 @@ RectTransform:
   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: -698, y: -302}
+  m_AnchoredPosition: {x: -750, y: -300}
   m_SizeDelta: {x: 100, y: 100}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &7196014622599280550
@@ -9853,18 +10082,17 @@ RectTransform:
   m_GameObject: {fileID: 7204767548761423031}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 3, y: 3, z: 3}
+  m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 1
   m_Children:
-  - {fileID: 2894175003364835571}
-  - {fileID: 6275091330984161204}
+  - {fileID: 8584850718674696612}
   m_Father: {fileID: 4266509587783629744}
   m_RootOrder: 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: 100, y: 100}
+  m_SizeDelta: {x: 300, y: 300}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &1836711570408444653
 CanvasRenderer:
@@ -9887,7 +10115,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0, b: 0, a: 1}
+  m_Color: {r: 0.20784314, g: 0.20784314, b: 0.20784314, a: 1}
   m_RaycastTarget: 1
   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
   m_Maskable: 1
@@ -10618,6 +10846,115 @@ MonoBehaviour:
   m_hasFontAssetChanged: 0
   m_baseMaterial: {fileID: 0}
   m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &7865395453545175558
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5238625338855602206}
+  - component: {fileID: 6328538052381852482}
+  - component: {fileID: 5552342381713172877}
+  - component: {fileID: 5304658896764365835}
+  m_Layer: 5
+  m_Name: Scroll View
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5238625338855602206
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7865395453545175558}
+  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:
+  - {fileID: 3231130991241287713}
+  - {fileID: 2341721918188266165}
+  m_Father: {fileID: 3129239725437064792}
+  m_RootOrder: 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: 750, y: 200}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6328538052381852482
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7865395453545175558}
+  m_CullTransparentMesh: 1
+--- !u!114 &5552342381713172877
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7865395453545175558}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 0.392}
+  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: 10907, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!114 &5304658896764365835
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7865395453545175558}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Content: {fileID: 3269823355644294183}
+  m_Horizontal: 1
+  m_Vertical: 1
+  m_MovementType: 1
+  m_Elasticity: 0.1
+  m_Inertia: 1
+  m_DecelerationRate: 0.135
+  m_ScrollSensitivity: 1
+  m_Viewport: {fileID: 3231130991241287713}
+  m_HorizontalScrollbar: {fileID: 0}
+  m_VerticalScrollbar: {fileID: 3346739550765065394}
+  m_HorizontalScrollbarVisibility: 2
+  m_VerticalScrollbarVisibility: 2
+  m_HorizontalScrollbarSpacing: -3
+  m_VerticalScrollbarSpacing: -3
+  m_OnValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
 --- !u!1 &7874948165174242457
 GameObject:
   m_ObjectHideFlags: 0
@@ -11040,6 +11377,97 @@ MonoBehaviour:
   m_hasFontAssetChanged: 0
   m_baseMaterial: {fileID: 0}
   m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &7989762083494632024
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3231130991241287713}
+  - component: {fileID: 1082570394178919531}
+  - component: {fileID: 4280234028545037622}
+  - component: {fileID: 7335959421094189103}
+  m_Layer: 5
+  m_Name: Viewport
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &3231130991241287713
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7989762083494632024}
+  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:
+  - {fileID: 3269823355644294183}
+  m_Father: {fileID: 5238625338855602206}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0, y: 1}
+--- !u!222 &1082570394178919531
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7989762083494632024}
+  m_CullTransparentMesh: 1
+--- !u!114 &4280234028545037622
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7989762083494632024}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, 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: 10917, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!114 &7335959421094189103
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7989762083494632024}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ShowMaskGraphic: 0
 --- !u!1 &8151244316438475137
 GameObject:
   m_ObjectHideFlags: 0

+ 8 - 1
ActionTowerDefense/Assets/Scripts/Characters/AttackTrigger.cs

@@ -3,6 +3,7 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using Sirenix.OdinInspector;
+using System;
 
 public class AttackTrigger : MonoBehaviour
 {
@@ -36,12 +37,18 @@ public class AttackTrigger : MonoBehaviour
         if (!isShoot)
         {
             BeHitTrigger hitTrigger = other.GetComponent<BeHitTrigger>();
-            if (hitTrigger != null && !hitTrigger.owner.isDie && Util.CheckCanHit(owner.tag, hitTrigger.owner.tag) )
+
+            TargetType otherTargetType = (TargetType)Enum.Parse(typeof(TargetType), hitTrigger.owner.tag);
+            if (hitTrigger != null && !hitTrigger.owner.isDie)
             {
                 if (isSingleAttack && cantSingleAttack)
                 {
                     return;
                 }
+                if (!owner.attackController.targetTypes.Exists(x => x == otherTargetType))
+                {
+                    return;
+                }
                 trigedObjs.Add(hitTrigger);
                 hitTrigger.BeHit(attackMethod, owner);
                 if (hitTrigger.owner.debugAttackFrom)

+ 326 - 0
ActionTowerDefense/Assets/Scripts/UI/RadarChart.cs

@@ -0,0 +1,326 @@
+using UnityEngine;
+using UnityEngine.Sprites;
+using UnityEngine.UI;
+using System.Collections.Generic;
+using System;
+
+/// <summary>
+/// 雷达图组件
+/// </summary>
+[AddComponentMenu("LFramework/UI/RadarChart", 51)]
+public class RadarChart : MaskableGraphic
+{
+    protected RadarChart()
+    {
+
+    }
+
+    /// <summary>
+    /// 描边数据
+    /// </summary>
+    [Serializable]
+    public class OutlineData
+    {
+        [SerializeField]
+        public float width = 5;
+        [SerializeField]
+        public Color color = Color.red;
+    }
+
+    //Sprite图片
+    [SerializeField]
+    Sprite m_Sprite;
+    public Sprite Sprite
+    {
+        get { return m_Sprite; }
+    }
+
+    //贴图
+    public override Texture mainTexture
+    {
+        get
+        {
+            if (m_Sprite == null)
+            {
+                if (material != null && material.mainTexture != null)
+                {
+                    return material.mainTexture;
+                }
+                return s_WhiteTexture;
+            }
+
+            return m_Sprite.texture;
+        }
+    }
+
+    //半径
+    [SerializeField]
+    float m_Radius = 100;
+
+    //边数(几边形)
+    [SerializeField]
+    int m_SideCount;
+    public int SideCount
+    {
+        get
+        {
+            m_SideCount = Mathf.Clamp(m_SideCount, 3, 65000);
+            return m_SideCount;
+        }
+    }
+
+    //是否显示雷达图内部
+    [SerializeField]
+    bool m_ShowInner = true;
+
+    //是否显示雷达图描边
+    [SerializeField]
+    bool m_ShowOutline;
+
+    //雷达图描边数据
+    [SerializeField]
+    OutlineData m_OutlineData;
+
+    //比例值列表
+    [Range(0,1)]
+    public List<float> m_RatioList = new List<float>();
+
+    //顶点位置列表
+    List<Vector3> m_TempVertexList = new List<Vector3>();
+    List<Vector3> m_VertexList = new List<Vector3>();
+
+    //比例值变化后
+    public Action OnRatioValueChanged;
+
+    public void Awake()
+    {
+        SetRadarChart();
+    }
+
+    /// <summary>
+    /// 初始化比例值列表
+    /// </summary>
+    void InitRatioList()
+    {
+        int ratioCount = m_RatioList.Count;
+        if (ratioCount < SideCount)
+        {
+            for (int i = 0; i < SideCount - ratioCount; i++)
+            {
+                m_RatioList.Add(0);
+            }
+        }
+    }
+
+    /// <summary>
+    /// 设置比例值列表
+    /// </summary>
+    public void SetRatioList(List<float> ratioList)
+    {
+        for (int i = 0; i < m_RatioList.Count; i++)
+        {
+            if (ratioList.Count - 1 >= i)
+            {
+                m_RatioList[i] = ratioList[i];
+            }
+        }
+        SetVerticesDirty();
+        CalcVertexPos();
+
+        OnRatioValueChanged?.Invoke();
+    }
+
+    /// <summary>
+    /// 设置雷达图
+    /// </summary>
+    public void SetRadarChart()
+    {
+        rectTransform.sizeDelta = new Vector2(m_Radius * 2, m_Radius * 2);
+        InitRatioList();
+    }
+
+    /// <summary>
+    /// 得到比例值列表
+    /// </summary>
+    public List<float> GetRatioList()
+    {
+        return m_RatioList;
+    }
+
+    protected override void OnPopulateMesh(VertexHelper vh)
+    {
+        vh.Clear();
+        m_TempVertexList.Clear();
+
+        GenerateInner(vh);
+        if (m_ShowOutline)
+        {
+            GenerateOutline(vh);
+        }
+    }
+
+    /// <summary>
+    /// 生成雷达图内部
+    /// </summary>
+    void GenerateInner(VertexHelper vh)
+    {
+        Vector4 uv = m_Sprite == null
+             ? Vector4.zero
+             : DataUtility.GetOuterUV(m_Sprite);
+        float uvWidth = uv.z - uv.x;
+        float uvHeight = uv.w - uv.y;
+        float diameter = m_Radius * 2;
+        Vector2 uvCenter = new Vector2((uv.x + uv.z) * 0.5f, (uv.y + uv.w) * 0.5f);
+        Vector3 posCenter = new Vector2((0.5f - rectTransform.pivot.x) * diameter, (0.5f - rectTransform.pivot.y) * diameter);
+        float uvScaleX = uvWidth / diameter;
+        float uvScaleY = uvHeight / diameter;
+        float deltaRad = 2 * Mathf.PI / SideCount;
+
+        float curRad = 0;
+        int vertexCount = SideCount + 1;
+        int triangleCount = SideCount;
+
+        UIVertex vertex = new UIVertex();
+        vh.AddVert(posCenter, color, uvCenter);
+        for (int i = 0; i < vertexCount - 1; i++)
+        {
+            float r = m_RatioList[i] <0.05 ? m_Radius * 0.05f : m_Radius * m_RatioList[i];
+            Vector3 posOffset = new Vector3(r * Mathf.Cos(curRad), r * Mathf.Sin(curRad));
+            vertex.position = posCenter + posOffset;
+            vertex.color = color;
+            vertex.uv0 = new Vector2(uvCenter.x + posOffset.x * uvScaleX, uvCenter.y + posOffset.y * uvScaleY);
+            vh.AddVert(vertex);
+            m_TempVertexList.Add(vertex.position);
+
+            curRad += deltaRad;
+        }
+
+        if (m_ShowInner)
+        {
+            for (int i = 0; i < triangleCount; i++)
+            {
+                vh.AddTriangle(0, i + 1, i + 2 >= vertexCount ? 1 : i + 2);
+            }
+        }
+    }
+
+    /// <summary>
+    /// 生成雷达图描边
+    /// </summary>
+    void GenerateOutline(VertexHelper vh)
+    {
+        int vertexCount = m_TempVertexList.Count + 1;
+        int triangleCount = m_TempVertexList.Count * 2;
+        for (int i = 0; i < m_TempVertexList.Count; i++)
+        {
+            Vector2 curPos = m_TempVertexList[i];
+            Vector2 prePos = i - 1 < 0 ? m_TempVertexList[m_TempVertexList.Count - 1] : m_TempVertexList[i - 1];
+            Vector2 nextPos = m_TempVertexList[(i + 1) % m_TempVertexList.Count];
+            Vector2 dir1 = (curPos - prePos).normalized;
+            Vector2 dir2 = (curPos - nextPos).normalized;
+            Vector2 normal1 = GetNormal(dir1);
+            Vector2 normal2 = GetNormal(-dir2);
+            Vector2 pos1 = prePos + normal1 * m_OutlineData.width;
+            Vector2 pos2 = nextPos + normal2 * m_OutlineData.width;
+            Vector2 crossPoint = GetCrossPoint(pos1, dir1, pos2, dir2);
+
+            vh.AddVert(curPos, m_OutlineData.color, Vector2.zero);
+            vh.AddVert(crossPoint, m_OutlineData.color, Vector2.zero);
+        }
+
+        for (int i = vertexCount; i < m_TempVertexList.Count * 3 + 1; i += 2)
+        {
+            vh.AddTriangle(i, i + 1, i + 3 >= m_TempVertexList.Count * 3 + 1 ? m_TempVertexList.Count + 2 : i + 3);
+            vh.AddTriangle(i, i + 2 >= m_TempVertexList.Count * 3 + 1 ? m_TempVertexList.Count + 1 : i + 2, i + 3 >= m_TempVertexList.Count * 3 + 1 ? m_TempVertexList.Count + 2 : i + 3);
+        }
+    }
+
+    /// <summary>
+    /// 得到法线
+    /// </summary>
+    Vector2 GetNormal(Vector2 dir)
+    {
+        return new Vector2(dir.y, -dir.x);
+    }
+
+    //误差范围
+    const float ERROR_RANGE = 0.001f;
+    /// <summary>
+    /// 得到交点
+    /// </summary>
+    Vector2 GetCrossPoint(Vector2 pos1, Vector2 dir1, Vector2 pos2, Vector2 dir2)
+    {
+        bool parallelToY1 = false;
+        bool parallelToY2 = false;
+
+        float k1;
+        float k2;
+        if (Mathf.Abs(dir1.x) <= ERROR_RANGE
+            || Mathf.Abs(dir1.y) <= ERROR_RANGE)
+        {
+            k1 = 0;
+            if (Mathf.Abs(dir1.x) <= ERROR_RANGE)
+            {
+                parallelToY1 = true;
+            }
+        }
+        else
+        {
+            k1 = dir1.y / dir1.x;
+        }
+        if (Mathf.Abs(dir2.x) <= ERROR_RANGE
+            || Mathf.Abs(dir2.y) <= ERROR_RANGE)
+        {
+            k2 = 0;
+            if (Mathf.Abs(dir2.x) <= ERROR_RANGE)
+            {
+                parallelToY2 = true;
+            }
+        }
+        else
+        {
+            k2 = dir2.y / dir2.x;
+        }
+        float b1 = pos1.y - k1 * pos1.x;
+        float b2 = pos2.y - k2 * pos2.x;
+        if (parallelToY1)
+        {
+            float x = pos1.x;
+            float y = k2 * x + b2;
+            return new Vector2(x, y);
+        }
+        else if (parallelToY2)
+        {
+            float x = pos2.x;
+            float y = k1 * x + b1;
+            return new Vector2(x, y);
+        }
+        else
+        {
+            float x = (b2 - b1) / (k1 - k2);
+            float y = k1 * x + b1;
+            return new Vector2(x, y);
+        }
+    }
+
+    /// <summary>
+    /// 计算顶点位置
+    /// </summary>
+    void CalcVertexPos()
+    {
+        m_VertexList.Clear();
+        float diameter = m_Radius * 2;
+        Vector3 posCenter = new Vector2((0.5f - rectTransform.pivot.x) * diameter, (0.5f - rectTransform.pivot.y) * diameter);
+        float deltaRad = 2 * Mathf.PI / SideCount;
+
+        float curRad = 0;
+        for (int i = 0; i < SideCount; i++)
+        {
+            float r = m_RatioList[i] <0.05 ? m_Radius * 0.05f : m_Radius * m_RatioList[i];
+            Vector3 pos = posCenter + new Vector3(r * Mathf.Cos(curRad), r * Mathf.Sin(curRad));
+            m_VertexList.Add(pos);
+
+            curRad += deltaRad;
+        }
+    }
+}

+ 1 - 1
ActionTowerDefense/Assets/Scripts/UI/RadarTest.cs.meta → ActionTowerDefense/Assets/Scripts/UI/RadarChart.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 405ad38b6fb6fef4eb168c206409ccb1
+guid: 087e598e1064a254aa48295d5e9cddcd
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 0 - 42
ActionTowerDefense/Assets/Scripts/UI/RadarTest.cs

@@ -1,42 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-/// <summary>
-/// 测试雷达图
-/// </summary>
-public class RadarTest : MonoBehaviour
-{
-    public UIPolygon uiPolygon;
-    List<float> datas = new List<float>();
-
-    void Start()
-    {
-        // 防御力
-        datas.Add(0.92f);
-        // 智力
-        datas.Add(0.31f);
-        // 灵巧
-        datas.Add(0.36f);
-        // 力量
-        datas.Add(0.28f);
-        // 敏捷
-        datas.Add(0.35f);
-        uiPolygon.DrawPolygon(datas);
-    }
-
-    private void Update()
-    {
-        if (Input.GetMouseButtonDown(0))
-        {
-            for (int i = 0, cnt = datas.Count; i < cnt; ++i)
-            {
-                datas[i] = Random.Range(0f, 1f);
-            }
-            // 重新随机雷达数据
-            uiPolygon.DrawPolygon(datas);
-        }
-    }
-
-}
-

+ 2 - 8
ActionTowerDefense/Assets/Scripts/UI/ShopUI.cs

@@ -11,15 +11,13 @@ public class ShopUI : MonoBehaviour
     [FoldoutGroup("组件")] public TreasuresSaleUI[] treasuresSaleUI;
     [FoldoutGroup("组件")] public Sprite[] tagsUI;
     [FoldoutGroup("组件")] public TextMeshProUGUI refreshPriceText;
-    [FoldoutGroup("组件")] public UIPolygon uiPolygon;
-    [FoldoutGroup("组件")] public UIPolygon uiPolygon1;
+    [FoldoutGroup("组件")] public RadarChart radarChart;
     public Color[] qualitysIcon;
     public Color[] qualitysText;
     
     [LabelText("标签间隔")] public float interval;
     [LabelText("雷达图初始最大值")] public int polygonInitMax;
     [LabelText("雷达图最大值间隔")] public int polygonMaxInterval;
-    [LabelText("描边宽度")] public float polygonOutline;
     public int refreshPrice;
     public int refreshNum;
     
@@ -107,15 +105,11 @@ public class ShopUI : MonoBehaviour
             range += polygonMaxInterval;
         }
         List<float> polygon = new List<float>();
-        List<float> polygon1 = new List<float>();
-
         for(int i = 0; i < 8; i++)
         {
             float rate = tagsId[i] * 1f / range;
             polygon.Add(rate);
-            polygon1.Add(Mathf.Clamp((rate + 0.05f) * polygonOutline, 0.05f, 1));
         }
-        uiPolygon.DrawPolygon(polygon);
-        uiPolygon1.DrawPolygon(polygon1);
+        radarChart.SetRatioList(polygon);
     }
 }

+ 0 - 238
ActionTowerDefense/Assets/Scripts/UI/UIPolygon.cs

@@ -1,238 +0,0 @@
-using UnityEngine.UI;
-using UnityEngine;
-using System.Collections.Generic;
-
-/// <summary>
-/// UI多边形
-/// </summary>
-public class UIPolygon : MaskableGraphic
-{
-    [SerializeField]
-    Texture m_Texture;
-    /// <summary>
-    /// 填充
-    /// </summary>
-    public bool fill = true;
-
-    /// <summary>
-    /// 是否显示描边
-    /// </summary>
-    public bool showOutline = false;
-
-    /// <summary>
-    /// 描边颜色
-    /// </summary>
-    public Color outlineColor = Color.white;
-
-    /// <summary>
-    /// 描边宽度
-    /// </summary>
-    [Range(1, 10)]
-    public float outlineWidth = 2f;
-
-    /// <summary>
-    /// 边数
-    /// </summary>
-    [Range(3, 360)]
-    public int sides = 3;
-    /// <summary>
-    /// 旋转角度
-    /// </summary>
-    [Range(0, 360)]
-    public float rotation = 0;
-    /// <summary>
-    /// 顶点数组
-    /// </summary>
-    [Range(0, 1)]
-    public float[] VerticesDistances = new float[3];
-
-    private float size = 0;
-
-    public override Texture mainTexture
-    {
-        get
-        {
-            return m_Texture == null ? s_WhiteTexture : m_Texture;
-        }
-    }
-
-    public Texture texture
-    {
-        get
-        {
-            return m_Texture;
-        }
-        set
-        {
-            if (m_Texture == value) return;
-            m_Texture = value;
-            SetVerticesDirty();
-            SetMaterialDirty();
-        }
-    }
-
-    #region 提供外部的接口
-    public void DrawPolygon(int _sides)
-    {
-        sides = _sides;
-        VerticesDistances = new float[_sides + 1];
-        for (int i = 0; i < _sides; i++) VerticesDistances[i] = 1;
-    }
-
-    public void DrawPolygon(List<float> datas)
-    {
-        List<float> finalDatas = new List<float>(datas);
-        sides = finalDatas.Count;
-        // 加上最后一个点,最后一个点与第一个点重合
-        finalDatas.Add(finalDatas[0]);
-        VerticesDistances = finalDatas.ToArray();
-        // 触发重绘
-        SetVerticesDirty();
-    }
-    #endregion
-
-    void Update()
-    {
-        // 根据宽高适配尺寸
-        size = rectTransform.rect.width;
-        if (rectTransform.rect.width > rectTransform.rect.height)
-            size = rectTransform.rect.height;
-        else
-            size = rectTransform.rect.width;
-    }
-
-    protected UIVertex[] SetVertexs(Vector2[] vertices, Vector2[] uvs, Color vertexColor)
-    {
-        UIVertex[] vbo = new UIVertex[4];
-        for (int i = 0; i < vertices.Length; i++)
-        {
-            var vert = UIVertex.simpleVert;
-            vert.color = vertexColor;
-            vert.position = vertices[i];
-            vert.uv0 = uvs[i];
-            vbo[i] = vert;
-        }
-        return vbo;
-    }
-
-    /// <summary>
-    /// 绘制描边
-    /// </summary>
-    private void DrawOutline(VertexHelper vh)
-    {
-        if (!showOutline || outlineWidth <= 0) return;
-
-        float degrees = 360f / sides;
-        int vertices = sides + 1;
-
-        // 确保顶点距离数组长度正确
-        if (VerticesDistances.Length != vertices)
-        {
-            VerticesDistances = new float[vertices];
-            for (int i = 0; i < vertices - 1; i++) VerticesDistances[i] = 1;
-            VerticesDistances[vertices - 1] = VerticesDistances[0];
-        }
-
-        // 绘制每条边的描边
-        for (int i = 0; i < sides; i++)
-        {
-            int nextIndex = (i + 1) % sides;
-
-            float rad1 = Mathf.Deg2Rad * (i * degrees + rotation);
-            float rad2 = Mathf.Deg2Rad * (nextIndex * degrees + rotation);
-
-            float outer1 = -rectTransform.pivot.x * size * VerticesDistances[i];
-            float outer2 = -rectTransform.pivot.x * size * VerticesDistances[nextIndex];
-
-            Vector2 point1 = new Vector2(outer1 * Mathf.Cos(rad1), outer1 * Mathf.Sin(rad1));
-            Vector2 point2 = new Vector2(outer2 * Mathf.Cos(rad2), outer2 * Mathf.Sin(rad2));
-
-            // 计算边的法线方向
-            Vector2 edgeDir = (point2 - point1).normalized;
-            Vector2 normal = new Vector2(-edgeDir.y, edgeDir.x);
-
-            // 计算描边的四个顶点
-            Vector2 offset = normal * outlineWidth * 0.5f;
-            Vector2 p1 = point1 - offset;
-            Vector2 p2 = point1 + offset;
-            Vector2 p3 = point2 + offset;
-            Vector2 p4 = point2 - offset;
-
-            // 添加描边四边形
-            vh.AddUIVertexQuad(SetVertexs(
-                new[] { p1, p2, p3, p4 },
-                new[] { Vector2.zero, Vector2.up, Vector2.one, Vector2.right },
-                outlineColor
-            ));
-        }
-    }
-
-    /// <summary>
-    /// 重写OnPopulateMesh方法
-    /// </summary>
-    /// <param name="vh"></param>
-    protected override void OnPopulateMesh(VertexHelper vh)
-    {
-        vh.Clear();
-
-        // 先绘制描边(在底层)
-        if (showOutline)
-        {
-            DrawOutline(vh);
-        }
-
-        // 然后绘制填充多边形(在顶层)
-        if (fill)
-        {
-            Vector2 prevX = Vector2.zero;
-            Vector2 prevY = Vector2.zero;
-            Vector2 uv0 = new Vector2(0, 0);
-            Vector2 uv1 = new Vector2(0, 1);
-            Vector2 uv2 = new Vector2(1, 1);
-            Vector2 uv3 = new Vector2(1, 0);
-            Vector2 pos0;
-            Vector2 pos1;
-            Vector2 pos2;
-            Vector2 pos3;
-            float degrees = 360f / sides;
-            int vertices = sides + 1;
-
-            if (VerticesDistances.Length != vertices)
-            {
-                VerticesDistances = new float[vertices];
-                for (int i = 0; i < vertices - 1; i++) VerticesDistances[i] = 1;
-            }
-
-            // 最后一个顶点,也即是第一个顶点
-            VerticesDistances[vertices - 1] = VerticesDistances[0];
-
-            for (int i = 0; i < vertices; i++)
-            {
-                float outer = -rectTransform.pivot.x * size * VerticesDistances[i];
-                float inner = -rectTransform.pivot.x * size * VerticesDistances[i];
-                float rad = Mathf.Deg2Rad * (i * degrees + rotation);
-                float c = Mathf.Cos(rad);
-                float s = Mathf.Sin(rad);
-
-                uv0 = new Vector2(0, 1);
-                uv1 = new Vector2(1, 1);
-                uv2 = new Vector2(1, 0);
-                uv3 = new Vector2(0, 0);
-
-                pos0 = prevX;
-                pos1 = new Vector2(outer * c, outer * s);
-                pos2 = Vector2.zero; // 填充模式下,内部点为中心点
-                pos3 = Vector2.zero;
-
-                prevX = pos1;
-                prevY = pos2;
-
-                vh.AddUIVertexQuad(SetVertexs(
-                    new[] { pos0, pos1, pos2, pos3 },
-                    new[] { uv0, uv1, uv2, uv3 },
-                    color
-                ));
-            }
-        }
-    }
-}

+ 0 - 11
ActionTowerDefense/Assets/Scripts/UI/UIPolygon.cs.meta

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