From a968a2b4233965694f5c338b87436f00e2a6b427 Mon Sep 17 00:00:00 2001 From: fiore Date: Wed, 26 Mar 2025 13:51:45 +0900 Subject: [PATCH] =?UTF-8?q?DO-61=20[feat]=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=EC=8B=9C=20=EC=9E=85=EB=A0=A5=EA=B0=92=20=EC=95=88?= =?UTF-8?q?=EC=A0=95=EC=84=B1=20=ED=99=95=EB=B3=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 간단한 이메일 유효성 검사 추가 - 닉네임 글자수 제한 6자 - 비밀번호 글자수 제한 6 < 글자수 < 18 - 프로필 이미지 토글러 버그 수정 --- .../Prefabs/Panels/Signup Panel.prefab | 56 ++++++++++- Assets/Script/Main/SignupPanelController.cs | 95 ++++++++++++++++++- 2 files changed, 142 insertions(+), 9 deletions(-) diff --git a/Assets/Resources/Prefabs/Panels/Signup Panel.prefab b/Assets/Resources/Prefabs/Panels/Signup Panel.prefab index ce1a083..0e81082 100644 --- a/Assets/Resources/Prefabs/Panels/Signup Panel.prefab +++ b/Assets/Resources/Prefabs/Panels/Signup Panel.prefab @@ -1347,7 +1347,19 @@ MonoBehaviour: m_Calls: [] m_OnDeselect: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 5818338764896528680} + m_TargetAssemblyTypeName: SignupPanelController, Assembly-CSharp + m_MethodName: OnChangeEndPassword + m_Mode: 0 + 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_OnTextSelection: m_PersistentCalls: m_Calls: [] @@ -2141,7 +2153,19 @@ MonoBehaviour: m_Calls: [] m_OnValueChanged: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 5818338764896528680} + m_TargetAssemblyTypeName: SignupPanelController, Assembly-CSharp + m_MethodName: OnChangeNickname + m_Mode: 0 + 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_OnTouchScreenKeyboardStatusChanged: m_PersistentCalls: m_Calls: [] @@ -2791,10 +2815,34 @@ MonoBehaviour: m_Calls: [] m_OnSelect: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 5818338764896528680} + m_TargetAssemblyTypeName: SignupPanelController, Assembly-CSharp + m_MethodName: OnSelectEmail + 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_OnDeselect: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 5818338764896528680} + m_TargetAssemblyTypeName: SignupPanelController, Assembly-CSharp + m_MethodName: OnChangeEndEmail + m_Mode: 0 + 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_OnTextSelection: m_PersistentCalls: m_Calls: [] diff --git a/Assets/Script/Main/SignupPanelController.cs b/Assets/Script/Main/SignupPanelController.cs index 2dff470..d2e22a0 100644 --- a/Assets/Script/Main/SignupPanelController.cs +++ b/Assets/Script/Main/SignupPanelController.cs @@ -1,5 +1,7 @@ +using System; using System.Collections; using System.Collections.Generic; +using System.Text.RegularExpressions; using TMPro; using UnityEngine; using UnityEngine.Networking; @@ -22,7 +24,9 @@ public class SignupPanelController : MonoBehaviour [SerializeField] private TMP_InputField confirmPasswordInputField; [SerializeField] private Toggle[] imageSelectToggles; private int _selectedImageIndex = 0; - + + private bool _emailValid = false; + private void Start() { SetToggleInit(); @@ -43,15 +47,37 @@ public class SignupPanelController : MonoBehaviour public void OnValueChanged(bool value, int index) { + // 현재 토글을 끄려고 할 때 (value가 false) + if (!value && index == _selectedImageIndex) + { + // 현재 켜져 있는 토글을 다시 켜지 않게 하고 + imageSelectToggles[index].onValueChanged.RemoveAllListeners(); + + // 다른 토글을 켬 (현재 선택된 인덱스가 아닌 다음 토글을 켬) + int nextIndex = (index + 1) % imageSelectToggles.Length; + _selectedImageIndex = nextIndex; + imageSelectToggles[nextIndex].isOn = true; + + // 이벤트 리스너 다시 추가 + int capturedIndex = index; + imageSelectToggles[index].onValueChanged.AddListener((bool val) => OnValueChanged(val, capturedIndex)); + return; + } + + // 새로운 토글을 선택했을 때 if (value) { + int previousIndex = _selectedImageIndex; _selectedImageIndex = index; - int previousIndex = (_selectedImageIndex == 0) ? 1 : 0; - imageSelectToggles[previousIndex].isOn = false; + + // 선택된 토글이 변경되었을 때만 이전 토글을 끔 + if (previousIndex != index) + { + imageSelectToggles[previousIndex].isOn = false; + } } } - public void OnClickConfirmButton() { var email = emailInputField.text; @@ -59,7 +85,7 @@ public class SignupPanelController : MonoBehaviour var password = passwordInputField.text; var confirmPassword = confirmPasswordInputField.text; - if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(nickname) || + if (string.IsNullOrEmpty(email) || !_emailValid || string.IsNullOrEmpty(nickname) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(confirmPassword)) { // 입력 내용 누락 팝업 표시 @@ -104,4 +130,63 @@ public class SignupPanelController : MonoBehaviour { Destroy(gameObject); } + + // 이메일 입력을 완료하면 유효성 검사를 진행함 + public void OnChangeEndEmail(string emailText) + { + const string emailPattern = @"^[^\s@]+@[^\s@]+\.[^\s@]+$"; + + // 입력이 끝났을 때 이메일 형식 검사 + _emailValid = Regex.IsMatch(emailText, emailPattern); + + // 이메일이 비어있지 않은 경우에만 색상 변경 + if (!string.IsNullOrEmpty(emailText)) + { + if (_emailValid) return; + emailInputField.textComponent.color = Color.red; + + // 이메일 유효하지 않음 + GameManager.Instance.panelManager.OpenConfirmPanel("올바른 이메일 주소를 입력하세요.", () => {}); + Debug.Log("이메일 유효성 X"); + } + + } + + // 이메일 인풋을 선택했을 때 이메일이 유효하지 않았으면 텍스트를 초기화함 + public void OnSelectEmail() + { + if (!_emailValid) + { + emailInputField.textComponent.color = Color.black; + emailInputField.text = String.Empty; + } + } + + // 닉네임 글자 6자 초과하면 마지막 글자를 잘라서 6자로 만듬 + public void OnChangeNickname(string nicknameText) + { + const int maxNicknameLength = 6; + + if (nicknameText.Length > maxNicknameLength) + { + // 글자수가 제한을 초과하면 처음 6글자만 남김 + string limitedText = nicknameText.Substring(0, maxNicknameLength); + nicknameInputField.text = limitedText; + } + } + + // 비밀번호 유효성 검사 + public void OnChangeEndPassword(string passwordText) + { + // 비밀번호가 비어 있으면 검사하지 않음 + if (string.IsNullOrEmpty(passwordText)) return; + + // 비밀번호 글자수 제한 확인 + if (passwordText.Length < 6 || passwordText.Length > 18) + { + // 비밀번호 글자 수 제한 + GameManager.Instance.panelManager.OpenConfirmPanel("비밀번호는 6자 이상 18자 이하로 입력해주세요.", () => {}); + Debug.Log("비밀번호 글자 수 제한"); + } + } }