Unity Как объединить имя каждого объекта? - PullRequest
0 голосов
/ 22 марта 2020

Я положил несколько кнопок, и я связал onClick () каждой кнопки. Это нормально, чтобы напечатать название каждой кнопки.

Но когда я нажимаю другую кнопку, текст не объединяет предыдущий текст ...

=================== ==========================================

public Text showText; //print text

public int count = 0; // count how many times click button


public void ButtonClick_1()
{
    Debug.Log("Button Clicked!");

    print(gameObject.name);

    if (count == 0) { showText.text = gameObject.name; }
    else { showText.text += gameObject.name; }
    count++;


}

===== ===================================================

Первый щелчок button1 => все в порядке, чтобы напечатать "button1"

Второй щелчок button1 снова => Это нормально, чтобы напечатать "button1button1"

Третий щелчок button2 => Это не нормально печатать. напечатать как "button2". Я надеюсь, что это напечатает "button1button1button2"

=========================================== =====================

Я хочу выяснить это .....

Я должен поставить несколько кнопок так использовать тег более полезно? Я не привык использовать теги. Надеюсь, кто-нибудь поможет мне.

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Вот как я бы это сделал:

Иметь синглтон-класс:

public class TextManager : MonoBehaviour
{
    public static TextManager Instance;

    public UnityEngine.UI.Text myUIText;

    private void Awake()
    {
        Instance = this;
    }

    public void AddLine(string _line)
    {
        myUIText.text += $"{_line} \n";
    }
}

Поместите этот компонент в GameObject и свяжите UIText в инспекторе

Тогда на моем ButtonScript у меня будет это:

public void ButtonClick()
{
    Debug.Log($"{gameObject.name} Clicked!");
    TextManager.Instance.AddLine(gameObject.name);
}
0 голосов
/ 22 марта 2020

Итак, как я понял, у вас есть этот скрипт на нескольких кнопках.

У вас есть проверка count, которая изначально равна 0 для каждого отдельного экземпляра.

Так что вместо этого вы можете сделайте его static таким образом, чтобы он был «общим» для всех экземпляров или, лучше сказать, делает его членом класса stati c, который не связан ни с одним экземпляром.

public Text showText;

public static int count = 0;

public void ButtonClick_1()
{
    Debug.Log("Button Clicked!");

    print(gameObject.name);

    if (count == 0) 
    {
        showText.text = gameObject.name;
    }
    else 
    {
        showText.text += gameObject.name; 
    }
    count++;
}

Итак что текст перезаписывается только самым первым нажатием кнопки.


Ваш комментарий

На самом деле я печатаю как "000", "001" ,, "012", «123».

звучит так, как будто вы действительно хотите всегда печатать последние три кнопки.

Я бы предпочел использовать, например, static List<string> как

private static List<string> lastThreeButtons = new List<string>();

public void ButtonClick()
{
    lastThreeButtons.Add(name);

    if(lastThreeButtons.Count == 3)
    {
        showText.text = lastThreeButtons[0] + lastThreeButtons[1] + lastThreeButtons[3];

        lastThreeButtons.Clear();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...