코딩의 신 38

김동관·2025년 11월 25일

오늘 한 일

  1. 입출금 창 이동

Deposit Button과 WithDraw Button을 누르면 창이 변하도록 해주었습니다.
PopupBank 스크립트 작성.

    public void OnClickDepositMenu()
    {
        mainMenu.SetActive(false);
        depositMenu.SetActive(true);
        withdrawMenu.SetActive(false);
        depositInputField.text = "";
    }
     public void OnClickDepositBack()
    {
        mainMenu.SetActive(true);
        depositMenu.SetActive(false);
    }
        public void OnClickDepositInput()
    {
        if (string.IsNullOrEmpty(depositInputField.text)) return; 
        OnClickDeposit(int.Parse(depositInputField.text));
    }
        public void OnClickErrorOK()
    {
        popupError.SetActive(false);
    }
//간단하게 해주었습니다. 서로 다른 Object들을 만들어 클릭시에 
SetActive(true,false)로 보이거나 안 보이게 해주었습니다.
  1. 입금 기능, 출금 기능 만들기
using TMPro;
using UnityEngine;


public class PopupBank : MonoBehaviour
{
    public GameObject mainMenu;
    public GameObject depositMenu;
    public GameObject withdrawMenu;
    public TMP_InputField depositInputField;
    public TMP_InputField withdrawInputField;
    public GameObject popupError;
    public UIManager uiManager;

    
    public void OnClickDepositMenu()
    {
        mainMenu.SetActive(false);
        depositMenu.SetActive(true);
        withdrawMenu.SetActive(false);
        depositInputField.text = "";
    }

    public void OnClickWithDrawMenu()
    {
        mainMenu.SetActive(false);
        withdrawMenu.SetActive(true);
        depositMenu.SetActive(false);
        withdrawInputField.text = "";
    }

    public void OnClickDepositBack()
    {
        mainMenu.SetActive(true);
        depositMenu.SetActive(false);
    }

    public void OnClickWithDrawBack()
    {
        mainMenu.SetActive(true);
        withdrawMenu.SetActive(false);
    }

// 새로운 기능 추가. 이제 data를 확인해서 data.Cash < amount 가 된다면
cash양을 체크해주면서 클릭시에 버튼이 잘 작동 되도록 추가해줍니다.
    public void OnClickDeposit(int amount)
    {
        UserData data = GameManager.Instance.userdata;

        if (data.Cash < amount)
        {
            popupError.SetActive(true);
            return;
        }
        data.Cash -= amount;
        data.Balance += amount;

        uiManager.Refresh(data);
    }

// null체크로 만약 사용자가 아무것도 입력하지 않을시에도 체크를 해주었습니다.

    public void OnClickDepositInput()
    {
        if (string.IsNullOrEmpty(depositInputField.text)) return; 
        OnClickDeposit(int.Parse(depositInputField.text));
    }
    
    //WithDraw는 data.Balance로 체크를 해주면 되겠습니다.
    public void OnClickWithDraw(int amount)
    {
        UserData data = GameManager.Instance.userdata;

        if (data.Balance < amount)
        {
            popupError.SetActive(true);
            return;
        }
        data.Cash += amount;
        data.Balance -= amount;

        uiManager.Refresh(data);
    }
    public void OnClickWithDrawInput()
    {
        if (string.IsNullOrEmpty(withdrawInputField.text)) return; 
        OnClickWithDraw(int.Parse( withdrawInputField.text));
    }
    public void OnClickErrorOK()
    {
        popupError.SetActive(false);
    }
    
}
//With Draw쪽은 Deposit에서 거의 복붙하고, 몇가지만 추가로 수정해주면 됩니다.

이렇게까지 한다면 입출금을 누르고 금액을 입력시에 금액이 추가되고,
수정되는게 적용이 됩니다.

트러블 슈팅

<문제발생>
1. Deposit에서 Input()을 눌렀을 경우 잘 작동하지만, WithDraw에서는 버튼이 잘 안 눌려짐.
-> 매개변수를 잘 넣었는지 잘 체크를 해보기로 했음.

<문제 해결>
1. 매개변수가 문제가 없는걸 판단. 버튼쪽에 문제가 있는지 확인을 계속 해봤음.

using TMPro;
using UnityEngine;


public class PopupBank : MonoBehaviour
{
    public GameObject mainMenu;
    public GameObject depositMenu;
    public GameObject withdrawMenu;
    public TMP_InputField inputField;
    public GameObject popupError;
    public UIManager uiManager;

    
    public void OnClickDepositMenu()
    {
        mainMenu.SetActive(false);
        depositMenu.SetActive(true);
        withdrawMenu.SetActive(false);
    }

    public void OnClickWithDrawMenu()
    {
        mainMenu.SetActive(false);
        withdrawMenu.SetActive(true);
        depositMenu.SetActive(false);
    }

    public void OnClickDepositBack()
    {
        mainMenu.SetActive(true);
        depositMenu.SetActive(false);
    }

    public void OnClickWithDrawBack()
    {
        mainMenu.SetActive(true);
        withdrawMenu.SetActive(false);
    }

    public void OnClickDeposit(int amount)
    {
        UserData data = GameManager.Instance.userdata;

        if (data.Cash < amount)
        {
            popupError.SetActive(true);
            return;
        }
        data.Cash -= amount;
        data.Balance += amount;

        uiManager.Refresh(data);
    }

    public void OnClickDepositInput()
    {
        if (string.IsNullOrEmpty(inputField.text)) return; 
        OnClickDeposit(int.Parse(inputField.text));
    }
    public void OnClickWithDraw(int amount)
    {
        UserData data = GameManager.Instance.userdata;

        if (data.Balance < amount)
        {
            popupError.SetActive(true);
            return;
        }
        data.Cash += amount;
        data.Balance -= amount;

        uiManager.Refresh(data);
    }
    public void OnClickWithDrawInput()
    {
        if (string.IsNullOrEmpty(inputField.text)) return; 
        OnClickWithDraw(int.Parse(inputField.text));
    }
    public void OnClickErrorOK()
    {
        popupError.SetActive(false);
    }
    
} 
//전 코드입니다.

using TMPro;
using UnityEngine;

public class PopupBank : MonoBehaviour
{
    public GameObject mainMenu;
    public GameObject depositMenu;
    public GameObject withdrawMenu;

    public TMP_InputField depositInputField;   // ⬅ 입금 입력창
    public TMP_InputField withdrawInputField;  // ⬅ 출금 입력창

    public GameObject popupError;
    public UIManager uiManager;

    public void OnClickDepositMenu()
    {
        mainMenu.SetActive(false);
        depositMenu.SetActive(true);
        withdrawMenu.SetActive(false);

        depositInputField.text = ""; // 초기화
    }

    public void OnClickWithDrawMenu()
    {
        mainMenu.SetActive(false);
        withdrawMenu.SetActive(true);
        depositMenu.SetActive(false);

        withdrawInputField.text = ""; // 초기화
    }

    public void OnClickDepositBack()
    {
        mainMenu.SetActive(true);
        depositMenu.SetActive(false);
    }

    public void OnClickWithDrawBack()
    {
        mainMenu.SetActive(true);
        withdrawMenu.SetActive(false);
    }

    public void OnClickDeposit(int amount)
    {
        UserData data = GameManager.Instance.userdata;

        if (data.Cash < amount)
        {
            popupError.SetActive(true);
            return;
        }
        data.Cash -= amount;
        data.Balance += amount;

        uiManager.Refresh(data);
    }

    public void OnClickDepositInput()
    {
        if (string.IsNullOrEmpty(depositInputField.text)) return;
        OnClickDeposit(int.Parse(depositInputField.text));
    }

    public void OnClickWithDraw(int amount)
    {
        UserData data = GameManager.Instance.userdata;

        if (data.Balance < amount)
        {
            popupError.SetActive(true);
            return;
        }
        data.Cash += amount;
        data.Balance -= amount;

        uiManager.Refresh(data);
    }

    public void OnClickWithDrawInput()
    {
        if (string.IsNullOrEmpty(withdrawInputField.text)) return;
        OnClickWithDraw(int.Parse(withdrawInputField.text));
    }

    public void OnClickErrorOK()
    {
        popupError.SetActive(false);
    }
}
//수정 후 코드입니다.

2개의 차이가 보이시나요?
지금 코드의 핵심 문제는 Deposit / Withdraw 둘 다 같은 inputField를 쓰고 있다는 것.

->public TMP_InputField depositInputField;
public TMP_InputField withdrawInputField;
이렇게 두 개로 분리하고,
입금 메뉴에서는 depositInputField 사용,
출금 메뉴에서는 withdrawInputField 사용하게 변경.

depositInputField.text = ""; // 초기화
이것도 추가해서 초기화까지 잘 적용해주니 작동이 잘 되었습니다.

profile
아이디어 뱅크

0개의 댓글