Unity/Unity Study

[Unity] 개인과제, ATM 만들기 - 송금

Jee-U 2025. 3. 31. 21:19

 

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 구현 끝!