From c9ec8d2e420d919400f2fcdfafd65a479c2ee258 Mon Sep 17 00:00:00 2001 From: Jay <96156114+jaydev00a@users.noreply.github.com> Date: Thu, 13 Mar 2025 17:48:26 +0900 Subject: [PATCH] =?UTF-8?q?[UPDATE]=20=EB=A1=9C=EA=B7=B8=EC=95=84=EC=9B=83?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20PlayerPrefs=EC=97=90=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=A0=95=EB=B3=B4=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scenes/Main.unity | 398 +++++++++++++------- Assets/Script/Game/GameManager.cs | 11 +- Assets/Script/Main/MainPanelController.cs | 17 + Assets/Script/Main/NetworkManager.cs | 52 ++- Assets/Script/Main/SigninPanelController.cs | 5 + Assets/Script/Main/UserManager.cs | 45 +++ Assets/Sprites/Main UI/Log out.png | Bin 0 -> 604 bytes Assets/Sprites/Main UI/Log out.png.meta | 140 +++++++ 8 files changed, 526 insertions(+), 142 deletions(-) create mode 100644 Assets/Sprites/Main UI/Log out.png create mode 100644 Assets/Sprites/Main UI/Log out.png.meta diff --git a/Assets/Scenes/Main.unity b/Assets/Scenes/Main.unity index 0a30e6a..dfcd60b 100644 --- a/Assets/Scenes/Main.unity +++ b/Assets/Scenes/Main.unity @@ -613,140 +613,115 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 205725198} m_CullTransparentMesh: 1 ---- !u!1 &387590922 -GameObject: +--- !u!1001 &317447470 +PrefabInstance: m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 387590923} - - component: {fileID: 387590925} - - component: {fileID: 387590924} - m_Layer: 5 - m_Name: Coin Text (TMP) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &387590923 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 387590922} - 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: 661336415} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -30} - m_SizeDelta: {x: 500, y: 100} - m_Pivot: {x: 0.5, y: 1} ---- !u!114 &387590924 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 387590922} - 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: "\uCF54\uC778 100" - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2} - m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4281479730 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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: 50 - m_fontSizeBase: 50 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - 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: 0 - 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!222 &387590925 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 387590922} - m_CullTransparentMesh: 1 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 661336415} + m_Modifications: + - target: {fileID: 646100354038727038, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_Name + value: Coins Panel + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_SizeDelta.x + value: 160 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_SizeDelta.y + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_AnchoredPosition.y + value: -30 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4063434195558959060, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4222531876603999234, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: coinsCountText + value: + objectReference: {fileID: 890805683} + - target: {fileID: 4222531876603999234, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + propertyPath: coinsRemoveImageObject + value: + objectReference: {fileID: 1502985949} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} --- !u!1 &513518719 GameObject: m_ObjectHideFlags: 0 @@ -1059,10 +1034,11 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: + - {fileID: 1396327070} - {fileID: 2003151605} - {fileID: 1746224346} - {fileID: 1426926626} - - {fileID: 387590923} + - {fileID: 972965165} m_Father: {fileID: 141845928} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -1122,6 +1098,7 @@ MonoBehaviour: m_EditorClassIdentifier: nicknameText: {fileID: 1493531099} ratingText: {fileID: 2141350119} + signOutButton: {fileID: 972965166} --- !u!1 &733114318 GameObject: m_ObjectHideFlags: 0 @@ -1390,6 +1367,149 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 837518559} m_CullTransparentMesh: 1 +--- !u!114 &890805683 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 2892066450466788586, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + m_PrefabInstance: {fileID: 317447470} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &972965164 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 972965165} + - component: {fileID: 972965168} + - component: {fileID: 972965167} + - component: {fileID: 972965166} + m_Layer: 5 + m_Name: SIgnout Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &972965165 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 972965164} + 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: 661336415} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -20, y: -40} + m_SizeDelta: {x: 63, y: 63} + m_Pivot: {x: 1, y: 1} +--- !u!114 &972965166 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 972965164} + 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: 972965167} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 661336418} + m_TargetAssemblyTypeName: MainPanelController, Assembly-CSharp + m_MethodName: OnSignOutClick + 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!114 &972965167 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 972965164} + 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: 1a585399a26c92443927489c09667e13, 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!222 &972965168 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 972965164} + m_CullTransparentMesh: 1 --- !u!1 &1017982169 GameObject: m_ObjectHideFlags: 0 @@ -1678,6 +1798,11 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1326543047} m_CullTransparentMesh: 1 +--- !u!224 &1396327070 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 1769668775421633028, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + m_PrefabInstance: {fileID: 317447470} + m_PrefabAsset: {fileID: 0} --- !u!1 &1426926625 GameObject: m_ObjectHideFlags: 0 @@ -1849,6 +1974,11 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1493531097} m_CullTransparentMesh: 1 +--- !u!1 &1502985949 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 4198953742281733827, guid: dc5d544dd6fd6e544b8e7399440a8323, type: 3} + m_PrefabInstance: {fileID: 317447470} + m_PrefabAsset: {fileID: 0} --- !u!1 &1699132189 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Script/Game/GameManager.cs b/Assets/Script/Game/GameManager.cs index 0348b7f..0f5e74f 100644 --- a/Assets/Script/Game/GameManager.cs +++ b/Assets/Script/Game/GameManager.cs @@ -6,7 +6,7 @@ public class GameManager : Singleton [SerializeField] private GameObject signinPanel; [SerializeField] private GameObject signupPanel; - private Canvas _canvas; + [SerializeField] private Canvas canvas; private UserManager _userManager; // UserManager 인스턴스 관리 private void Awake() @@ -53,22 +53,21 @@ public class GameManager : Singleton public void OpenSigninPanel() { - if (_canvas != null) + if (canvas != null) { - var signinPanelObject = Instantiate(signinPanel, _canvas.transform); + var signinPanelObject = Instantiate(signinPanel, canvas.transform); } } public void OpenSignupPanel() { - if (_canvas != null) + if (canvas != null) { - var signupPanelObject = Instantiate(signupPanel, _canvas.transform); + var signupPanelObject = Instantiate(signupPanel, canvas.transform); } } protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode) { - _canvas = GameObject.FindObjectOfType(); } } diff --git a/Assets/Script/Main/MainPanelController.cs b/Assets/Script/Main/MainPanelController.cs index 10a5018..4ee980f 100644 --- a/Assets/Script/Main/MainPanelController.cs +++ b/Assets/Script/Main/MainPanelController.cs @@ -1,11 +1,13 @@ using System; using TMPro; using UnityEngine; +using UnityEngine.UI; public class MainPanelController : MonoBehaviour { [SerializeField] private TextMeshProUGUI nicknameText; [SerializeField] private TextMeshProUGUI ratingText; + [SerializeField] private Button signOutButton; public void UpdateUserInfo() { @@ -14,4 +16,19 @@ public class MainPanelController : MonoBehaviour nicknameText.text = UserManager.Instance.Nickname; ratingText.text = $"{UserManager.Instance.Rating}급"; } + + public void OnSignOutClick() + { + NetworkManager.Instance.SignOut(() => + { + Debug.Log("로그아웃 성공"); + + // 로그인 화면 + GameManager.Instance.OpenSigninPanel(); + }, () => + { + Debug.Log("로그아웃 실패"); + // OpenConfirmPanel("로그아웃 되었습니다.", () => { }); + }); + } } diff --git a/Assets/Script/Main/NetworkManager.cs b/Assets/Script/Main/NetworkManager.cs index 4b52956..4b7ce3c 100644 --- a/Assets/Script/Main/NetworkManager.cs +++ b/Assets/Script/Main/NetworkManager.cs @@ -135,12 +135,17 @@ public class NetworkManager : Singleton new UnityWebRequest(Constants.ServerURL + "/users/get-info", UnityWebRequest.kHttpVerbGET)) { www.downloadHandler = new DownloadHandlerBuffer(); - string sid = PlayerPrefs.GetString("sid", ""); if (!string.IsNullOrEmpty(sid)) { www.SetRequestHeader("Cookie", sid); } + else + { + Debug.LogError("SID 값이 없습니다. 로그인 정보가 없습니다."); + failure?.Invoke(); + yield break; // 더 이상 진행하지 않고 종료 + } yield return www.SendWebRequest(); @@ -159,12 +164,55 @@ public class NetworkManager : Singleton var result = www.downloadHandler.text; var userInfo = JsonUtility.FromJson(result); UserManager.Instance.SetUserInfo(userInfo); - Debug.Log(userInfo.nickname); success?.Invoke(userInfo); } } } + + public void SignOut(Action success, Action failure) + { + StartCoroutine(SignOutCoroutine(success, failure)); + } + + public IEnumerator SignOutCoroutine(Action success, Action failure) + { + Debug.Log("로그아웃 호출?"); + + string sid = PlayerPrefs.GetString("sid", ""); + if (string.IsNullOrEmpty(sid)) + { + Debug.Log("로그인 정보가 없습니다."); + failure?.Invoke(); + yield break; // 로그인이 되어 있지 않다면 로그아웃을 시도하지 않음 + } + + using (UnityWebRequest www = new UnityWebRequest(Constants.ServerURL + "/users/signout", UnityWebRequest.kHttpVerbPOST)) + { + www.downloadHandler = new DownloadHandlerBuffer(); + www.SetRequestHeader("Cookie", sid); + + yield return www.SendWebRequest(); + + if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError) + { + if (www.responseCode == 403) + { + Debug.Log("로그인이 필요합니다."); + } + failure?.Invoke(); + } + else + { + var result = www.downloadHandler.text; + Debug.Log("로그아웃 실행결과" + result); + // 로그아웃 후 sid를 삭제하여 세션을 클리어 + PlayerPrefs.SetString("sid", ""); + + success?.Invoke(); + } + } + } public IEnumerator GetLeaderboard(Action success, Action failure) { diff --git a/Assets/Script/Main/SigninPanelController.cs b/Assets/Script/Main/SigninPanelController.cs index e259a21..acc69e0 100644 --- a/Assets/Script/Main/SigninPanelController.cs +++ b/Assets/Script/Main/SigninPanelController.cs @@ -14,6 +14,11 @@ public struct SigninResult public int result; } +public struct SignoutResult +{ + public string result; +} + [Serializable] public struct ScoreInfo { diff --git a/Assets/Script/Main/UserManager.cs b/Assets/Script/Main/UserManager.cs index 1c00f04..f56c3c6 100644 --- a/Assets/Script/Main/UserManager.cs +++ b/Assets/Script/Main/UserManager.cs @@ -45,5 +45,50 @@ public class UserManager : Singleton ImageIndex = userData.imageIndex; Win = userData.win; Lose = userData.lose; + + // 유저 정보를 PlayerPrefs에 저장 + SaveUserInfoToPlayerPrefs(); } + + public void SaveUserInfoToPlayerPrefs() + { + // UserInfoResult 객체를 JSON 문자열로 직렬화 + UserInfoResult userInfo = new UserInfoResult + { + id = UserId, + email = Email, + nickname = Nickname, + rating = Rating, + score = Score, + imageIndex = ImageIndex, + win = Win, + lose = Lose + }; + + string json = JsonUtility.ToJson(userInfo); + + // PlayerPrefs에 저장 + PlayerPrefs.SetString("UserInfo", json); + PlayerPrefs.Save(); + } + + public void LoadUserInfoFromPlayerPrefs() + { + // PlayerPrefs에서 유저 정보 가져오기 + string json = PlayerPrefs.GetString("UserInfo", ""); + + if (string.IsNullOrEmpty(json)) + { + Debug.Log("저장된 유저 정보가 없습니다."); + return; + } + + // JSON 문자열을 UserInfoResult 객체로 역직렬화 + UserInfoResult userInfo = JsonUtility.FromJson(json); + + // 역직렬화한 데이터로 UserManager의 값을 설정 + SetUserInfo(userInfo); + } + + } \ No newline at end of file diff --git a/Assets/Sprites/Main UI/Log out.png b/Assets/Sprites/Main UI/Log out.png new file mode 100644 index 0000000000000000000000000000000000000000..fbfc66973853722505ce6cf69c5a64f32eedbf07 GIT binary patch literal 604 zcmeAS@N?(olHy`uVBq!ia0vp^_8`o`3?vg8AG`%pjKx9jPK-BC>eK@{oCO|{#S9GG z!XV7ZFl&wkP%t*YC&U#<8_^6jt(YMKv_QTj$S;^7t^fW1``cVoce9=@oBvvM|1{Iz z%g!$-XFC&mY)|@xC3l=R0Ue#|>EaktG3V^`*M7|o07W0y(8s!F zAsaV2U3#T=#&Egcnse)0A6g%HV{oQp^UOceaZ=o}O6#>h?A-IUMpJRagU>r3-JY>= zPnY%gcb5BBl%&T7*EA}*ezMj-;A!_?uR~aRe~AAgr+F53-F;%)bWIzN@0sKrFW&Xp z%fh41B0JX0!J=*lkE{Mt%YP3FcfR5(`19gn@lC-8KXf9FGs)Cf^s`v}d!c8;#cJ^{ zBCnBQ=l_6)v-T