diff --git a/Gameton-06/Assets/Gameton/Resources/UI/Prefabs/UI.CharaterCreateUI.prefab b/Gameton-06/Assets/Gameton/Resources/UI/Prefabs/UI.CharaterCreateUI.prefab index 4bf0b664..ec43a2eb 100644 --- a/Gameton-06/Assets/Gameton/Resources/UI/Prefabs/UI.CharaterCreateUI.prefab +++ b/Gameton-06/Assets/Gameton/Resources/UI/Prefabs/UI.CharaterCreateUI.prefab @@ -403,11 +403,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: ce1a1854c76bcd140a71eb36d9308221, type: 3} m_Name: m_EditorClassIdentifier: - cancelButton: {fileID: 0} + cancelButton: {fileID: 5209868250622144582} + confirmButton: {fileID: 3290386423334957786} createButton: {fileID: 1887714318721360375} playerDatas: [] - heartDatas: [] characterCreateUI_Modal: {fileID: 7298901665149865196} + blackCat_Spotlight: {fileID: 6897867871924581457} + whiteCat_Spotlight: {fileID: 6223168446447065192} --- !u!114 &77879358058366330 MonoBehaviour: m_ObjectHideFlags: 0 @@ -578,13 +580,14 @@ RectTransform: m_ConstrainProportionsScale: 1 m_Children: - {fileID: 4905188089100626232} + - {fileID: 3118627612192072696} - {fileID: 1874868407260678613} m_Father: {fileID: 6058810809619323447} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: -300, y: 100} - m_SizeDelta: {x: 120, y: 120} + m_SizeDelta: {x: 150, y: 129} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &6504336163150260281 CanvasRenderer: @@ -1568,6 +1571,81 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &6223168446447065192 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3118627612192072696} + - component: {fileID: 3281333180785644978} + - component: {fileID: 901079330762090231} + m_Layer: 0 + m_Name: Spotlight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &3118627612192072696 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6223168446447065192} + 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: 289130454474221960} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 10, y: 10} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3281333180785644978 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6223168446447065192} + m_CullTransparentMesh: 1 +--- !u!114 &901079330762090231 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6223168446447065192} + 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: d29e6f6bbff30554faab081b5b2c0aa2, 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 &6408180601660019162 GameObject: m_ObjectHideFlags: 0 @@ -1836,6 +1914,81 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &6897867871924581457 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7114058005112719301} + - component: {fileID: 6647985554066899462} + - component: {fileID: 4444964193948630461} + m_Layer: 0 + m_Name: Spotlight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &7114058005112719301 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6897867871924581457} + 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: 4370234102771175042} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 10, y: 10} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6647985554066899462 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6897867871924581457} + m_CullTransparentMesh: 1 +--- !u!114 &4444964193948630461 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6897867871924581457} + 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: d29e6f6bbff30554faab081b5b2c0aa2, 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 &7298901665149865196 GameObject: m_ObjectHideFlags: 0 @@ -1904,13 +2057,14 @@ RectTransform: m_ConstrainProportionsScale: 1 m_Children: - {fileID: 308157984128226261} + - {fileID: 7114058005112719301} - {fileID: 282081524326203258} m_Father: {fileID: 6058810809619323447} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: 300, y: 100} - m_SizeDelta: {x: 120, y: 129} + m_SizeDelta: {x: 150, y: 129} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &8081481979491666651 CanvasRenderer: @@ -2256,7 +2410,7 @@ GameObject: - component: {fileID: 7182517676015527575} - component: {fileID: 3290386423334957786} m_Layer: 0 - m_Name: Confirm Button (1) + m_Name: Confirm Button m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Gameton-06/Assets/Gameton/Scripts/UI/CharaterCreateUI.cs b/Gameton-06/Assets/Gameton/Scripts/UI/CharaterCreateUI.cs index 0ee02c13..d9b18c31 100644 --- a/Gameton-06/Assets/Gameton/Scripts/UI/CharaterCreateUI.cs +++ b/Gameton-06/Assets/Gameton/Scripts/UI/CharaterCreateUI.cs @@ -9,20 +9,23 @@ namespace TON { public class CharaterCreateUI : UIBase { - [SerializeField] private Button cancelButton; // Create 버튼 참조 + [SerializeField] private Button cancelButton; // cancel 버튼 참조 + [SerializeField] private Button confirmButton; // cancel 버튼 참조 [SerializeField] private Button createButton; // Create 버튼 참조 [SerializeField] private List playerDatas; - [SerializeField] private List heartDatas; + // [SerializeField] private List heartDatas; public GameObject characterCreateUI_Modal; + public GameObject blackCat_Spotlight; + public GameObject whiteCat_Spotlight; private string selectedCharacter; // 선택한 캐릭터의 타입 저장 (예: "MaleCat", "FemaleCat") private void Start() { playerDatas = PlayerDataManager.Singleton.playersData; - heartDatas = HeartDataManager.Singleton.heartDatas; + // heartDatas = HeartDataManager.Singleton.heartDatas; // 처음에는 버튼을 비활성화 createButton.interactable = false; @@ -33,6 +36,17 @@ namespace TON selectedCharacter = characterType; createButton.interactable = true; // 캐릭터가 선택되면 버튼 활성화 + switch (characterType) + { + case "BlackCat": + blackCat_Spotlight.SetActive(true); + whiteCat_Spotlight.SetActive(false); + break; + case "WhiteCat": + blackCat_Spotlight.SetActive(false); + whiteCat_Spotlight.SetActive(true); + break; + } } public void OnClickCreateButton() @@ -53,22 +67,49 @@ namespace TON public void OnClickConfirmButton() { TMP_InputField characterName = characterCreateUI_Modal.GetComponentInChildren(); - Debug.Log("characterName" + characterName.text); - // 생성한 캐릭터를 저장한다 - PlayerData player = new PlayerData(playerDatas.Count, selectedCharacter, characterName.text); - playerDatas.Add(player); - Assert.IsTrue(JSONLoader.SaveUpdatedJsonToPersistentData(playerDatas, "player")); + string nickname = characterName.text.Trim(); - PlayerDataManager.Singleton.SetCurrentUserData(); + // 입력 값 검증 + if (string.IsNullOrEmpty(nickname)) + { + return; + } - // 하트 시스템을 생성한다 - HeartDataManager.Singleton.CreateNewHeartSystem(playerDatas.Count); - HeartDataManager.Singleton.SetCurrentUserHeart(); + // 캐릭터 생성 및 취소 버튼을 비활성화 처리 + cancelButton.interactable = false; + confirmButton.interactable = false; - // 씬 변경 - UIManager.Hide(UIList.CharaterCreateUI); + // 서버에 닉네임을 추가로 업데이트 한다. + BackendManager.Singleton.ChangeNickname(nickname, (success, message) => + { + // UI 업데이트 (메인 스레드에서 실행) + UnityMainThreadDispatcher.Instance().Enqueue(() => + { + if (success) + { + // 생성한 캐릭터를 저장한다 + PlayerData player = new PlayerData(playerDatas.Count, selectedCharacter, nickname); + playerDatas.Add(player); + Assert.IsTrue(JSONLoader.SaveUpdatedJsonToPersistentData(playerDatas, "player")); + + PlayerDataManager.Singleton.SetCurrentUserData(); + + // 하트 시스템을 생성한다 + HeartDataManager.Singleton.CreateNewHeartSystem(playerDatas.Count); + HeartDataManager.Singleton.SetCurrentUserHeart(); + + // 씬 변경 + UIManager.Hide(UIList.CharaterCreateUI); + + Main.Singleton?.ChangeScene(SceneType.Lobby); + } + else + { + Debug.LogError("캐릭터 닉네임 저장 실패"); + } + }); + }); - Main.Singleton?.ChangeScene(SceneType.Lobby); } public void OnClickCancelButton()