[UPDATE] 로그아웃 추가 및 PlayerPrefs에 사용자 정보 관리 추가

This commit is contained in:
Jay 2025-03-13 17:48:26 +09:00
parent f73d8f5a51
commit c9ec8d2e42
8 changed files with 526 additions and 142 deletions

View File

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

View File

@ -6,7 +6,7 @@ public class GameManager : Singleton<GameManager>
[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<GameManager>
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<Canvas>();
}
}

View File

@ -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("로그아웃 되었습니다.", () => { });
});
}
}

View File

@ -135,12 +135,17 @@ public class NetworkManager : Singleton<NetworkManager>
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<NetworkManager>
var result = www.downloadHandler.text;
var userInfo = JsonUtility.FromJson<UserInfoResult>(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<Scores> success, Action failure)
{

View File

@ -14,6 +14,11 @@ public struct SigninResult
public int result;
}
public struct SignoutResult
{
public string result;
}
[Serializable]
public struct ScoreInfo
{

View File

@ -45,5 +45,50 @@ public class UserManager : Singleton<UserManager>
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<UserInfoResult>(json);
// 역직렬화한 데이터로 UserManager의 값을 설정
SetUserInfo(userInfo);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

View File

@ -0,0 +1,140 @@
fileFormatVersion: 2
guid: 1a585399a26c92443927489c09667e13
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant: