public static class JsonUtilityManager
{
// Json 파일을 읽어 UserDataList 객채로 변환하는 메서드
public static UserDataList LoadUserDataList(string filePath)
{
// 파일명이 존재하지 않으면 반환
if (!File.Exists(filePath))
{
return null;
}
// 파일 내용을 Json으로 읽어옴
string json = File.ReadAllText(filePath);
// 메서드의 핵심, 변환
UserDataList userDataList = JsonUtility.FromJson<UserDataList>(json);
// 반환하여 원하는 곳에서 데이터를 사용 가능하게 함
return userDataList;
}
}
이 코드는 JSON 파일을 읽고 유저 데이터를 관리하는데 중요한 역할을 한다. 특히 유저데이터를 UserDataList 형식으로 쉽게 불러와서 다른 시스템이나 기능에서 활용할 수 있게 해준다.
송금기능을 위해 만든 코드인데 중간에 유저 정보를 읽어올수가 없어 작성하게 되었다.
그리하여 송금기능까지 구현 완료
public class PopupBank : MonoBehaviour
{
public void RemInputMoney()
{
string inputName = inputRemname.text.Trim(); // 송금대상
string inputMoney = inputRemdraw.text.Trim(); // 송금금액
// 빈칸 확인
if (string.IsNullOrEmpty(inputName) || string.IsNullOrEmpty(inputMoney))
{
ErrorMessage.text = "빈칸을 입력해주세요.";
PopupError.SetActive(true);
return;
}
// 금액 확인, 숫자로 변환 및 0이하의 값인지 확인
if (!int.TryParse(inputMoney, out int amount) || amount <= 0)
{
ErrorMessage.text = "금액을 입력해주세요.";
PopupError.SetActive(true);
return;
}
// 받는 사람 찾기
string userPath = Path.Combine(Application.dataPath, "SaveData", "userData.json");
UserDataList userDataList = JsonUtilityManager.LoadUserDataList(userPath);
UserData receiver = userDataList.userDatas.Find(user => user.UserName == inputName);
if (receiver == null)
{
ErrorMessage.text = "송금대상을 확인해주세요.";
PopupError.SetActive(true);
return;
}
// 현재 사용자 확인 및 잔액확인, 잔액 부족시 실패 (게임매니저는 현 유저데이터)
UserData sender = GameManager.Instance.userData;
if (sender.Balance < amount)
{
ErrorMessage.text = "잔액이 부족합니다.";
PopupError.SetActive(true);
return;
}
// 송금 처리
sender.Balance -= amount;
receiver.Balance += amount;
ErrorMessage.text = $"{sender.UserName} 님이 {receiver.UserName} 님에게\n{amount}원을 송금했습니다.";
PopupError.SetActive(true);
SaveUserDataList(userDataList, userPath);
// 현재 로그인한 유저 정보도 업데이트, UI때문에 필요
GameManager.Instance.userData = sender;
textUI.Refresh();
}
// 유저 불러오기
private void SaveUserDataList(UserDataList userDataList, string filePath)
{
string json = JsonUtility.ToJson(userDataList, true);
File.WriteAllText(filePath, json);
}
}
사용자가 송금 대상과 금액을 입력하면 송금대상 유저를 찾고 송금 금액을 처리하며 최종적으로는 데이터를 저장 후 UI를 갱신하는 과정을 처리한다.
모든 과정에서 오류가 발생하면 그에따른 오류메세지를 표시하게 해주었고 송금이 완료되면 송금정보를 메세지에 보여줄 수 있게 하였다.
이렇게 해서 ATM 구현 끝!
'Unity > Unity Study' 카테고리의 다른 글
[Unity] 클리키 게임 팀 프로젝트 중, 스탯 생성 (enum 사용전) (0) | 2025.04.07 |
---|---|
[Unity] 클리키 게임 팀 프로젝트 중, 여러번 눌림 현상 (0) | 2025.04.03 |
[Unity] 개인과제, ATM 만들기 - JSON을 이용한 유저 저장 (0) | 2025.03.28 |
[Unity] 개인과제, ATM 만들기 - PlayerPrefs를 통한 유저 저장 (0) | 2025.03.26 |
[Unity] 개인과제, ATM 만들기 - 입금, 송금 (0) | 2025.03.25 |