Merge pull request #12 from Degulleo/DO-32-코인-서버-연동

Do 32 코인 서버 연동
This commit is contained in:
Jay 2025-03-17 10:17:39 +09:00 committed by GitHub
commit 741064824c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 859 additions and 67 deletions

8
Assets/JAY.meta Normal file
View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1a1e8e30f7d4a53499404409beda5805
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

442
Assets/JAY/Main-Jay.unity Normal file
View File

@ -0,0 +1,442 @@
%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 &271965288
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 271965289}
- component: {fileID: 271965290}
m_Layer: 0
m_Name: GameManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &271965289
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 271965288}
serializedVersion: 2
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: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &271965290
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 271965288}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35a4c6d5d3a97b444b968e68ec8bb9f7, type: 3}
m_Name:
m_EditorClassIdentifier:
mainPanel: {fileID: 8564394481744056992, guid: e1835a90a4d722a4b99be61179de8789, type: 3}
signinPanel: {fileID: 925522282249935710, guid: e14c9b2925f0ddb4192af743e5cc166a, type: 3}
signupPanel: {fileID: 3181524094944658765, guid: 8827fe7caa3145e40b1369cc42f8697d, type: 3}
canvas: {fileID: 1867732346}
profileSprites: []
--- !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!1 &740636828
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 740636831}
- component: {fileID: 740636830}
- component: {fileID: 740636829}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &740636829
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 740636828}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
m_Name:
m_EditorClassIdentifier:
m_SendPointerHoverToParent: 1
m_HorizontalAxis: Horizontal
m_VerticalAxis: Vertical
m_SubmitButton: Submit
m_CancelButton: Cancel
m_InputActionsPerSecond: 10
m_RepeatDelay: 0.5
m_ForceModuleActive: 0
--- !u!114 &740636830
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 740636828}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 10
--- !u!4 &740636831
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 740636828}
serializedVersion: 2
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: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1867732343
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1867732347}
- component: {fileID: 1867732346}
- component: {fileID: 1867732345}
- component: {fileID: 1867732344}
m_Layer: 5
m_Name: Canvas
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1867732344
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1867732343}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!114 &1867732345
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1867732343}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 0
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 800, y: 600}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 0
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0
--- !u!223 &1867732346
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1867732343}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 0
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 0
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 0
m_TargetDisplay: 0
--- !u!224 &1867732347
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1867732343}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_ConstrainProportionsScale: 0
m_Children: []
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, y: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 333752983}
- {fileID: 271965289}
- {fileID: 1867732347}
- {fileID: 740636831}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: aa6a3e598ecaa6e4aa2ad0f1d81bea93
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1404,12 +1404,12 @@ GameObject:
- component: {fileID: 2069651035330330026}
- component: {fileID: 2769129427375959542}
m_Layer: 5
m_Name: Profile Image
m_Name: Profile Image_dragon
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &405965270916774547
RectTransform:
m_ObjectHideFlags: 0
@ -1653,7 +1653,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: " \uD64D\uAE38\uB3D9"
m_text: "\uD638\uB7AD\uC774"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2}
m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2}
@ -1722,6 +1722,81 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &6837262359343561592
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8172929902404983356}
- component: {fileID: 9151821260105146833}
- component: {fileID: 662347117161959313}
m_Layer: 5
m_Name: Profile Image_tiger
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8172929902404983356
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6837262359343561592}
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: 6110152713294678410}
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: -180}
m_SizeDelta: {x: 403, y: 409}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &9151821260105146833
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6837262359343561592}
m_CullTransparentMesh: 1
--- !u!114 &662347117161959313
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6837262359343561592}
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: 59492a1d9c2719641bd0d4d53988c9b4, 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!1 &8564394481744056992
GameObject:
m_ObjectHideFlags: 0
@ -1756,6 +1831,7 @@ RectTransform:
- {fileID: 1983801467959214643}
- {fileID: 2720476515686469179}
- {fileID: 405965270916774547}
- {fileID: 8172929902404983356}
- {fileID: 6726863397751661662}
- {fileID: 7295287573366824212}
m_Father: {fileID: 0}
@ -1818,6 +1894,9 @@ MonoBehaviour:
nicknameText: {fileID: 6229663128658405980}
ratingText: {fileID: 5975803210787517482}
signOutButton: {fileID: 1336680714261373895}
profileImages:
- {fileID: 4381601883819518242}
- {fileID: 6837262359343561592}
--- !u!1 &9186617826613474881
GameObject:
m_ObjectHideFlags: 0
@ -1937,19 +2016,7 @@ MonoBehaviour:
m_TargetGraphic: {fileID: 4776591815315724498}
m_OnClick:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 7488082087611091670}
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
m_Calls: []
--- !u!1001 &218636292198555703
PrefabInstance:
m_ObjectHideFlags: 0

View File

@ -34,9 +34,6 @@ public class CoinsPanelController : MonoBehaviour
private void Start()
{
coinsRemoveImageObject.SetActive(false);
// TODO : 코인 수량 초기화
InitCoinsCount(500);
}
/// <summary>

View File

@ -1,3 +1,4 @@
using System;
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
@ -5,6 +6,7 @@ using System.Collections.Generic;
public class GameManager : Singleton<GameManager>
{
[SerializeField] private GameObject mainPanel;
[SerializeField] private GameObject signinPanel;
[SerializeField] private GameObject signupPanel;
[SerializeField] private GameObject settingsPanel;
@ -15,12 +17,14 @@ public class GameManager : Singleton<GameManager>
[SerializeField] private Canvas canvas;
private UserManager _userManager; // UserManager 인스턴스 관리
private CoinsPanelController _coinsPanel;
private Enums.GameType _gameType;
private GameLogic _gameLogic;
private StoneController _stoneController;
private Canvas _canvas;
public Sprite[] profileSprites; //패널에서 사용할 테스트 배열
private void Awake()
{
@ -31,19 +35,21 @@ public class GameManager : Singleton<GameManager>
_userManager = userManagerObj.AddComponent<UserManager>();
//게임 씬에서 확인하기 위한 임시 코드
_gameType = Enums.GameType.SinglePlay;
// _gameType = Enums.GameType.SinglePlay;
}
}
private void Start()
{
// TODO: 로딩 화면 추가(자동 로그인 응답 전까지)
// 자동 로그인
TryAutoSignin();
//게임 씬에서 확인하기 위한 임시 코드
_stoneController = GameObject.FindObjectOfType<StoneController>();
_stoneController.InitStones();
_gameLogic = new GameLogic(_stoneController, _gameType);
// _stoneController = GameObject.FindObjectOfType<StoneController>();
// _stoneController.InitStones();
// _gameLogic = new GameLogic(_stoneController, _gameType);
}
private void TryAutoSignin()
@ -51,8 +57,9 @@ public class GameManager : Singleton<GameManager>
NetworkManager.Instance.GetInfo((userInfo) =>
{
Debug.Log("자동 로그인 성공");
UserManager.Instance.SetUserInfo(userInfo);
UpdateMainPanelUI();
UpdateMainPanelUI(OpenMainPanel);
// ScoreData.SetScore(userInfo.score);
// OpenConfirmPanel(userInfo.nickname + "님 로그인 성공하였습니다.", () => { });
}, () =>
@ -63,12 +70,34 @@ public class GameManager : Singleton<GameManager>
});
}
private void UpdateMainPanelUI()
/// <summary>
/// 유저 별명, 급수를 서버에서 가져온 정보로 업데이트하여 메인화면에 표시
/// </summary>
public void UpdateMainPanelUI(Action success = null)
{
MainPanelController mainPanel = FindObjectOfType<MainPanelController>();
if (mainPanel != null)
MainPanelController mainPanelController = mainPanel.GetComponent<MainPanelController>();
if (mainPanelController == null) return;
mainPanelController.UpdateUserInfo();
success?.Invoke();
}
public void OpenMainPanel()
{
mainPanel.UpdateUserInfo();
if (canvas != null)
{
var mainPanelObject = Instantiate(mainPanel, canvas.transform);
// 메인 화면 아래의 코인 패널에 서버에서 가져 온 코인 값 업데이트
_coinsPanel = mainPanelObject.GetComponentInChildren<CoinsPanelController>();
if (_coinsPanel != null)
{
_coinsPanel.InitCoinsCount(UserManager.Instance.Coins);
}
}
}

View File

@ -1,6 +1,7 @@
using System;
using TMPro;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
public class MainPanelController : MonoBehaviour
@ -8,6 +9,18 @@ public class MainPanelController : MonoBehaviour
[SerializeField] private TextMeshProUGUI nicknameText;
[SerializeField] private TextMeshProUGUI ratingText;
[SerializeField] private Button signOutButton;
[SerializeField] private GameObject[] profileImages;
private int _selectedImageIndex;
private void Awake()
{
// 만약 할당 안되어있으면 추가
if (signOutButton != null)
{
signOutButton.onClick.AddListener(OnSignOutClick);
}
}
public void UpdateUserInfo()
{
@ -15,20 +28,43 @@ public class MainPanelController : MonoBehaviour
nicknameText.text = UserManager.Instance.Nickname;
ratingText.text = $"{UserManager.Instance.Rating}급";
// 프로필 이미지 갱신
_selectedImageIndex = UserManager.Instance.imageIndex;
if (_selectedImageIndex < 0 || _selectedImageIndex >= profileImages.Length)
{
return;
}
// 모든 프로필 이미지 비활성화 후, 선택한 이미지만 활성화
foreach (var img in profileImages)
{
img.SetActive(false);
}
profileImages[_selectedImageIndex].SetActive(true);
}
public void OnSignOutClick()
{
signOutButton.interactable = false; // 중복 클릭 방지
NetworkManager.Instance.SignOut(() =>
{
Debug.Log("로그아웃 성공");
// 로그인 화면
GameManager.Instance.OpenSigninPanel();
// 로그아웃 버튼 메서드 삭제
signOutButton.onClick.RemoveAllListeners();
// 아직 메인 패널이 살아있다면 삭제
if (gameObject != null)
{
Destroy(gameObject);
}
}, () =>
{
Debug.Log("로그아웃 실패");
// OpenConfirmPanel("로그아웃 되었습니다.", () => { });
signOutButton.interactable = true; // 실패 시 다시 활성화
});
}
}

View File

@ -11,10 +11,13 @@ public class NetworkManager : Singleton<NetworkManager>
}
public IEnumerator Signup(SignupData signupData, Action success, Action failure)
public void Signup(SignupData signupData, Action success, Action failure)
{
StartCoroutine(SignupCoroutine(signupData, success, failure));
}
public IEnumerator SignupCoroutine(SignupData signupData, Action success, Action failure)
{
string jsonString = JsonUtility.ToJson(signupData);
Debug.Log("jsonString" + jsonString);
byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonString);
using (UnityWebRequest www =
@ -46,7 +49,6 @@ public class NetworkManager : Singleton<NetworkManager>
else
{
var result = www.downloadHandler.text;
Debug.Log("Result: " + result);
success?.Invoke();
// TODO: 회원가입 성공 팝업 표시
@ -58,7 +60,12 @@ public class NetworkManager : Singleton<NetworkManager>
}
}
public IEnumerator Signin(SigninData signinData, Action success, Action<int> failure)
public void Signin(SigninData signinData, Action<SigninResult> success, Action<int> failure)
{
StartCoroutine(SigninCoroutine(signinData, success, failure));
}
public IEnumerator SigninCoroutine(SigninData signinData, Action<SigninResult> success, Action<int> failure)
{
string jsonString = JsonUtility.ToJson(signinData);
byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonString);
@ -75,7 +82,7 @@ public class NetworkManager : Singleton<NetworkManager>
if (www.result == UnityWebRequest.Result.ConnectionError ||
www.result == UnityWebRequest.Result.ProtocolError)
{
Debug.Log("Error: " + www.error);
}
else
{
@ -87,12 +94,12 @@ public class NetworkManager : Singleton<NetworkManager>
PlayerPrefs.SetString("sid", sid);
}
var resultString = www.downloadHandler.text;
var result = JsonUtility.FromJson<SigninResult>(resultString);
var result = www.downloadHandler.text;
var signinResult = JsonUtility.FromJson<SigninResult>(result);
if (result.result == 0)
if (signinResult.result == 0)
{
Debug.Log("유저네임이 유효하지 않습니다.");
Debug.Log("유저 이메일이 유효하지 않습니다.");
failure?.Invoke(0);
// TODO: 유저네임 유효하지 않음 팝업 표시
// GameManager.Instance.OpenConfirmPanel("유저네임이 유효하지 않습니다.", () =>
@ -100,7 +107,7 @@ public class NetworkManager : Singleton<NetworkManager>
// failure?.Invoke(0);
// });
}
else if (result.result == 1)
else if (signinResult.result == 1)
{
Debug.Log("패스워드가 유효하지 않습니다.");
failure?.Invoke(1);
@ -110,10 +117,11 @@ public class NetworkManager : Singleton<NetworkManager>
// failure?.Invoke(1);
// });
}
else if (result.result == 2)
else if (signinResult.result == 2)
{
Debug.Log("로그인에 성공하였습니다.");
success?.Invoke();
success?.Invoke(signinResult);
// TODO: 성공 팝업 표시
// GameManager.Instance.OpenConfirmPanel("로그인에 성공하였습니다.", () =>
// {
@ -163,7 +171,6 @@ public class NetworkManager : Singleton<NetworkManager>
{
var result = www.downloadHandler.text;
var userInfo = JsonUtility.FromJson<UserInfoResult>(result);
UserManager.Instance.SetUserInfo(userInfo);
success?.Invoke(userInfo);
}
@ -177,8 +184,6 @@ public class NetworkManager : Singleton<NetworkManager>
public IEnumerator SignOutCoroutine(Action success, Action failure)
{
Debug.Log("로그아웃 호출?");
string sid = PlayerPrefs.GetString("sid", "");
if (string.IsNullOrEmpty(sid))
{
@ -205,9 +210,11 @@ public class NetworkManager : Singleton<NetworkManager>
else
{
var result = www.downloadHandler.text;
Debug.Log("로그아웃 실행결과" + result);
// 로그아웃 후 sid를 삭제하여 세션을 클리어
PlayerPrefs.SetString("sid", "");
// 유저 정보도 삭제
PlayerPrefs.SetString("UserInfo", "");
UserManager.Instance.UserInfoInit();
success?.Invoke();
}
@ -248,4 +255,50 @@ public class NetworkManager : Singleton<NetworkManager>
}
}
}
public void GetCoinsInfo(Action<CoinsInfoResult> success, Action failure)
{
StartCoroutine(GetCoinsInfoCoroutine(success, failure));
}
public IEnumerator GetCoinsInfoCoroutine(Action<CoinsInfoResult> 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<CoinsInfoResult>(result);
success?.Invoke(coinsInfo);
}
}
}
}

View File

@ -12,11 +12,11 @@ public struct SigninData
public struct SigninResult
{
public int result;
}
public struct SignoutResult
{
public string result;
public string nickname;
public int imageIndex;
public int rating;
public int score;
public int coins;
}
[Serializable]
@ -45,17 +45,21 @@ public class SigninPanelController : MonoBehaviour
if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password))
{
// TODO: 누락된 값 입 요청 팝업 표시
// TODO: 누락된 값 입 요청 팝업 표시
return;
}
var signinData = new SigninData();
signinData.email = email;
signinData.password = password;
var signinData = new SigninData { email = email, password = password };
StartCoroutine(NetworkManager.Instance.Signin(signinData, () =>
NetworkManager.Instance.Signin(signinData, (signinResult) =>
{
Destroy(gameObject);
// 유저 정보 저장
UserManager.Instance.SetUserInfo(signinResult);
// 메인 패널 정보 갱신
GameManager.Instance.UpdateMainPanelUI(GameManager.Instance.OpenMainPanel);
}, result =>
{
if (result == 0)
@ -66,7 +70,7 @@ public class SigninPanelController : MonoBehaviour
{
passwordInputField.text = "";
}
}));
});
}
public void OnClickSignupButton()

View File

@ -80,7 +80,7 @@ public class SignupPanelController : MonoBehaviour
signupData.imageIndex = _selectedImageIndex;
// 서버로 SignupData 전달하면서 회원가입 진행
StartCoroutine(NetworkManager.Instance.Signup(signupData, () =>
NetworkManager.Instance.Signup(signupData, () =>
{
Destroy(gameObject);
}, () =>
@ -89,7 +89,7 @@ public class SignupPanelController : MonoBehaviour
nicknameInputField.text = "";
passwordInputField.text = "";
confirmPasswordInputField.text = "";
}));
});
}
else
{
@ -105,7 +105,6 @@ public class SignupPanelController : MonoBehaviour
public void OnClickCancelButton()
{
Debug.Log("OnClickCancelButton");
Destroy(gameObject);
}
}

View File

@ -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<UserManager>
@ -20,14 +27,29 @@ public class UserManager : Singleton<UserManager>
public string Nickname { get; private set; }
public int Rating { get; private set; }
public int Score { get; private set; }
public int ImageIndex { get; private set; }
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)
{
}
public void UserInfoInit()
{
UserId = "";
Email = "";
Nickname = "";
Rating = 0;
imageIndex = 0;
Coins = 0;
}
/// <summary>
/// GetInfo 호출 시
/// </summary>
/// <param name="userData"></param>
public void SetUserInfo(UserInfoResult userData)
{
if (userData == null)
@ -41,14 +63,29 @@ public class UserManager : Singleton<UserManager>
Nickname = userData.nickname;
Rating = userData.rating;
// Score = userData.score;
ImageIndex = userData.imageIndex;
imageIndex = userData.imageIndex;
// Win = userData.win;
// Lose = userData.lose;
Coins = userData.coins;
// 유저 정보를 PlayerPrefs에 저장
SaveUserInfoToPlayerPrefs();
}
/// <summary>
/// Signin 호출 시 : 로그인 정보만 반영
/// </summary>
/// <param name="signinResult"></param>
public void SetUserInfo(SigninResult signinResult)
{
Nickname = signinResult.nickname;
Rating = signinResult.rating;
// Score = signinResult.score;
imageIndex = signinResult.imageIndex;
Coins = signinResult.coins;
}
public void SaveUserInfoToPlayerPrefs()
{
// UserInfoResult 객체를 JSON 문자열로 직렬화
@ -59,7 +96,7 @@ public class UserManager : Singleton<UserManager>
nickname = Nickname,
// rating = Rating,
// score = Score,
imageIndex = ImageIndex,
imageIndex = imageIndex,
// win = Win,
// lose = Lose
};
@ -89,5 +126,14 @@ public class UserManager : Singleton<UserManager>
SetUserInfo(userInfo);
}
public void SetCoinsInfo()
{
NetworkManager.Instance.GetCoinsInfo((coinsResult) =>
{
Coins = coinsResult.coins;
}, () =>
{
Debug.Log("서버에서 코인 불러오기 실패");
});
}
}

View File

@ -106,6 +106,19 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []

View File

@ -106,6 +106,19 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []

View File

@ -106,6 +106,19 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []

View File

@ -106,6 +106,19 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []

View File

@ -106,6 +106,19 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []

View File

@ -106,6 +106,19 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []

View File

@ -106,6 +106,19 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []

View File

@ -106,6 +106,19 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []