Создать кнопку в Unity 4.6 из кода

1

Как я могу создать кнопку (не GUI и т.д.) В Unity 4.6 из кода? Мне нужно указать действие при нажатии.

Я попробовал добавить делегата или что-то в onClick но я не могу заставить его работать.

http://docs.unity3d.com/ScriptReference/UI.Button-onClick.html

Это код, который у меня есть до сих пор:

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

public class ButtontitleAndAction {
    public string Title;
    public delegate void Del();

    public ButtontitleAndAction(string title, Del theaction) {
        this.Title = title;
        this.action = theaction;
    }
    public void Call() {
        Debug.Log("Call " + this.Title);
        this.action();
    }

    private Del action;
}

public class MjalertScript : MonoBehaviour {
    public Text Text;
    public GameObject gameobjectButtons;
    public GameObject gameobjectMjalertbutton;

    // Use this for initialization
    void Start() {

    }

    public void Addbuttons(ButtontitleAndAction[] buttontitles) {
        //  public void Addbuttons(string[] buttontitles) {
        GridLayoutGroup grid = this.gameobjectButtons.GetComponent<GridLayoutGroup>();
        float newwidth = 400 / buttontitles.Length;
        grid.cellSize = new Vector2(newwidth, grid.cellSize.y);
        foreach (ButtontitleAndAction buttondata in buttontitles) {
            GameObject gameobjectButton = (GameObject)Instantiate(this.gameobjectMjalertbutton);
            Transform child = gameobjectButton.transform.GetChild(0); // There should just be one child, the gameobject for the Text label.
            Text textofbutton = child.gameObject.GetComponent<Text>();
            textofbutton.text = buttondata.Title;
            gameobjectButton.transform.SetParent(gameobjectButtons.transform, false);
            Button buttonofbutton = gameobjectButton.GetComponent<Button>();
            Debug.Log("buttonofbutton: " + buttonofbutton + ", for label text: " + buttondata.Title);
            buttonofbutton.onClick.AddListener(() => {
                Debug.Log("DOO Something!");
                //buttondata.Call();
            });
        }
    }
}

Кнопки не реагируют ни на какие краны. Я ожидал "DOO Something!" что-то выводить, но ничего.

Теги:
unity3d
button

1 ответ

0
Лучший ответ

В приведенном выше коде нет никаких проблем. Я понял реальную проблему. Так или иначе, элемент EventSystem никогда не добавлялся в иерархию. Просто добавьте один, и кнопки будут работать. На самом деле, в моем случае, ни кнопки с помощью кода, ни с помощью редактора никогда не работали. Проблема с EventSystem была проблемой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню