


내가 구현한 방식:
private void OnValidate() { UI_Deposit = transform.Find("Deposit").gameObject; UI_Withdraw = transform.Find("Withdraw").gameObject; ATM = transform.Find("ATM").gameObject; }
받았던 피드백:
프로퍼티는 데이터가 변경되는 것을 감지할 수 있기 때문에 데이터와 UI를 연결하는 부분에서도 써먹을 수 있을 거라 생각했음.
나의 계획: GameManager에서 UsetData를 변경하면, set에서 UI의 텍스트를 변경시켜주는 함수를 실행시킨다.
결과: 그런데 데이터를 변경시켜주어도 UI의 텍스트는 변경되지 않았다.
추정: 프로퍼티가 get과 set을 감지하려면 프로퍼티 본인을 변경하거나 가져와야 하는데, UsetData나 Text의 프로퍼티를 만들어봤자 본인이 아닌 그 안의 string 변수를 건들이기 때문에 제대로 감지하지 못하는 것 같았다.
그렇게 생각한 이유:
public Text balanceText; public Text BalanceText { get { return balanceText; } set { BalanceText = balanceText; Test(); } } private void Start() { BalanceText.text = "10000"; } public void Test() { Debug.Log("Text.text를 변경해도 프로퍼티가 제대로 감지함!"); }
프로퍼티가 BalanceText.text를 변경할 때도 변화를 감지한다면 Test 메서드가 실행되면서 설정된 log가 뜰 것임.
결과: 보다시피 Balance의 text값은 바뀌었지만 Text() 메서드는 실행되지 않았다...

수정한 방식:
public Text balanceText; private int balance; public int Balance { get { return balance; } set { balance = value; balanceText.text = Formating(balance); Test(); } } private void Start() { balance = 10000; } private string Formating(int num) { return string.Format("{0:N0}", num); } public void Test() { Debug.Log("프로퍼티가 제대로 작동함"); }
UserData에서 각 필드의 프로퍼티를 만들거나, UIManager에서 Text 프로퍼티를 만드는 대신, int형 프로퍼티를 새로 만들고 이 int형 Balance 프로퍼티가 수정될 때마다 balanceText.text의 값도 수정되도록 만들었다. (해당 코드에서 사용된 Formating 메서드는 천 단위마다 ,를 찍어주는 메서드이다.)
결과: 잘 변경된다!!!!!!
