일단 순서는 메인화면 구성(현금, 사용자 정보, 잔액, 입출금), 유저데이터 클래스 작성, 게임매니저 생성, UI와 데이터 연동으로 하여 본격적으로 입출금 기능을 만들고 마지막에 저장기능까지 만들어줬다.
[System.Serializable]
public class UserData
{
public string UserName;
public int Balance;
public int Cash;
public UserData(string username, int balance, int cash)
{
UserName = username; // 이름
Cash = cash; // 현금
Balance = balance; // 잔고
}
}
UserData는 MonoBehaviour를 상속하지 않고 순수 데이터 저장용 클래스로 설계했으며 GameManager에서 유저 정보를 쉽게 가져올 수 있도록 구성하였다.
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
public UserData userData;
private void Awake()
{
if (Instance == null)
{
Instance = this;
}
userData = new UserData("JeeU", 100000, 50000);
}
}
GameManager는 싱글톤 처리를 해주었으며 userData에서 유저 정보를 관리, Awake()에서 기본값(내가 설정해둔 값)으로 초기화한다.
실행하면 UserData에 넣어놓은 [System.Serializable]로 인해 GameManager에 현재 유저 정보가 나타나게 된다.
public class PopupBank : MonoBehaviour
{
public GameObject BankMenu; // 입출금
public GameObject Deposit; // 입금
public GameObject Withdraw; // 출금
public void OnDepositBtn()
{
Deposit.SetActive(true);
BankMenu.SetActive(false);
}
public void OnWithdrawtBtn()
{
Withdraw.SetActive(true);
BankMenu.SetActive(false);
}
public void OnBankMenuBtn()
{
BankMenu.SetActive(true);
Withdraw.SetActive(false);
Deposit.SetActive(false);
}
}
입출금 버튼은 단순하게 활성화/비활성화로 해주었으며 입출금 버튼 안의 뒤로가기 버튼을 누르면 원래 메뉴가 비활성화되고 입출금 버튼이 활성화 되게 해주었다.
입금 및 출금 화면 버튼은 위와 같으며 입/출금을 원하는 금액을 클릭하거나 InputField에 원하는 금액을 입력 후 입/출금 버튼을 눌러주면 된다.
public class PopupBank : MonoBehaviour
{
public TextUI textUI;
public InputField inputDeposit;
public InputField inputWithdrawt;
public GameObject PopupError; // 잔액부족창
public void DepositMoney(int amount)
{
// 입금금액이 0보다 커야함, 현금(Cash)이 입금금액보다 많거나 같은지
if (amount > 0 && GameManager.Instance.userData.Cash >= amount)
{
GameManager.Instance.userData.Cash -= amount;
GameManager.Instance.userData.Balance += amount;
}
else
{
PopupError.SetActive(true);
}
textUI.Refresh();
}
public void DepositInputMoney()
{
string inputText = inputDeposit.text.Trim();
// TryParse : 문자열을 지정된 숫자형식으로 반환
// (inputText, 정수로 변환 가능시 amount에 저장)
if (int.TryParse(inputText, out int amount))
{
if (amount > 0 && GameManager.Instance.userData.Cash >= amount)
{
GameManager.Instance.userData.Cash -= amount;
GameManager.Instance.userData.Balance += amount;
}
else
{
PopupError.SetActive(true);
}
}
textUI.Refresh();
}
}
버튼의 경우 이벤트를 DepositMoney(int amount)로 하여 각 버튼에 입력된 금액을 입금할 수 있도록 설정하였고
원하는 값의 경우 InputField의 값에 입력한 숫자를 DepositInputMoney()를 통하여 입금할 수 있게 해주었다.
출금의 경우 Deposit에서 Withdraw로 바꾸어주었고 Cash(현금)과 Balance(잔액)의 계산법을 반대로 해주면 끝.
이렇게 하면 실행 하였을때 저장된 유저의 정보가 불러와지며 자유롭게 입출 금이 가능하게 된다.
'Unity > Unity Study' 카테고리의 다른 글
[Unity] 개인과제, ATM 만들기 - JSON을 이용한 유저 저장 (0) | 2025.03.28 |
---|---|
[Unity] 개인과제, ATM 만들기 - PlayerPrefs를 통한 유저 저장 (0) | 2025.03.26 |
[Unity] 3D Surviver 팀 프로젝트 중, Player 사망처리 및 애니메이션 (0) | 2025.03.25 |
[Unity] 3D Surviver 팀 프로젝트 중, Player Animation 일부 문제 (bool, trigger) (0) | 2025.03.21 |
[Unity] 3D Surviver 팀 프로젝트 중, 상태(Stat) UI (0) | 2025.03.20 |