오보에블로그

[Unity] UI Button 이벤트로 Text 변경 (+ Bind) 본문

GameEngine & CG/Unity

[Unity] UI Button 이벤트로 Text 변경 (+ Bind)

(OBO) 2021. 8. 9. 23:38
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