百科bug修复
This commit is contained in:
parent
3783e5395a
commit
f8a167ad3c
@ -1,5 +1,5 @@
|
||||
{
|
||||
"nextId": 73,
|
||||
"nextId": 74,
|
||||
"bugs": [
|
||||
{
|
||||
"id": 2,
|
||||
@ -710,6 +710,16 @@
|
||||
"module": "",
|
||||
"createdAt": 1777718940367,
|
||||
"updatedAt": 1777718940367
|
||||
},
|
||||
{
|
||||
"id": 73,
|
||||
"title": "背盟状态优化一下!",
|
||||
"description": "",
|
||||
"status": "open",
|
||||
"priority": "medium",
|
||||
"module": "",
|
||||
"createdAt": 1777737738169,
|
||||
"updatedAt": 1777737738169
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -3,7 +3,7 @@ guid: b86c5e194ac9d974cb373f767feced21
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
@ -72,7 +72,7 @@ TextureImporter:
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 2
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
@ -82,19 +82,6 @@ TextureImporter:
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 1024
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: 10
|
||||
textureCompression: 1
|
||||
compressionQuality: 80
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 1
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
|
||||
@ -3316,72 +3316,6 @@ MonoBehaviour:
|
||||
NoNeedTech: 0
|
||||
SpriteSize: {x: 120, y: 120}
|
||||
SpritePos: {x: 0, y: 20}
|
||||
- ActionId:
|
||||
ActionType: 6
|
||||
WonderType: 0
|
||||
ResourceType: 0
|
||||
FeatureType: 0
|
||||
TerrainType: 0
|
||||
UnitType: 0
|
||||
GiantType: 0
|
||||
UnitLevel: 0
|
||||
Vegetation: 0
|
||||
UnitActionType: 8
|
||||
CityLevelUpActionType: 0
|
||||
GridMiscActionType: 0
|
||||
SkillType: 0
|
||||
TechType: 0
|
||||
PlayerActionType: 0
|
||||
AIParamType: 0
|
||||
CultureCardType: 0
|
||||
ActionName: "\u7687\u5BB6\u70C8\u7130"
|
||||
Desc: "\u5BF9\u5468\u56F41\u683C\u5355\u4F4D\u5185\u7684\u76EE\u6807\u9020\u6210\u9AD8\u989D\u4F24\u5BB3\uFF0C\u5BF9\u5468\u56F42\u683C\u8303\u56F4\u7684\u5355\u4F4D\u9020\u6210\u6E85\u5C04\u4F24\u5BB3\u3002"
|
||||
NeedTechDesc: 0
|
||||
TechDesc:
|
||||
NeedLockDesc: 0
|
||||
LockDesc:
|
||||
Icon: {fileID: 21300000, guid: 7f9bbece8534c1748ae0c25bd347f09e, type: 3}
|
||||
IconViewSizeType: 0
|
||||
VarientIcon: 0
|
||||
IconList: []
|
||||
Cost: 0
|
||||
CityExp: 0
|
||||
NoNeedTech: 1
|
||||
SpriteSize: {x: 0, y: 0}
|
||||
SpritePos: {x: 0, y: 0}
|
||||
- ActionId:
|
||||
ActionType: 6
|
||||
WonderType: 0
|
||||
ResourceType: 0
|
||||
FeatureType: 0
|
||||
TerrainType: 0
|
||||
UnitType: 0
|
||||
GiantType: 0
|
||||
UnitLevel: 0
|
||||
Vegetation: 0
|
||||
UnitActionType: 9
|
||||
CityLevelUpActionType: 0
|
||||
GridMiscActionType: 0
|
||||
SkillType: 0
|
||||
TechType: 0
|
||||
PlayerActionType: 0
|
||||
AIParamType: 0
|
||||
CultureCardType: 0
|
||||
ActionName: "\u7687\u5BB6\u70C8\u7130+"
|
||||
Desc: "\u5BF9\u5468\u56F41\u683C\u5355\u4F4D\u5185\u7684\u76EE\u6807\u9020\u6210\u9AD8\u989D\u4F24\u5BB3\uFF0C\u5BF9\u5468\u56F43\u683C\u8303\u56F4\u7684\u5355\u4F4D\u9020\u6210\u6E85\u5C04\u4F24\u5BB3\u3002"
|
||||
NeedTechDesc: 0
|
||||
TechDesc:
|
||||
NeedLockDesc: 0
|
||||
LockDesc:
|
||||
Icon: {fileID: 21300000, guid: 7f9bbece8534c1748ae0c25bd347f09e, type: 3}
|
||||
IconViewSizeType: 0
|
||||
VarientIcon: 0
|
||||
IconList: []
|
||||
Cost: 0
|
||||
CityExp: 0
|
||||
NoNeedTech: 1
|
||||
SpriteSize: {x: 0, y: 0}
|
||||
SpritePos: {x: 0, y: 0}
|
||||
- ActionId:
|
||||
ActionType: 6
|
||||
WonderType: 0
|
||||
|
||||
@ -385,20 +385,6 @@ MonoBehaviour:
|
||||
ReserveLeaveCarry: 0
|
||||
ReserveGiantUpgrade: 0
|
||||
ReserveCommonTransform: 0
|
||||
- SkillType: 18
|
||||
SkillViewType: 0
|
||||
SkillName:
|
||||
SkillDesc:
|
||||
NotShow: 0
|
||||
ShowOnUnitMono: 0
|
||||
SkillIcon: {fileID: 0}
|
||||
HasShowList: 0
|
||||
SkillShowList: []
|
||||
skillPriority: 0
|
||||
ReserveOnCarry: 0
|
||||
ReserveLeaveCarry: 0
|
||||
ReserveGiantUpgrade: 0
|
||||
ReserveCommonTransform: 0
|
||||
- SkillType: 19
|
||||
SkillViewType: 0
|
||||
SkillName: "\u79FB\u52A8\u6E85\u5C04"
|
||||
@ -489,34 +475,6 @@ MonoBehaviour:
|
||||
ReserveLeaveCarry: 0
|
||||
ReserveGiantUpgrade: 0
|
||||
ReserveCommonTransform: 0
|
||||
- SkillType: 30
|
||||
SkillViewType: 0
|
||||
SkillName:
|
||||
SkillDesc:
|
||||
NotShow: 0
|
||||
ShowOnUnitMono: 0
|
||||
SkillIcon: {fileID: 0}
|
||||
HasShowList: 0
|
||||
SkillShowList: []
|
||||
skillPriority: 0
|
||||
ReserveOnCarry: 0
|
||||
ReserveLeaveCarry: 0
|
||||
ReserveGiantUpgrade: 0
|
||||
ReserveCommonTransform: 0
|
||||
- SkillType: 31
|
||||
SkillViewType: 0
|
||||
SkillName:
|
||||
SkillDesc:
|
||||
NotShow: 0
|
||||
ShowOnUnitMono: 0
|
||||
SkillIcon: {fileID: 0}
|
||||
HasShowList: 0
|
||||
SkillShowList: []
|
||||
skillPriority: 0
|
||||
ReserveOnCarry: 0
|
||||
ReserveLeaveCarry: 0
|
||||
ReserveGiantUpgrade: 0
|
||||
ReserveCommonTransform: 0
|
||||
- SkillType: 32
|
||||
SkillViewType: 1
|
||||
SkillName: "\u82F1\u96C4\u5355\u4F4D"
|
||||
@ -531,34 +489,6 @@ MonoBehaviour:
|
||||
ReserveLeaveCarry: 0
|
||||
ReserveGiantUpgrade: 0
|
||||
ReserveCommonTransform: 0
|
||||
- SkillType: 33
|
||||
SkillViewType: 0
|
||||
SkillName:
|
||||
SkillDesc:
|
||||
NotShow: 0
|
||||
ShowOnUnitMono: 0
|
||||
SkillIcon: {fileID: 0}
|
||||
HasShowList: 0
|
||||
SkillShowList: []
|
||||
skillPriority: 0
|
||||
ReserveOnCarry: 0
|
||||
ReserveLeaveCarry: 0
|
||||
ReserveGiantUpgrade: 0
|
||||
ReserveCommonTransform: 0
|
||||
- SkillType: 34
|
||||
SkillViewType: 0
|
||||
SkillName:
|
||||
SkillDesc:
|
||||
NotShow: 0
|
||||
ShowOnUnitMono: 0
|
||||
SkillIcon: {fileID: 0}
|
||||
HasShowList: 0
|
||||
SkillShowList: []
|
||||
skillPriority: 0
|
||||
ReserveOnCarry: 0
|
||||
ReserveLeaveCarry: 0
|
||||
ReserveGiantUpgrade: 0
|
||||
ReserveCommonTransform: 0
|
||||
- SkillType: 35
|
||||
SkillViewType: 0
|
||||
SkillName: "\u57CE\u5E02\u4F20\u9001"
|
||||
|
||||
@ -587,6 +587,90 @@ MonoBehaviour:
|
||||
ID: 19528
|
||||
FontID: 0
|
||||
TextCfg: []
|
||||
--- !u!1 &2166778125900124478
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6548214083712515793}
|
||||
- component: {fileID: 8497522070587209775}
|
||||
- component: {fileID: 5861299045258570600}
|
||||
- component: {fileID: 5487321995839065240}
|
||||
m_Layer: 5
|
||||
m_Name: GridGroup
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &6548214083712515793
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2166778125900124478}
|
||||
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: 2960578512072476292}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 346.02704, y: -10}
|
||||
m_SizeDelta: {x: 692.0541, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &8497522070587209775
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2166778125900124478}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &5861299045258570600
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2166778125900124478}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_HorizontalFit: 0
|
||||
m_VerticalFit: 2
|
||||
--- !u!114 &5487321995839065240
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2166778125900124478}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 8a8695521f0d02e499659fee002a26c2, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 0
|
||||
m_StartCorner: 0
|
||||
m_StartAxis: 0
|
||||
m_CellSize: {x: 140, y: 30}
|
||||
m_Spacing: {x: 5, y: 0}
|
||||
m_Constraint: 0
|
||||
m_ConstraintCount: 2
|
||||
--- !u!1 &2215917542491966575
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -626,6 +710,7 @@ RectTransform:
|
||||
- {fileID: 2674426050906365004}
|
||||
- {fileID: 1016575307829893954}
|
||||
- {fileID: 5192563354822985849}
|
||||
- {fileID: 2960578512072476292}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
@ -689,7 +774,7 @@ MonoBehaviour:
|
||||
UnitInfoGroup: {fileID: 4834928516657227807}
|
||||
UnitSkillGroup: {fileID: 6669863128309909444}
|
||||
HeroUpgradeGroup: {fileID: 9101884546974498372}
|
||||
TechLockGroup: {fileID: 2337170077994540037}
|
||||
CommonGridItemDescGroup: {fileID: 6909818060879782716}
|
||||
TitleText: {fileID: 7965783891130610835}
|
||||
DescText: {fileID: 8851566629389897434}
|
||||
UnitInfoAttackTxt: {fileID: 517234351961644657}
|
||||
@ -701,7 +786,8 @@ MonoBehaviour:
|
||||
SkillCircleArea: {fileID: 8664535126158727785}
|
||||
SkillCirclePrefab: {fileID: 4360640776861055532, guid: 63ad2da40f8ceb74080c8f8a014d1bdc, type: 3}
|
||||
HeroUpgradeDescText: {fileID: 4363202444080834106}
|
||||
TechLockDescText: {fileID: 770051044440875700}
|
||||
GridGroup: {fileID: 6548214083712515793}
|
||||
GridItemPrefab: {fileID: 1290847562389455671, guid: 5b3e30174d3d12a46a034556506a9c65, type: 3}
|
||||
PlayerTechPoolGroup: {fileID: 58106919248076413}
|
||||
PlayerTechPoolLv1Text: {fileID: 5477750344117662252}
|
||||
PlayerTechPoolLv2Text: {fileID: 7409200840167881465}
|
||||
@ -2179,6 +2265,84 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier:
|
||||
m_HorizontalFit: 0
|
||||
m_VerticalFit: 2
|
||||
--- !u!1 &6909818060879782716
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2960578512072476292}
|
||||
- component: {fileID: 8535708960623307618}
|
||||
- component: {fileID: 4732812403384513881}
|
||||
m_Layer: 5
|
||||
m_Name: CommonGridItemDesc
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!224 &2960578512072476292
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6909818060879782716}
|
||||
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: 6548214083712515793}
|
||||
m_Father: {fileID: 7949361260912353484}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 358.655, y: -68.862}
|
||||
m_SizeDelta: {x: 717.31, y: 20}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &8535708960623307618
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6909818060879782716}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 10
|
||||
m_Bottom: 10
|
||||
m_ChildAlignment: 0
|
||||
m_Spacing: 5
|
||||
m_ChildForceExpandWidth: 0
|
||||
m_ChildForceExpandHeight: 0
|
||||
m_ChildControlWidth: 0
|
||||
m_ChildControlHeight: 0
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!114 &4732812403384513881
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6909818060879782716}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_HorizontalFit: 0
|
||||
m_VerticalFit: 2
|
||||
--- !u!1 &7345957065528861176
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@ -0,0 +1,272 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3389767439914072609
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4352498928066414512}
|
||||
- component: {fileID: 3528661208874349432}
|
||||
- component: {fileID: 7266380939716781321}
|
||||
m_Layer: 5
|
||||
m_Name: Text
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4352498928066414512
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3389767439914072609}
|
||||
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: 2468592900116520049}
|
||||
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.3777, y: 0}
|
||||
m_SizeDelta: {x: 138.8032, y: 40}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3528661208874349432
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3389767439914072609}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &7266380939716781321
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3389767439914072609}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u79D1\u62801"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8e119f168f1a6b745be02ef19f51610f, type: 2}
|
||||
m_sharedMaterial: {fileID: -8081454072124122709, guid: 8e119f168f1a6b745be02ef19f51610f, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4286414205
|
||||
m_fontColor: {r: 0.49056602, g: 0.49056602, b: 0.49056602, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 20
|
||||
m_fontSizeBase: 20
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 24
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 1
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!1 &5754249080142146628
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2468592900116520049}
|
||||
- component: {fileID: 4629897242281628367}
|
||||
- component: {fileID: 5670061094075235227}
|
||||
- component: {fileID: 751107179801170817}
|
||||
- component: {fileID: 1290847562389455671}
|
||||
m_Layer: 5
|
||||
m_Name: UIOutsideWikiDescGroupGridItem
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2468592900116520049
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5754249080142146628}
|
||||
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: 4352498928066414512}
|
||||
m_Father: {fileID: 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.5, y: 0.5}
|
||||
--- !u!222 &4629897242281628367
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5754249080142146628}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &5670061094075235227
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5754249080142146628}
|
||||
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: 21300000, guid: df39380aaef39404eaf3e0e9183c785c, type: 3}
|
||||
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: 2.5
|
||||
--- !u!114 &751107179801170817
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5754249080142146628}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, 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: 5670061094075235227}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!114 &1290847562389455671
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5754249080142146628}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2b9e7c41a18d4f9ea6c3d5713f8a9c10, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Button: {fileID: 751107179801170817}
|
||||
Text: {fileID: 7266380939716781321}
|
||||
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5b3e30174d3d12a46a034556506a9c65
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -38,8 +38,9 @@ namespace Logic
|
||||
_main = main;
|
||||
}
|
||||
|
||||
// 返回带后缀的 ForceName 显示文本。同 Empire (Civ+Force) 多个玩家时,按 PlayerDataList 顺序追加 " 1P"/" 2P"...
|
||||
// 仅当 mapData.PlayerMap 中存在多名同 Empire 的 PlayerData 时才追加后缀;唯一 Empire 不变。
|
||||
// 返回带后缀的 ForceName 显示文本。同 Empire (Civ+Force) 出现 ≥2 次时,
|
||||
// 用该玩家在 PlayerDataList 中的全局位置 (1-based) 追加 " {idx}P"。
|
||||
// 例:6 名玩家中第 4、第 6 是同阵营,则显示 "斯卡雷特帝国 4P" / "斯卡雷特帝国 6P"。
|
||||
public static string GetDisplayForceName(MapData mapData, PlayerData player)
|
||||
{
|
||||
if (player == null) return string.Empty;
|
||||
@ -47,16 +48,18 @@ namespace Logic
|
||||
var raw = MultilingualManager.Instance.GetMultilingualTextSafe(info.ForceName);
|
||||
if (mapData == null || mapData.PlayerMap == null) return raw;
|
||||
|
||||
var list = mapData.PlayerMap.PlayerDataList;
|
||||
int sameCount = 0;
|
||||
int orderIdx = 0;
|
||||
foreach (var p in mapData.PlayerMap.PlayerDataList)
|
||||
int globalIdx = -1;
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
var p = list[i];
|
||||
if (p.PlayerCivId != player.PlayerCivId || p.PlayerForceId != player.PlayerForceId) continue;
|
||||
sameCount++;
|
||||
if (p.Id == player.Id) orderIdx = sameCount;
|
||||
if (p.Id == player.Id) globalIdx = i + 1;
|
||||
}
|
||||
if (sameCount <= 1) return raw;
|
||||
return $"{raw} {orderIdx}P";
|
||||
if (sameCount <= 1 || globalIdx < 0) return raw;
|
||||
return $"{raw} {globalIdx}P";
|
||||
}
|
||||
|
||||
public void UpdateWonder(MapData mapData, PlayerData player,WonderTypeEnum specificWonder = WonderTypeEnum.None)
|
||||
|
||||
@ -76,6 +76,7 @@ namespace TH1_Logic.MatchConfig
|
||||
PlayerTechPool,//拥有科技池
|
||||
HasTechAtom,//拥有科技子条目
|
||||
HasInitTechAtom,//拥有初始科技子条目
|
||||
BelongTech,//科技子条目属于什么科技?
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -25,15 +25,17 @@ public class UIOutsideMultiplayMemberRowMono : MonoBehaviour
|
||||
// Start is called before the first frame update
|
||||
private CivEnum _civ;
|
||||
private ForceEnum _force;
|
||||
private string _forceNameOverride;
|
||||
public bool CheckParam()
|
||||
{
|
||||
return AvatarImage != null && NameText != null &&
|
||||
ForcesText != null && StatusText != null; // && CivButton != null && ForcesButton != null;*/
|
||||
}
|
||||
|
||||
public void SetContent(MemberInfo info,string status,CivEnum civ,SteamLobbyManager lobby)
|
||||
public void SetContent(MemberInfo info,string status,CivEnum civ,SteamLobbyManager lobby, string forceNameOverride = null)
|
||||
{
|
||||
if (!CheckParam()) return;
|
||||
_forceNameOverride = forceNameOverride;
|
||||
NameText.text = info.Name;
|
||||
var texture = info.Texture;
|
||||
_lobby = lobby;
|
||||
@ -78,7 +80,10 @@ public class UIOutsideMultiplayMemberRowMono : MonoBehaviour
|
||||
_civ = civ;
|
||||
_force = force;
|
||||
if (!Table.Instance.PlayerDataAssets.GetPlayerInfo(_civ, _force, out var playerInfo)) return;
|
||||
MultilingualManager.Instance.SetUIText(ForcesText,playerInfo.ForceName);
|
||||
if (!string.IsNullOrEmpty(_forceNameOverride))
|
||||
ForcesText.text = _forceNameOverride;
|
||||
else
|
||||
MultilingualManager.Instance.SetUIText(ForcesText,playerInfo.ForceName);
|
||||
LeaderImage.sprite = playerInfo.LeaderIllustration;
|
||||
//MultilingualManager.Instance.SetUIText(CivButtonText,playerInfo.CivName);
|
||||
//设置按钮颜色(和阵营一致)
|
||||
|
||||
@ -307,9 +307,18 @@ namespace TH1_UI.View.Outside
|
||||
|
||||
|
||||
var memberList = _lobby.GetAllMemberInfo();
|
||||
//Debug.Log("memberList count is " + memberList.Count);
|
||||
var multiCivs = Main.Instance.MapConfig.MultiCivs;
|
||||
// 按 MultiCivs 顺序渲染(与游戏内 PlayerDataList 中真人玩家顺序一致),
|
||||
// 这样大厅显示的全局位置与进入游戏后的 nP 编号对齐。
|
||||
// 不在 memberList 中的 MultiCiv 视为离线,跳过。
|
||||
var orderedMemberCivs = new List<MemberCiv>();
|
||||
foreach (var mc in multiCivs)
|
||||
{
|
||||
if (memberList.ContainsKey(mc.MemberId)) orderedMemberCivs.Add(mc);
|
||||
}
|
||||
|
||||
//如果目前的list内对象不够,补足
|
||||
while (_memberRowList.Count < memberList.Count)
|
||||
while (_memberRowList.Count < orderedMemberCivs.Count)
|
||||
{
|
||||
var item = Instantiate(MemberRowPrefab,MemberList.transform);
|
||||
//item.transform.localPosition = Vector3.zero;
|
||||
@ -317,19 +326,43 @@ namespace TH1_UI.View.Outside
|
||||
_memberRowList.Add(cpn);
|
||||
}
|
||||
for (int i = 0; i < _memberRowList.Count; i++)
|
||||
_memberRowList[i].gameObject.SetActive(i < memberList.Count);
|
||||
|
||||
//设置真人玩家行
|
||||
int ct = 0;
|
||||
foreach (var kv in memberList)
|
||||
_memberRowList[i].gameObject.SetActive(i < orderedMemberCivs.Count);
|
||||
|
||||
// 统计每个 (CivId,ForceId) 在已选择阵营的成员中的出现次数;
|
||||
// 仅当 ≥2 时该位置的成员需要显示 nP 后缀。CivId==0 视为未选择,不参与统计。
|
||||
var sameCountDict = new Dictionary<(uint, uint), int>();
|
||||
foreach (var mc in orderedMemberCivs)
|
||||
{
|
||||
var status = _lobby.GetLobbyOwnerId() == kv.Key
|
||||
if (mc.CivId == 0) continue;
|
||||
var key = (mc.CivId, mc.ForceId);
|
||||
sameCountDict.TryGetValue(key, out var prevCnt);
|
||||
sameCountDict[key] = prevCnt + 1;
|
||||
}
|
||||
|
||||
//设置真人玩家行
|
||||
for (int idx = 0; idx < orderedMemberCivs.Count; idx++)
|
||||
{
|
||||
var mc = orderedMemberCivs[idx];
|
||||
var info = memberList[mc.MemberId];
|
||||
var status = _lobby.GetLobbyOwnerId() == mc.MemberId
|
||||
? Table.Instance.TextDataAssets.OutsideMultiplayTitleHost
|
||||
: Table.Instance.TextDataAssets.OutsideMultiplayTitleGuest;
|
||||
uint civId = (Main.Instance.MapConfig.GetMemberCiv(kv.Value.Id)?.CivId) ?? 0;
|
||||
var civ = Table.Instance.TransCivIdToCivEnum(civId);
|
||||
_memberRowList[ct].SetContent(kv.Value, status, civ,_lobby);
|
||||
ct++;
|
||||
var civ = Table.Instance.TransCivIdToCivEnum(mc.CivId);
|
||||
var force = Table.Instance.TransForceIdToForceEnum(mc.ForceId);
|
||||
|
||||
string forceNameOverride = null;
|
||||
if (mc.CivId != 0 && sameCountDict.TryGetValue((mc.CivId, mc.ForceId), out var sameCnt) && sameCnt >= 2)
|
||||
{
|
||||
if (Table.Instance.PlayerDataAssets.GetPlayerInfo(civ, force, out var pi))
|
||||
{
|
||||
var raw = MultilingualManager.Instance.GetMultilingualTextSafe(pi.ForceName);
|
||||
// 全局位置 = 该成员在 PlayerDataList 中的 1-based index = MultiCivs 中的 1-based index
|
||||
int globalIdx = multiCivs.IndexOf(mc) + 1;
|
||||
forceNameOverride = $"{raw} {globalIdx}P";
|
||||
}
|
||||
}
|
||||
|
||||
_memberRowList[idx].SetContent(info, status, civ, _lobby, forceNameOverride);
|
||||
}
|
||||
|
||||
//Step #3 设置 是否继续上一个存档的toggle
|
||||
|
||||
@ -83,6 +83,7 @@ namespace TH1_UI.View.Outside
|
||||
ClearWikiList();
|
||||
ClearTitle();
|
||||
InitCloseButtons();
|
||||
WikiSub.WikiDescGroup.OnRequestWikiJump += HandleWikiJumpRequest;
|
||||
}
|
||||
|
||||
private void InitCloseButtons()
|
||||
@ -594,11 +595,153 @@ namespace TH1_UI.View.Outside
|
||||
|
||||
protected override void OnDispose()
|
||||
{
|
||||
WikiSub.WikiDescGroup.OnRequestWikiJump -= HandleWikiJumpRequest;
|
||||
ClearBigSelectButtons();
|
||||
ClearSmallSelectButtons();
|
||||
ClearWikiList();
|
||||
ClearDescArea();
|
||||
base.OnDispose();
|
||||
}
|
||||
|
||||
// GridItem 点击跳转:在已有的 BigSelectGroups 内找一个能匹配 wikiId 对应 WikiItem.Types 的
|
||||
// (Big, Small?) 组合,依次触发 BigSelectButton.click → SmallSelectButton.click → WikiList 选中。
|
||||
// 找不到任何能容纳此 wikiId 的 group 就不切(按需求)。
|
||||
private void HandleWikiJumpRequest(uint wikiId)
|
||||
{
|
||||
var wikiData = Table.Instance != null ? Table.Instance.WikiData : null;
|
||||
if (wikiData == null) return;
|
||||
var target = wikiData.GetById(wikiId);
|
||||
if (target == null) return;
|
||||
if (target.Types == null || target.Types.Count == 0) return;
|
||||
|
||||
if (!TryResolveJumpRoute(target, out var bigType, out var smallType, out var hasSmall)) return;
|
||||
|
||||
// 1) 触发 Big 按钮(SetSelected 视觉 + 通知 Controller 重建 Small)
|
||||
var bigBtn = FindBigButton(bigType);
|
||||
if (bigBtn == null || bigBtn.Button == null) return;
|
||||
bigBtn.Button.onClick.Invoke();
|
||||
|
||||
// 2) 触发 Small 按钮(如果该 Big 下有 Small 子分类)
|
||||
if (hasSmall)
|
||||
{
|
||||
var smallBtn = FindSmallButton(smallType);
|
||||
if (smallBtn == null || smallBtn.Button == null) return;
|
||||
smallBtn.Button.onClick.Invoke();
|
||||
}
|
||||
|
||||
// 3) 在已经刷新好的 _wikiListItems 里点中目标 wikiId,并把它滚到可视区
|
||||
for (int i = 0; i < _wikiListItems.Count; i++)
|
||||
{
|
||||
var it = _wikiListItems[i];
|
||||
if (it == null || it.Button == null) continue;
|
||||
if (it.WikiItemId != wikiId) continue;
|
||||
it.Button.onClick.Invoke();
|
||||
ScrollWikiListItemIntoView(it);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 把指定的 WikiListItem 滚到 ScrollRect 的可视区中央。
|
||||
// ScrollRect 没在 prefab 上单独 expose,运行时从 WikiListContent 沿父链找第一个。
|
||||
// 注意:列表是 RefreshWikiList 后立刻调用此方法,需要先 ForceRebuildLayout 让 Content
|
||||
// 的高度和子节点位置都已经确定,否则 anchoredPosition.y 可能还是 0。
|
||||
private void ScrollWikiListItemIntoView(WikiListItem item)
|
||||
{
|
||||
if (item == null) return;
|
||||
var content = WikiListContent as RectTransform;
|
||||
if (content == null) return;
|
||||
|
||||
var scroll = FindParentScrollRect(content);
|
||||
if (scroll == null) return;
|
||||
var viewport = scroll.viewport != null ? scroll.viewport : content.parent as RectTransform;
|
||||
if (viewport == null) return;
|
||||
|
||||
Canvas.ForceUpdateCanvases();
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(content);
|
||||
|
||||
var target = item.transform as RectTransform;
|
||||
if (target == null) return;
|
||||
|
||||
float contentHeight = content.rect.height;
|
||||
float viewportHeight = viewport.rect.height;
|
||||
// Content 比 Viewport 矮的时候不需要滚
|
||||
if (contentHeight <= viewportHeight) return;
|
||||
|
||||
// target 在 content 局部空间下的中心 Y(content pivot 默认是 (0.5,1),y 向下为负)
|
||||
// 用 target.localPosition.y 即可(已是相对 content)
|
||||
float targetY = -target.localPosition.y; // 转成"距 content 顶部"的正向距离
|
||||
float scrollableRange = contentHeight - viewportHeight;
|
||||
// verticalNormalizedPosition: 1 = 顶部,0 = 底部
|
||||
// 让 target 中心对齐 viewport 中心:顶部需要让出 (targetY - viewportHeight/2)
|
||||
float topOffset = Mathf.Clamp(targetY - viewportHeight * 0.5f, 0f, scrollableRange);
|
||||
scroll.verticalNormalizedPosition = 1f - topOffset / scrollableRange;
|
||||
}
|
||||
|
||||
private static ScrollRect FindParentScrollRect(Transform start)
|
||||
{
|
||||
var t = start;
|
||||
while (t != null)
|
||||
{
|
||||
var sr = t.GetComponent<ScrollRect>();
|
||||
if (sr != null) return sr;
|
||||
t = t.parent;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private bool TryResolveJumpRoute(WikiItem target, out WikiType bigType, out WikiType smallType, out bool hasSmall)
|
||||
{
|
||||
bigType = default;
|
||||
smallType = default;
|
||||
hasSmall = false;
|
||||
if (SelectGroups == null) return false;
|
||||
|
||||
// target.Types 的顺序里,BigType* 总是先于 SmallType*;遍历 SelectGroups 找可命中的组合
|
||||
for (int g = 0; g < SelectGroups.Count; g++)
|
||||
{
|
||||
var grp = SelectGroups[g];
|
||||
if (grp == null) continue;
|
||||
if (!target.Types.Contains(grp.BigType)) continue;
|
||||
|
||||
if (grp.SmallTypes == null || grp.SmallTypes.Count == 0)
|
||||
{
|
||||
bigType = grp.BigType;
|
||||
hasSmall = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
for (int s = 0; s < grp.SmallTypes.Count; s++)
|
||||
{
|
||||
if (!target.Types.Contains(grp.SmallTypes[s])) continue;
|
||||
bigType = grp.BigType;
|
||||
smallType = grp.SmallTypes[s];
|
||||
hasSmall = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private BigSelectButton FindBigButton(WikiType bigType)
|
||||
{
|
||||
for (int i = 0; i < _bigSelectButtons.Count; i++)
|
||||
{
|
||||
var b = _bigSelectButtons[i];
|
||||
if (b == null) continue;
|
||||
if (b.WikiType.Equals(bigType)) return b;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private SmallSelectButton FindSmallButton(WikiType smallType)
|
||||
{
|
||||
for (int i = 0; i < _smallSelectButtons.Count; i++)
|
||||
{
|
||||
var b = _smallSelectButtons[i];
|
||||
if (b == null) continue;
|
||||
if (b.WikiType.Equals(smallType)) return b;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,47 @@
|
||||
using Logic.Multilingual;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace TH1_UI.View.Outside.WikiSub
|
||||
{
|
||||
// 通用 GridItem:CommonGridItemDesc/GridGroup 下的可点击条目
|
||||
// 文本可以是多语言 key(数字字符串)或原始字符串;wikiId 用于点击后跳转。
|
||||
// 当 wikiId == 0 时不发起跳转。
|
||||
public class UIOutsideWikiDescGroupGridItemMono : MonoBehaviour
|
||||
{
|
||||
public Button Button;
|
||||
public TextMeshProUGUI Text;
|
||||
|
||||
public uint WikiId { get; private set; }
|
||||
|
||||
public void SetContent(string text, uint wikiId)
|
||||
{
|
||||
WikiId = wikiId;
|
||||
|
||||
if (Text != null)
|
||||
{
|
||||
var ml = Text.GetComponent<MultilingualTextMono>();
|
||||
if (ml != null) ml.ID = 0;
|
||||
|
||||
if (!string.IsNullOrEmpty(text) && uint.TryParse(text, out _))
|
||||
MultilingualManager.Instance.SetUIText(Text, text);
|
||||
else
|
||||
Text.text = text ?? string.Empty;
|
||||
}
|
||||
|
||||
if (Button == null) Button = GetComponent<Button>();
|
||||
if (Button != null)
|
||||
{
|
||||
Button.onClick.RemoveAllListeners();
|
||||
Button.onClick.AddListener(HandleClick);
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleClick()
|
||||
{
|
||||
if (WikiId == 0) return;
|
||||
WikiDescGroup.RequestWikiJump(WikiId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2b9e7c41a18d4f9ea6c3d5713f8a9c10
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Logic.Multilingual;
|
||||
using Logic.Skill;
|
||||
@ -12,13 +13,23 @@ namespace TH1_UI.View.Outside.WikiSub
|
||||
{
|
||||
public class WikiDescGroup : MonoBehaviour
|
||||
{
|
||||
// GridItem 点击跳转用:由子节点的 GridItem Mono 触发,WikiView 在 OnInit/OnDispose
|
||||
// 订阅/退订即可。这里走 static 是因为 Wiki 同一时刻只会有一个 View,且子 GridItem
|
||||
// 与 WikiView 隔了好几层,不想让每个 GridItem 都持有 View 引用。
|
||||
public static event Action<uint> OnRequestWikiJump;
|
||||
public static void RequestWikiJump(uint wikiId)
|
||||
{
|
||||
if (wikiId == 0) return;
|
||||
OnRequestWikiJump?.Invoke(wikiId);
|
||||
}
|
||||
|
||||
// 互斥的容器:根据 DescType 切换显示,由 SetContent 内部统一管理
|
||||
[Header("Containers")]
|
||||
public GameObject BaseDescGroup;
|
||||
public GameObject UnitInfoGroup;
|
||||
public GameObject UnitSkillGroup;
|
||||
public GameObject HeroUpgradeGroup;
|
||||
public GameObject TechLockGroup;
|
||||
public GameObject CommonGridItemDescGroup;
|
||||
|
||||
// 普通文本模式
|
||||
[Header("Base Desc")]
|
||||
@ -43,9 +54,11 @@ namespace TH1_UI.View.Outside.WikiSub
|
||||
[Header("HeroUpgrade")]
|
||||
public TextMeshProUGUI HeroUpgradeDescText;
|
||||
|
||||
// TechLock(解锁此 Action 的 TechAtom 名称,逗号拼接)
|
||||
[Header("TechLock")]
|
||||
public TextMeshProUGUI TechLockDescText;
|
||||
// CommonGridItemDesc:通用 Grid 列表,支持 TechLock 等场景。
|
||||
// 每个 desc 段会按需要 spawn 多个 GridItem 到 GridGroup 下。
|
||||
[Header("CommonGridItemDesc")]
|
||||
public Transform GridGroup;
|
||||
public UIOutsideWikiDescGroupGridItemMono GridItemPrefab;
|
||||
|
||||
// PlayerTechPool(Force 拥有的 TechPool,按 CostLevel 1/2/3 拆 3 段)
|
||||
[Header("PlayerTechPool")]
|
||||
@ -57,6 +70,7 @@ namespace TH1_UI.View.Outside.WikiSub
|
||||
public WikiDescType DescType { get; private set; }
|
||||
|
||||
private readonly List<GameObject> _spawnedSkillCircles = new List<GameObject>();
|
||||
private readonly List<UIOutsideWikiDescGroupGridItemMono> _spawnedGridItems = new List<UIOutsideWikiDescGroupGridItemMono>();
|
||||
|
||||
// 返回 false 表示该 DescItem 在当前条目下没有可显示内容,调用方应销毁此 group。
|
||||
public bool SetContent(WikiItem owner, DescItem descItem)
|
||||
@ -77,8 +91,9 @@ namespace TH1_UI.View.Outside.WikiSub
|
||||
SetActiveSafe(UnitInfoGroup, false);
|
||||
SetActiveSafe(UnitSkillGroup, false);
|
||||
SetActiveSafe(HeroUpgradeGroup, false);
|
||||
SetActiveSafe(TechLockGroup, false);
|
||||
SetActiveSafe(CommonGridItemDescGroup, false);
|
||||
SetActiveSafe(PlayerTechPoolGroup, false);
|
||||
ClearGridItems();
|
||||
|
||||
switch (descItem.DescType)
|
||||
{
|
||||
@ -99,8 +114,8 @@ namespace TH1_UI.View.Outside.WikiSub
|
||||
SetActiveSafe(BaseDescGroup, true);
|
||||
return true;
|
||||
case WikiDescType.TechLock:
|
||||
SetActiveSafe(TechLockGroup, true);
|
||||
ApplyTechLock(owner);
|
||||
if (!ApplyTechLock(owner)) return false;
|
||||
SetActiveSafe(CommonGridItemDescGroup, true);
|
||||
return true;
|
||||
case WikiDescType.PlayerTechPool:
|
||||
if (!ApplyPlayerTechPool(owner)) return false;
|
||||
@ -139,15 +154,15 @@ namespace TH1_UI.View.Outside.WikiSub
|
||||
if (TitleText != null) { ResetMultilingual(TitleText); TitleText.text = string.Empty; }
|
||||
if (DescText != null) { ResetMultilingual(DescText); DescText.text = string.Empty; }
|
||||
if (HeroUpgradeDescText != null) { ResetMultilingual(HeroUpgradeDescText); HeroUpgradeDescText.text = string.Empty; }
|
||||
if (TechLockDescText != null) { ResetMultilingual(TechLockDescText); TechLockDescText.text = string.Empty; }
|
||||
if (PlayerTechPoolLv1Text != null) { ResetMultilingual(PlayerTechPoolLv1Text); PlayerTechPoolLv1Text.text = string.Empty; }
|
||||
if (PlayerTechPoolLv2Text != null) { ResetMultilingual(PlayerTechPoolLv2Text); PlayerTechPoolLv2Text.text = string.Empty; }
|
||||
if (PlayerTechPoolLv3Text != null) { ResetMultilingual(PlayerTechPoolLv3Text); PlayerTechPoolLv3Text.text = string.Empty; }
|
||||
ClearSkillCircles();
|
||||
ClearGridItems();
|
||||
SetActiveSafe(UnitInfoGroup, false);
|
||||
SetActiveSafe(UnitSkillGroup, false);
|
||||
SetActiveSafe(HeroUpgradeGroup, false);
|
||||
SetActiveSafe(TechLockGroup, false);
|
||||
SetActiveSafe(CommonGridItemDescGroup, false);
|
||||
SetActiveSafe(PlayerTechPoolGroup, false);
|
||||
SetActiveSafe(BaseDescGroup, true);
|
||||
}
|
||||
@ -215,22 +230,23 @@ namespace TH1_UI.View.Outside.WikiSub
|
||||
return true;
|
||||
}
|
||||
|
||||
// ---------- TechLock(解锁此 Action 的 TechAtom 名称列表) ----------
|
||||
// 走自己的 TechLockGroup 容器,TechLockDescText 内容为:所有 EnableAction
|
||||
// 且 TechActions 包含 owner.ActionId 的 TechAtom 的 TechAtomName 多语言文本,", " 拼接。
|
||||
private void ApplyTechLock(WikiItem owner)
|
||||
// ---------- TechLock(解锁此 Action 的 TechAtom,每个生成一个 GridItem) ----------
|
||||
// 走 CommonGridItemDescGroup/GridGroup:每个 EnableAction 且 TechActions 包含
|
||||
// owner.ActionId 的 TechAtom 都会 spawn 一个 GridItem,文字 = TechAtomName,
|
||||
// 点击 wikiId = WikiId.Encode(WikiSource.TechAtom, TechAtom)。
|
||||
// 没有任何匹配 atom 时返回 false,外层会销毁此 group。
|
||||
private bool ApplyTechLock(WikiItem owner)
|
||||
{
|
||||
if (TechLockDescText == null) return;
|
||||
ResetMultilingual(TechLockDescText);
|
||||
TechLockDescText.text = string.Empty;
|
||||
ClearGridItems();
|
||||
if (owner == null || owner.ActionId == null) return false;
|
||||
if (GridGroup == null || GridItemPrefab == null) return false;
|
||||
|
||||
if (owner == null || owner.ActionId == null) return;
|
||||
var techAssets = Table.Instance?.TechDataAssets;
|
||||
if (techAssets == null) return;
|
||||
if (techAssets == null) return false;
|
||||
var atomList = techAssets.TechAtomList;
|
||||
if (atomList == null) return;
|
||||
if (atomList == null) return false;
|
||||
|
||||
var sb = new System.Text.StringBuilder();
|
||||
int spawned = 0;
|
||||
for (int i = 0; i < atomList.Count; i++)
|
||||
{
|
||||
var atom = atomList[i];
|
||||
@ -249,18 +265,45 @@ namespace TH1_UI.View.Outside.WikiSub
|
||||
}
|
||||
if (!match) continue;
|
||||
|
||||
var key = atom.TechAtomName;
|
||||
if (string.IsNullOrEmpty(key)) continue;
|
||||
if (string.IsNullOrEmpty(atom.TechAtomName)) continue;
|
||||
|
||||
string text = key;
|
||||
if (uint.TryParse(key, out _))
|
||||
text = MultilingualManager.Instance.GetMultilingualText(key);
|
||||
if (string.IsNullOrEmpty(text)) continue;
|
||||
|
||||
if (sb.Length > 0) sb.Append(", ");
|
||||
sb.Append(text);
|
||||
uint wikiId = WikiId.Encode(WikiSource.TechAtom, (uint)atom.TechAtom);
|
||||
SpawnGridItem(atom.TechAtomName, wikiId);
|
||||
spawned++;
|
||||
}
|
||||
return spawned > 0;
|
||||
}
|
||||
|
||||
private void SpawnGridItem(string text, uint wikiId)
|
||||
{
|
||||
var item = Instantiate(GridItemPrefab, GridGroup);
|
||||
item.transform.localScale = Vector3.one;
|
||||
item.SetContent(text, wikiId);
|
||||
_spawnedGridItems.Add(item);
|
||||
}
|
||||
|
||||
private void ClearGridItems()
|
||||
{
|
||||
for (int i = 0; i < _spawnedGridItems.Count; i++)
|
||||
{
|
||||
var it = _spawnedGridItems[i];
|
||||
if (it == null) continue;
|
||||
if (it.transform != null) it.transform.SetParent(null, false);
|
||||
Destroy(it.gameObject);
|
||||
}
|
||||
_spawnedGridItems.Clear();
|
||||
|
||||
// GridGroup 内 prefab 自带的占位子节点也一并清掉,避免和运行时 spawn 的混在一起
|
||||
if (GridGroup != null)
|
||||
{
|
||||
for (int i = GridGroup.childCount - 1; i >= 0; i--)
|
||||
{
|
||||
var child = GridGroup.GetChild(i);
|
||||
if (child == null) continue;
|
||||
child.SetParent(null, false);
|
||||
Destroy(child.gameObject);
|
||||
}
|
||||
}
|
||||
TechLockDescText.text = sb.ToString();
|
||||
}
|
||||
|
||||
// ---------- PlayerTechPool(Force 拥有的 TechPool 按 CostLevel 拆 3 段) ----------
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user