ちょび日記

明日は明日の風が吹く

2016-10-02

ボタンをスクリプトから作る(おもにデバッグ用途)


デバッグ用途でももうOnGUI使いたくないなー、ということはよくあると思うんですが、 さっくりとボタンをたくさん作るのが面倒くさいuGUI、、、、ということでスクリプトを置いておきます

UnityEditor.AssetDatabase.GetBuiltinExtraResourceを使っている関係上iOSなどの実機では使えません。 その場合は別途画像を読み込んで割り当てるように変更して下さい。

    private Button CreateButton(string text)
    {
        var btn = new GameObject();
        var button = btn.AddComponent<Button>();
        var image = btn.AddComponent<Image>();
        var layout = btn.AddComponent<LayoutElement>();
        layout.preferredHeight = 40;
        layout.preferredWidth = 120;

        image.type = Image.Type.Sliced;
        var text_go = new GameObject();
        var rect = btn.GetComponent<RectTransform>();
        rect.anchorMin = new Vector2(0, 1);
        rect.anchorMax = new Vector2(0, 1);
        rect.sizeDelta = new Vector2(240, 80);
        text_go.transform.SetParent(btn.transform);

        button.targetGraphic = image;

        var txt = text_go.AddComponent<Text>();
        txt.font = Resources.GetBuiltinResource(typeof(Font), "Arial.ttf") as Font;
        txt.text = text;
        txt.fontSize = 15;
        txt.alignment = TextAnchor.MiddleCenter;
        txt.color = new Color(32.0f / 255.0f, 32.0f / 255.0f, 32.0f / 255.0f, 1);
        txt.raycastTarget = false;

        var txt_rect = text_go.GetComponent<RectTransform>();
        txt_rect.anchorMin = Vector2.zero;
        txt_rect.anchorMax = Vector2.one;

        image.sprite = UnityEditor.AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/UISprite.psd");
        return button;
    }

事前準備としてCanvas以下に適当なGameObjectを配置しておいて、VerticalLayoutGroupとContentSizeFitterをつけておきます。

for (var i = 0; i < Length; i++)
{
    var name = a[i];

    var btn = CreateButton(name);
    btn.onClick.AddListener(() =>
    {
        Debug.Log(name);
    });
    btn.transform.SetParent(GameObject.Find("Canvas/GameObject").transform);
}

こんな感じで適当に作ってCanvas以下に配置すればOK。 が、こんだけ労力払うなら使い捨てのDebug用途ならOnGUIでいいじゃろ、、、と思ったりも



Copyright© 2016, chobie All rights reserved.