From c62ae623e8e571d2c65f6faa13bdea3508bd476b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9C=E8=99=9E=E6=B8=A0=E6=88=90=E2=80=9D?= <“yuqucheng2006@qq.com”> Date: Wed, 23 Sep 2026 10:51:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=9B=BD=E5=AE=B6?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E8=B7=B3=E8=BF=87=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E9=A6=96=E9=A1=B5=E5=8F=AF=E8=B7=B3=E8=BF=87=E5=9B=BD=E5=AE=B6?= =?UTF-8?q?=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增数据管理器中关联用户账号的跳过标记存储方法,修改首页逻辑,当用户未设置国家且未跳过时弹出国家选择界面,新增选择国家界面的跳过按钮,跳过后本地保存标记不再弹出。 --- Assets/Res/ui/common/选择国家.prefab | 228 ++++++++++++++++++ Assets/Scripts/Managers/DataManager.cs | 19 ++ Assets/Scripts/UI/Components/SelectCountry.cs | 21 +- .../Scripts/UI/Pages/HomePage/HomePageCtrl.cs | 16 +- 4 files changed, 278 insertions(+), 6 deletions(-) diff --git a/Assets/Res/ui/common/选择国家.prefab b/Assets/Res/ui/common/选择国家.prefab index 4146f08..5bc06fe 100644 --- a/Assets/Res/ui/common/选择国家.prefab +++ b/Assets/Res/ui/common/选择国家.prefab @@ -95,11 +95,105 @@ MonoBehaviour: countryParent: {fileID: 8710170637364745357} submitButton: {fileID: 5803830473808075884} backButton: {fileID: 4389239990246852526} + skipButton: {fileID: 1668640056445937132} searchInput: {fileID: 1038112358046293375} scrollRect: {fileID: 2267190601015941531} textColors: - {r: 0.18039216, g: 1, b: 0.88235295, a: 1} - {r: 1, g: 1, b: 1, a: 1} +--- !u!1 &1502726514785153912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8804739425715495092} + - component: {fileID: 8300217560112048457} + - component: {fileID: 252719876519687207} + - component: {fileID: 8267730253850027427} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8804739425715495092 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1502726514785153912} + 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: 3855749833711493498} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8300217560112048457 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1502726514785153912} + m_CullTransparentMesh: 1 +--- !u!114 &252719876519687207 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1502726514785153912} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.2, g: 0.2, b: 0.2, 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_FontData: + m_Font: {fileID: 12800000, guid: f4c31d68e7cd3454685bb4c132a52f58, type: 3} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Skip +--- !u!114 &8267730253850027427 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1502726514785153912} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3} + m_Name: + m_EditorClassIdentifier: + textKey: 100073 --- !u!1 &2089848948512694666 GameObject: m_ObjectHideFlags: 0 @@ -703,6 +797,139 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6091139404972456507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3855749833711493498} + - component: {fileID: 1810750418845284180} + - component: {fileID: 2489679025606743608} + - component: {fileID: 1668640056445937132} + m_Layer: 5 + m_Name: "\u8DF3\u8FC7" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3855749833711493498 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6091139404972456507} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0003841, y: 1.0003841, z: 1.0003841} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8804739425715495092} + m_Father: {fileID: 1215675079679361245} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -29.867529, y: -0.012290955} + m_SizeDelta: {x: 96, y: 56} + m_Pivot: {x: 1, y: 0.5} +--- !u!222 &1810750418845284180 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6091139404972456507} + m_CullTransparentMesh: 1 +--- !u!114 &2489679025606743608 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6091139404972456507} + 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: 66cc1bf1c770c234895999d8c0eb34d0, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &1668640056445937132 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6091139404972456507} + 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: 2489679025606743608} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: ConnectDevicePageCtrl, Assembly-CSharp + m_MethodName: ShowFingerprintPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &7122993795827468730 GameObject: m_ObjectHideFlags: 0 @@ -1104,6 +1331,7 @@ RectTransform: - {fileID: 5281325114906705898} - {fileID: 4425617578161486698} - {fileID: 6498500707239889981} + - {fileID: 3855749833711493498} m_Father: {fileID: 7590725518581769108} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} diff --git a/Assets/Scripts/Managers/DataManager.cs b/Assets/Scripts/Managers/DataManager.cs index d9f1a7c..9373d17 100644 --- a/Assets/Scripts/Managers/DataManager.cs +++ b/Assets/Scripts/Managers/DataManager.cs @@ -175,6 +175,25 @@ namespace Kill.Managers } #endregion + #region 国家选择跳过标记 + + private const string SKIP_COUNTRY_KEY = "skip_country"; + + /// 用户是否已跳过国家选择(跳过后首页不再弹出选择) + public bool HasSkippedCountry() + { + return PlayerPrefs.GetInt(SKIP_COUNTRY_KEY + "_" + (userInfo?.id ?? ""), 0) == 1; + } + + /// 保存跳过国家选择标记(本机保存,与当前登录账号关联) + public void SaveSkippedCountry() + { + PlayerPrefs.SetInt(SKIP_COUNTRY_KEY + "_" + (userInfo?.id ?? ""), 1); + PlayerPrefs.Save(); + } + + #endregion + #region 未设置密码引导 /// diff --git a/Assets/Scripts/UI/Components/SelectCountry.cs b/Assets/Scripts/UI/Components/SelectCountry.cs index 804ce54..7d926f1 100644 --- a/Assets/Scripts/UI/Components/SelectCountry.cs +++ b/Assets/Scripts/UI/Components/SelectCountry.cs @@ -14,6 +14,7 @@ public class SelectCountry : MonoBehaviour public Transform countryParent; public Button submitButton; public Button backButton; + public Button skipButton; public InputField searchInput; public ScrollRect scrollRect; LanguageManager.Country selectCountry; @@ -25,6 +26,7 @@ public class SelectCountry : MonoBehaviour public Color[] textColors; private List _items = new List(); + private bool _showSkipButton; /// /// 确认回调:code 为选中的国家代码,null 表示返回/取消 @@ -35,10 +37,12 @@ public class SelectCountry : MonoBehaviour /// 初始化 /// /// 当前选中的国家代码 - /// 是否显示返回按钮(主页不显示) - public void Init(string code, bool showBackButton = true) + /// 是否显示返回按钮(个人信息页显示,首页不显示) + /// 是否显示跳过按钮(首页显示,个人信息页不显示) + public void Init(string code, bool showBackButton = true, bool showSkipButton = false) { _originalCode = code; + _showSkipButton = showSkipButton; countryPrefab.SetActive(false); // 清理旧 item @@ -57,6 +61,14 @@ public class SelectCountry : MonoBehaviour UIManager.Instance.RegisterBackAction(OnBack); } + // 跳过按钮:不选择国家,直接关闭(onConfirm(null),不更新国家) + if (skipButton != null) + { + skipButton.gameObject.SetActive(showSkipButton); + skipButton.onClick.RemoveAllListeners(); + skipButton.onClick.AddListener(OnBack); + } + if (LanguageManager.Instance == null || LanguageManager.Instance.countryList == null) return; @@ -149,12 +161,17 @@ public class SelectCountry : MonoBehaviour private void UpdateSubmitButton() { + // 确认与跳过共用位置:选中显示确认、隐藏跳过;未选中显示跳过(仅首页场景) if (submitButton != null) { submitButton.gameObject.SetActive(_hasSelection); submitButton.onClick.RemoveAllListeners(); submitButton.onClick.AddListener(OnSubmit); } + if (skipButton != null) + { + skipButton.gameObject.SetActive(_showSkipButton && !_hasSelection); + } } private async void OnSubmit() diff --git a/Assets/Scripts/UI/Pages/HomePage/HomePageCtrl.cs b/Assets/Scripts/UI/Pages/HomePage/HomePageCtrl.cs index ee77765..872ea9c 100644 --- a/Assets/Scripts/UI/Pages/HomePage/HomePageCtrl.cs +++ b/Assets/Scripts/UI/Pages/HomePage/HomePageCtrl.cs @@ -81,12 +81,20 @@ namespace Kill.UI.Pages async Task Start() { LoadingUI.Show(); - if(string.IsNullOrEmpty(DataManager.Instance.userInfo.country_code)) + // 未设置国家且本机未跳过时弹出选择国家(可跳过,跳过后不再弹出) + if (string.IsNullOrEmpty(DataManager.Instance.userInfo.country_code) + && !DataManager.Instance.HasSkippedCountry()) { - var page= Instantiate(selectCountryPage,transform); + var page = Instantiate(selectCountryPage, transform); page.gameObject.SetActive(true); - page.Init(null,false); - page.onConfirm=(code)=>{UIManager.Instance.OpenMainPage(UIManager.PageName.homePage);}; + page.Init(null, false, true); + page.onConfirm = (code) => + { + // 跳过后本机保存标记,下次进入首页不再弹出 + if (code == null) + DataManager.Instance.SaveSkippedCountry(); + UIManager.Instance.OpenMainPage(UIManager.PageName.homePage); + }; LoadingUI.Hide(); return; }