오보에블로그
[Unity] UI Button 이벤트로 Text 변경 (+ Bind) 본문
728x90
위와 같이 Button을 눌렀을 때 Text가 변경되게끔 하고 싶을 때,
방법 1.
UI_Button 에 [SerializedField]
를 통해서 Text
타입의 게임 오브젝트를 받을 수 있게끔 한다.
변경을 원하는 텍스트 오브젝트를 드래그 하고, 코드상에서 해당 텍스트의 텍스트값 (_text.text
) 을 변경한다.
--> 이걸로 다 관리하기엔 버튼이 몇백개가 된다면 불가능할듯..!
방법 2.
enum
에 담겨있는 명칭? 들이 하나하나가 실존하는 컴포넌트들을 의미해서 Bind
함수를 통해 enum
에 해당하는 UI
를 가져오도록한다.
- 여기서 중요한 부분이 있다. 그냥
GetComponent
만 하면 상위 UI 컴포넌트만 부르므로, 재귀적으로 찾도록하자. - 해당 이름을 갖고 있는 컴포넌트를 리턴하는 그런 함수..묶어놨으니까 이제 하나하나 빼올 수 있는 함수를 만들자.
protected void Bind<T>(Type type) where T : UnityEngine.Object
{
// enum 변수에 해당하는 UI 를 가져온다.
string[] names = Enum.GetNames(type);
UnityEngine.Object[] objects = new UnityEngine.Object[names.Length];
for (int i = 0; i < names.Length; i++)
{
if (typeof(T) == typeof(GameObject))
objects[i] = Util.FindChild(gameObject, names[i], true);
else
objects[i] = Util.FindChild<T>(gameObject, names[i], true);
}
_objects.Add(typeof(T), objects);
}
protected T Get<T>(int idx) where T : UnityEngine.Object
{
UnityEngine.Object[] objects = null;
if (_objects.TryGetValue(typeof(T), out objects) == false)
return null;
return objects[idx] as T;
}
방법 2 내용은 다음 장에서 계속
728x90
'GameEngine & CG > Unity' 카테고리의 다른 글
[Unity]Cursor (0) | 2021.09.17 |
---|---|
[Unity] Json 파일 읽어오기 (0) | 2021.08.16 |
[Unity] Render Mode (0) | 2021.08.16 |
[Unity] UI Event Handler 만들기 (0) | 2021.08.10 |
[Unity] IPointerClickHandler & IDragHandler (0) | 2021.08.10 |