Unity. Создание кнопок с помощью скрипта

224
03 января 2020, 22:20

Работаю с движком Unity, на языке c#. Я не знаю как сделать так, что бы кнопки созданные с помощью скрипта выполняли какой то метод, а именно присваивание определенного значению моему иксу и удаляли сами себя после присваивания. Мне нужно будет создать таких кнопок около 100, и они должны нести в себе случайное число, как на гифке( в верхней части гиф кнопки созданы без использования скрипта и работают как нужно, за исключением удаления самой себя, а в нижней части кнопки создаются скриптом, но не работают) Подкиньте статью на эту тему или может даже решение проблемы, если вам не трудно

визуализация проблемы.

Код:

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

public class NewBehaviourScript : MonoBehaviour
{
    public Transform panel;
    string Number;
    public Font font;
    public Text x;
    int chislo = 0;
    private void FixedUpdate()
    {
        x.text = string.Format("X= {0}", chislo);
    }
    public void createButton()
    {
        Number = Convert.ToString(UnityEngine.Random.Range(1, 50));
        GameObject newButton = new GameObject("knopka" + Number, typeof(Image), typeof(Button), typeof(LayoutElement));
        newButton.transform.SetParent(panel);
        newButton.GetComponent<Image>().color = new Color(0, 1, 0, 1);
        newButton.transform.SetParent(newButton.transform);
        RectTransform rect = newButton.GetComponent<RectTransform>();
        rect.anchorMin = new Vector2(0, 1);
        rect.anchorMax = new Vector2(0, 1);
        rect.anchoredPosition = new Vector2(70, -65);
        rect.sizeDelta = new Vector2(100, 100);

        GameObject newText = new GameObject("New text" + Number, typeof(Text));
        newText.transform.SetParent(newButton.transform);
        newText.GetComponent<Text>().text = Number;
        newText.GetComponent<Text>().font = font;
        newText.GetComponent<Text>().fontSize = 50;
        RectTransform rt = newText.GetComponent<RectTransform>();
        rt.anchorMin = new Vector2(0, 0);
        rt.anchorMax = new Vector2(1, 1);
        rt.anchoredPosition = new Vector2(0, 0);
        rt.sizeDelta = new Vector2(0, 0);
        newText.GetComponent<Text>().color = new Color(0, 0, 0);
        newText.GetComponent<Text>().alignment = TextAnchor.MiddleCenter;
    }
    public void chislo1()
    {
        chislo = 1;
    }
    public void chislo6()
    {
        chislo = 6;
    }
    public void chislo11()
    {
        chislo = 11;
    }
    public void chislo43()
    {
        chislo = 43;
    }
    public void chislo22()
    {
        chislo = 22;
    }
    public void chislo85()
    {
        chislo = 85;
    }

}
Answer 1

Для того, чтобы кнопка выполняла какое-либо действие по клику, можно использовать метод Button.OnClick(). Пример из документации:

m_YourFirstButton.onClick.AddListener(TaskOnClick);
m_YourSecondButton.onClick.AddListener(delegate {TaskWithParameters("Hello"); });
m_YourThirdButton.onClick.AddListener(() => ButtonClicked(42))

В вашем случае, будет удобно сделать метод, который будет принимать числовой параметр и использовать, что-то типа:

    myButton.onClick.AddListener(() => ButtonClicked(42))
    public void ButtonClicked (int number) {
        chislo = number; 
    }

При этом, вы сможете задавать кнопкам любое случайное число, сразу при их создании.

READ ALSO
Польза async await в asp.net и при ожидании Task.Delay

Польза async await в asp.net и при ожидании Task.Delay

У меня есть два вопросаЯ неплохо разобрался в асинхронном программировании в C#, но остались некоторые вопросы

190
сделать условие с выполнением AJAX

сделать условие с выполнением AJAX

Я новичок в ajax, хотелось бы спросить то, чего я в интернете не нашел

218
Вывод string из БД mysql при помощи php и mysqli [дубликат]

Вывод string из БД mysql при помощи php и mysqli [дубликат]

По сути должно работать, но особо не работаетВопрос: в чём проблема? Неработающий код:

216