百科bug修复

This commit is contained in:
kawagiri 2026-05-03 01:40:55 +08:00
parent 3783e5395a
commit f8a167ad3c
17 changed files with 2971 additions and 2441 deletions

View File

@ -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
}
]
}

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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}

View File

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

View File

@ -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)

View File

@ -76,6 +76,7 @@ namespace TH1_Logic.MatchConfig
PlayerTechPool,//拥有科技池
HasTechAtom,//拥有科技子条目
HasInitTechAtom,//拥有初始科技子条目
BelongTech,//科技子条目属于什么科技?
}

View File

@ -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);
//设置按钮颜色(和阵营一致)

View File

@ -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

View File

@ -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 局部空间下的中心 Ycontent 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;
}
}
}

View File

@ -0,0 +1,47 @@
using Logic.Multilingual;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace TH1_UI.View.Outside.WikiSub
{
// 通用 GridItemCommonGridItemDesc/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);
}
}
}

View File

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

View File

@ -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;
// PlayerTechPoolForce 拥有的 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();
}
// ---------- PlayerTechPoolForce 拥有的 TechPool 按 CostLevel 拆 3 段) ----------

File diff suppressed because it is too large Load Diff

Binary file not shown.