Unity GUI의 레이블 레이아웃

8647 단어 uGUIUnityC#

UGUI에는 표준 레이블이 없습니다.


나는 번거로움을 두려워하는 사람이다. 아무리 간단하게 준비한 물건이라도 시간을 단축하기 위해 기본적으로 자산상점에서 산다.하지만 팔지 않는 물건은 살 수 없다.
태그 레이아웃의 자산을 처리할 수 있는 UGUI가 없다는 생각이 듭니다.마지못해 써 내려갔다.

각본


적절히 보존하다.
GUITabLayout.cs
using UnityEngine;
using UnityEngine.UI;
using System;
using System.Collections.Generic;

[AddComponentMenu("UI/Advanced/Tab Controller")]
public class GUITabController : MonoBehaviour {

    [SerializableAttribute]
    public struct TabContentsPair {
        public Button tab;
        public CanvasRenderer contentBody;

        public Optionals optionals;

        public void SetTabInteractable(bool b) {
            tab.interactable = b;
            if (optionals.selectedTab != null) {
                optionals.selectedTab.gameObject.SetActive(!b);
                tab.gameObject.SetActive(b);
            }
        }
    }

    [SerializableAttribute]
    public struct Optionals {
        public CanvasRenderer selectedTab;
    }

    public List<TabContentsPair> tabContentsPairs;

    // Use this for initialization
    void Start() {
        if (tabContentsPairs != null) {
            tabContentsPairs.ForEach(pair => {
                // initialize tab state
                pair.SetTabInteractable(!pair.contentBody.gameObject.activeSelf);
                // add click listener
                pair.tab.onClick.AddListener(() => {
                    // switch active contents
                    tabContentsPairs.ForEach(p => p.contentBody.gameObject.SetActive(false));
                    pair.contentBody.gameObject.SetActive(true);
                    // switch interactable
                    tabContentsPairs.ForEach(p => p.SetTabInteractable(true));
                    pair.SetTabInteractable(false);
                });
            });
        }
    }
}

사용법


기본적으로 이런 느낌의 구성일 때.

Tabs에 어셈블리로 첨부

이렇게 설정해서 사용하세요.
또한 Optionaals는 임의입니다.(null)이 없으면 안 되고 주의해야 할 느낌.

Toggle 버전

using UnityEngine;
using UnityEngine.UI;
using System;
using System.Collections.Generic;

[AddComponentMenu("UI/Advanced/Tab Controller")]
public class GUITabController : MonoBehaviour
{

    [SerializableAttribute]
    public struct TabContentsPair
    {
        public Toggle tab;
        public CanvasRenderer contentBody;

        public Optionals optionals;

        public void SetTabInteractable(bool b)
        {
            tab.interactable = b;
            if (optionals.selectedTab != null)
            {
                optionals.selectedTab.gameObject.SetActive(!b);
                tab.gameObject.SetActive(b);
            }
        }
    }

    [SerializableAttribute]
    public struct Optionals
    {
        public CanvasRenderer selectedTab;
    }

    public List<TabContentsPair> tabContentsPairs;

    // Use this for initialization
    void Start()
    {
        if (tabContentsPairs != null)
        {
            tabContentsPairs.ForEach(pair => {
                // initialize tab state
                pair.SetTabInteractable(!pair.contentBody.gameObject.activeSelf);
                // add click listener
                pair.tab.onValueChanged.AddListener((value) => {
                    // switch active contents
                    tabContentsPairs.ForEach(p => p.contentBody.gameObject.SetActive(false));
                    pair.contentBody.gameObject.SetActive(true);
                    // switch interactable
                    tabContentsPairs.ForEach(p => p.SetTabInteractable(true));
                    pair.SetTabInteractable(false);
                });
            });
        }
    }
}

좋은 웹페이지 즐겨찾기