오늘 한 일

- 입출금 창 이동
Deposit Button과 WithDraw Button을 누르면 창이 변하도록 해주었습니다.
PopupBank 스크립트 작성.
public void OnClickDepositMenu()
{
mainMenu.SetActive(false);
depositMenu.SetActive(true);
withdrawMenu.SetActive(false);
depositInputField.text = "";
}
public void OnClickDepositBack()
{
mainMenu.SetActive(true);
depositMenu.SetActive(false);
}
public void OnClickDepositInput()
{
if (string.IsNullOrEmpty(depositInputField.text)) return;
OnClickDeposit(int.Parse(depositInputField.text));
}
public void OnClickErrorOK()
{
popupError.SetActive(false);
}
//간단하게 해주었습니다. 서로 다른 Object들을 만들어 클릭시에
SetActive(true,false)로 보이거나 안 보이게 해주었습니다.
- 입금 기능, 출금 기능 만들기
using TMPro;
using UnityEngine;
public class PopupBank : MonoBehaviour
{
public GameObject mainMenu;
public GameObject depositMenu;
public GameObject withdrawMenu;
public TMP_InputField depositInputField;
public TMP_InputField withdrawInputField;
public GameObject popupError;
public UIManager uiManager;
public void OnClickDepositMenu()
{
mainMenu.SetActive(false);
depositMenu.SetActive(true);
withdrawMenu.SetActive(false);
depositInputField.text = "";
}
public void OnClickWithDrawMenu()
{
mainMenu.SetActive(false);
withdrawMenu.SetActive(true);
depositMenu.SetActive(false);
withdrawInputField.text = "";
}
public void OnClickDepositBack()
{
mainMenu.SetActive(true);
depositMenu.SetActive(false);
}
public void OnClickWithDrawBack()
{
mainMenu.SetActive(true);
withdrawMenu.SetActive(false);
}
// 새로운 기능 추가. 이제 data를 확인해서 data.Cash < amount 가 된다면
cash양을 체크해주면서 클릭시에 버튼이 잘 작동 되도록 추가해줍니다.
public void OnClickDeposit(int amount)
{
UserData data = GameManager.Instance.userdata;
if (data.Cash < amount)
{
popupError.SetActive(true);
return;
}
data.Cash -= amount;
data.Balance += amount;
uiManager.Refresh(data);
}
// null체크로 만약 사용자가 아무것도 입력하지 않을시에도 체크를 해주었습니다.
public void OnClickDepositInput()
{
if (string.IsNullOrEmpty(depositInputField.text)) return;
OnClickDeposit(int.Parse(depositInputField.text));
}
//WithDraw는 data.Balance로 체크를 해주면 되겠습니다.
public void OnClickWithDraw(int amount)
{
UserData data = GameManager.Instance.userdata;
if (data.Balance < amount)
{
popupError.SetActive(true);
return;
}
data.Cash += amount;
data.Balance -= amount;
uiManager.Refresh(data);
}
public void OnClickWithDrawInput()
{
if (string.IsNullOrEmpty(withdrawInputField.text)) return;
OnClickWithDraw(int.Parse( withdrawInputField.text));
}
public void OnClickErrorOK()
{
popupError.SetActive(false);
}
}
//With Draw쪽은 Deposit에서 거의 복붙하고, 몇가지만 추가로 수정해주면 됩니다.
이렇게까지 한다면 입출금을 누르고 금액을 입력시에 금액이 추가되고,
수정되는게 적용이 됩니다.
트러블 슈팅
<문제발생>
1. Deposit에서 Input()을 눌렀을 경우 잘 작동하지만, WithDraw에서는 버튼이 잘 안 눌려짐.
-> 매개변수를 잘 넣었는지 잘 체크를 해보기로 했음.
<문제 해결>
1. 매개변수가 문제가 없는걸 판단. 버튼쪽에 문제가 있는지 확인을 계속 해봤음.
using TMPro;
using UnityEngine;
public class PopupBank : MonoBehaviour
{
public GameObject mainMenu;
public GameObject depositMenu;
public GameObject withdrawMenu;
public TMP_InputField inputField;
public GameObject popupError;
public UIManager uiManager;
public void OnClickDepositMenu()
{
mainMenu.SetActive(false);
depositMenu.SetActive(true);
withdrawMenu.SetActive(false);
}
public void OnClickWithDrawMenu()
{
mainMenu.SetActive(false);
withdrawMenu.SetActive(true);
depositMenu.SetActive(false);
}
public void OnClickDepositBack()
{
mainMenu.SetActive(true);
depositMenu.SetActive(false);
}
public void OnClickWithDrawBack()
{
mainMenu.SetActive(true);
withdrawMenu.SetActive(false);
}
public void OnClickDeposit(int amount)
{
UserData data = GameManager.Instance.userdata;
if (data.Cash < amount)
{
popupError.SetActive(true);
return;
}
data.Cash -= amount;
data.Balance += amount;
uiManager.Refresh(data);
}
public void OnClickDepositInput()
{
if (string.IsNullOrEmpty(inputField.text)) return;
OnClickDeposit(int.Parse(inputField.text));
}
public void OnClickWithDraw(int amount)
{
UserData data = GameManager.Instance.userdata;
if (data.Balance < amount)
{
popupError.SetActive(true);
return;
}
data.Cash += amount;
data.Balance -= amount;
uiManager.Refresh(data);
}
public void OnClickWithDrawInput()
{
if (string.IsNullOrEmpty(inputField.text)) return;
OnClickWithDraw(int.Parse(inputField.text));
}
public void OnClickErrorOK()
{
popupError.SetActive(false);
}
}
//전 코드입니다.
using TMPro;
using UnityEngine;
public class PopupBank : MonoBehaviour
{
public GameObject mainMenu;
public GameObject depositMenu;
public GameObject withdrawMenu;
public TMP_InputField depositInputField; // ⬅ 입금 입력창
public TMP_InputField withdrawInputField; // ⬅ 출금 입력창
public GameObject popupError;
public UIManager uiManager;
public void OnClickDepositMenu()
{
mainMenu.SetActive(false);
depositMenu.SetActive(true);
withdrawMenu.SetActive(false);
depositInputField.text = ""; // 초기화
}
public void OnClickWithDrawMenu()
{
mainMenu.SetActive(false);
withdrawMenu.SetActive(true);
depositMenu.SetActive(false);
withdrawInputField.text = ""; // 초기화
}
public void OnClickDepositBack()
{
mainMenu.SetActive(true);
depositMenu.SetActive(false);
}
public void OnClickWithDrawBack()
{
mainMenu.SetActive(true);
withdrawMenu.SetActive(false);
}
public void OnClickDeposit(int amount)
{
UserData data = GameManager.Instance.userdata;
if (data.Cash < amount)
{
popupError.SetActive(true);
return;
}
data.Cash -= amount;
data.Balance += amount;
uiManager.Refresh(data);
}
public void OnClickDepositInput()
{
if (string.IsNullOrEmpty(depositInputField.text)) return;
OnClickDeposit(int.Parse(depositInputField.text));
}
public void OnClickWithDraw(int amount)
{
UserData data = GameManager.Instance.userdata;
if (data.Balance < amount)
{
popupError.SetActive(true);
return;
}
data.Cash += amount;
data.Balance -= amount;
uiManager.Refresh(data);
}
public void OnClickWithDrawInput()
{
if (string.IsNullOrEmpty(withdrawInputField.text)) return;
OnClickWithDraw(int.Parse(withdrawInputField.text));
}
public void OnClickErrorOK()
{
popupError.SetActive(false);
}
}
//수정 후 코드입니다.
2개의 차이가 보이시나요?
지금 코드의 핵심 문제는 Deposit / Withdraw 둘 다 같은 inputField를 쓰고 있다는 것.
->public TMP_InputField depositInputField;
public TMP_InputField withdrawInputField;
이렇게 두 개로 분리하고,
입금 메뉴에서는 depositInputField 사용,
출금 메뉴에서는 withdrawInputField 사용하게 변경.
depositInputField.text = ""; // 초기화
이것도 추가해서 초기화까지 잘 적용해주니 작동이 잘 되었습니다.