내일배움캠프 40일차 TIL <Unity ATM 만들기 1일차> 06/04

정광훈(Unity_9기)·2025년 6월 4일

TIL (Today I Learned)

목록 보기
50/110
post-thumbnail

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)

0개의 댓글