From be28571025c8810ca3c18ccb2e70f892f8b95343 Mon Sep 17 00:00:00 2001 From: Jay <96156114+jaydev00a@users.noreply.github.com> Date: Fri, 14 Mar 2025 16:40:28 +0900 Subject: [PATCH] =?UTF-8?q?[Feat]=20=EC=BD=94=EC=9D=B8=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20=EC=97=B0=EB=8F=99=20=EC=B6=94=EA=B0=80=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/JAY.meta | 8 + Assets/JAY/Main-Jay.unity | 221 +++++++++++++++++++++++++++ Assets/JAY/Main-Jay.unity.meta | 7 + Assets/Script/Game/GameManager.cs | 37 ++++- Assets/Script/Main/NetworkManager.cs | 48 ++++++ Assets/Script/Main/UserManager.cs | 20 ++- 6 files changed, 334 insertions(+), 7 deletions(-) create mode 100644 Assets/JAY.meta create mode 100644 Assets/JAY/Main-Jay.unity create mode 100644 Assets/JAY/Main-Jay.unity.meta diff --git a/Assets/JAY.meta b/Assets/JAY.meta new file mode 100644 index 0000000..3ed0750 --- /dev/null +++ b/Assets/JAY.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1a1e8e30f7d4a53499404409beda5805 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/JAY/Main-Jay.unity b/Assets/JAY/Main-Jay.unity new file mode 100644 index 0000000..e326e6e --- /dev/null +++ b/Assets/JAY/Main-Jay.unity @@ -0,0 +1,221 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &333752980 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 333752983} + - component: {fileID: 333752982} + - component: {fileID: 333752981} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &333752981 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 333752980} + m_Enabled: 1 +--- !u!20 &333752982 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 333752980} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &333752983 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 333752980} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 333752983} diff --git a/Assets/JAY/Main-Jay.unity.meta b/Assets/JAY/Main-Jay.unity.meta new file mode 100644 index 0000000..aa4891b --- /dev/null +++ b/Assets/JAY/Main-Jay.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aa6a3e598ecaa6e4aa2ad0f1d81bea93 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Game/GameManager.cs b/Assets/Script/Game/GameManager.cs index fd0a3f9..241b5c0 100644 --- a/Assets/Script/Game/GameManager.cs +++ b/Assets/Script/Game/GameManager.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; public class GameManager : Singleton { + [SerializeField] private GameObject mainPanel; [SerializeField] private GameObject signinPanel; [SerializeField] private GameObject signupPanel; @@ -33,13 +34,18 @@ public class GameManager : Singleton private void Start() { + // TODO: 로딩 화면 추가(자동 로그인 응답 전까지) + // 자동 로그인 TryAutoSignin(); + // 메인 패널 열기 + OpenMainPanel(); + //게임 씬에서 확인하기 위한 임시 코드 - _stoneController = GameObject.FindObjectOfType(); - _stoneController.InitStones(); - _gameLogic = new GameLogic(_stoneController, _gameType); + // _stoneController = GameObject.FindObjectOfType(); + // _stoneController.InitStones(); + // _gameLogic = new GameLogic(_stoneController, _gameType); } private void TryAutoSignin() @@ -49,6 +55,7 @@ public class GameManager : Singleton Debug.Log("자동 로그인 성공"); UpdateMainPanelUI(); + // ScoreData.SetScore(userInfo.score); // OpenConfirmPanel(userInfo.nickname + "님 로그인 성공하였습니다.", () => { }); }, () => @@ -59,12 +66,30 @@ public class GameManager : Singleton }); } + /// + /// 유저 별명, 급수, 코인을 서버에서 가져온 정보로 업데이트하여 메인화면에 표시 + /// private void UpdateMainPanelUI() { - MainPanelController mainPanel = FindObjectOfType(); - if (mainPanel != null) + MainPanelController mainPanelController = mainPanel.GetComponent(); + + if (mainPanelController == null) return; + + mainPanelController.UpdateUserInfo(); + + CoinsPanelController coinsPanel = FindObjectOfType(); + if (coinsPanel != null) { - mainPanel.UpdateUserInfo(); + Debug.Log("코인패널존재?" + UserManager.Instance.Coins); + coinsPanel.InitCoinsCount(UserManager.Instance.Coins); + } + } + + public void OpenMainPanel() + { + if (canvas != null) + { + var mainPanelObject = Instantiate(mainPanel, canvas.transform); } } diff --git a/Assets/Script/Main/NetworkManager.cs b/Assets/Script/Main/NetworkManager.cs index 4b7ce3c..102cfac 100644 --- a/Assets/Script/Main/NetworkManager.cs +++ b/Assets/Script/Main/NetworkManager.cs @@ -208,6 +208,8 @@ public class NetworkManager : Singleton Debug.Log("로그아웃 실행결과" + result); // 로그아웃 후 sid를 삭제하여 세션을 클리어 PlayerPrefs.SetString("sid", ""); + // 유저 정보도 삭제 + PlayerPrefs.SetString("UserInfo", ""); success?.Invoke(); } @@ -248,4 +250,50 @@ public class NetworkManager : Singleton } } } + + + public void GetCoinsInfo(Action success, Action failure) + { + StartCoroutine(GetCoinsInfoCoroutine(success, failure)); + } + + public IEnumerator GetCoinsInfoCoroutine(Action success, Action failure) + { + using (UnityWebRequest www = + new UnityWebRequest(Constants.ServerURL + "/users/coins", 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(); + + 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; + var coinsInfo = JsonUtility.FromJson(result); + + success?.Invoke(coinsInfo); + } + } + } } \ No newline at end of file diff --git a/Assets/Script/Main/UserManager.cs b/Assets/Script/Main/UserManager.cs index 3398ba1..73b0029 100644 --- a/Assets/Script/Main/UserManager.cs +++ b/Assets/Script/Main/UserManager.cs @@ -11,6 +11,13 @@ public class UserInfoResult public int imageIndex; public int win; public int lose; + public int coins; +} + +public class CoinsInfoResult +{ + public string result; + public int coins; } public class UserManager : Singleton @@ -23,6 +30,7 @@ public class UserManager : Singleton public int ImageIndex { get; private set; } public int Win { get; private set; } public int Lose { get; private set; } + public int Coins { get; private set; } protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode) { @@ -44,6 +52,7 @@ public class UserManager : Singleton ImageIndex = userData.imageIndex; // Win = userData.win; // Lose = userData.lose; + Coins = userData.coins; // 유저 정보를 PlayerPrefs에 저장 SaveUserInfoToPlayerPrefs(); @@ -89,5 +98,14 @@ public class UserManager : Singleton SetUserInfo(userInfo); } - + public void SetCoinsInfo() + { + NetworkManager.Instance.GetCoinsInfo((coinsResult) => + { + Coins = coinsResult.coins; + }, () => + { + Debug.Log("서버에서 코인 불러오기 실패"); + }); + } } \ No newline at end of file