
ATM 만들기
시작 화면 UI 구현

입금 UI

출금 UI

뒤로가기와 직접 입력하여 입출금 하는 것도 구현

[System.Serializable]
public class UserData
{
public string Name;
public int Balance;
public int Cash;
public UserData(string name, int balance, int cash)
{
Name = name;
Cash = cash;
Balance = balance;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public static GameManager Instance { get; private set; }
public UserData userData;
[Header("텍스트UI 인스펙터에 연결")] [SerializeField]
private TextMeshProUGUI nameText;
[SerializeField] private TextMeshProUGUI balanceText;
[SerializeField] private TextMeshProUGUI cashText;
public GameObject panel;
void Awake() // 초기화
{
Instance = this;
if (userData == null)
{
userData = new UserData("", 0, 0);
}
Refresh();
}
public void DepositCash(int amount) // 입금
{
if (userData.Cash - amount >= 0)
{
userData.Cash -= amount;
userData.Balance += amount;
}
else
{
panel.SetActive(true);
}
Refresh();
}
public void withdrawalCash(int amount) // 출금
{
if (userData.Balance - amount >= 0)
{
userData.Balance -= amount;
userData.Cash += amount;
}
else
{
panel.SetActive(true);
}
Refresh();
}
public void Refresh() // UI 업데이트
{
nameText.text = userData.Name;
cashText.text = string.Format("{0:N0}", userData.Cash);
balanceText.text = string.Format("Balance {0:N0}", userData.Balance);
}
}
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
public class PopupBank : MonoBehaviour
{
[Header("오브젝트 할당")] [SerializeField] public GameObject deposit;
[SerializeField] public GameObject withdrawal;
[SerializeField] private GameObject atm;
[SerializeField] private TMP_InputField depositInputField;
[SerializeField] private TMP_InputField withdrawalInputField;
public void OnDepositButtonClick() // 입금으로 넘어가는 버튼
{
deposit.SetActive(true);
atm.SetActive(false);
}
public void OnWithdrawalButtonClick() // 출금으로 넘어가는 버튼
{
withdrawal.SetActive(true);
atm.SetActive(false);
}
public void OnBackButtonClick() // 뒤로 가기
{
if (deposit.activeSelf == true)
{
deposit.SetActive(false);
}
else if (withdrawal.activeSelf == true)
{
withdrawal.SetActive(false);
}
atm.SetActive(true);
}
public void InputDepositButtonClick()// 직접 입력 입금 버튼
{
string amountText = depositInputField.text;
if (int.TryParse(amountText, out int amount))
{
GameManager.Instance.DepositCash(amount);
depositInputField.text = "";
}
}
public void InputWithdrawalButtonClick() // 직접 입력 출금 버튼
{
string amountText = withdrawalInputField.text;
if (int.TryParse(amountText, out int amount))
{
GameManager.Instance.withdrawalCash(amount);
withdrawalInputField.text = "";
}
}
public void PanelOk() // 금액부족 판넬 Ok버튼
{
GameManager.Instance.panel.SetActive(false);
}
}
잔액보다 더 큰 금액을 입출금 시키면
마이너스 금액이 되는 문제가 있다.
쉽게 해결할 수 있을 것 같은데
지금 머리가 안 돌아가서 해결 못하는 중
public void DepositCash(int amount) // 입금
{
if (userData.Cash - amount >= 0)
{
userData.Cash -= amount;
userData.Balance += amount;
}
else
{
panel.SetActive(true);
}
Refresh();
}
public void withdrawalCash(int amount) // 출금
{
if (userData.Balance - amount>= 0)
{
userData.Balance -= amount;
userData.Cash += amount;
}
else
{
panel.SetActive(true);
}
Refresh();
}
정말 쉽게 해결할 수 있는 문제였다.
조건을 수정하여 해결했다.
if (userData.Cash - amount >= 0)
if (userData.Balance - amount>= 0)