Используйте ползунок, чтобы установить значение переменной, не касаясь ползунка первым - PullRequest
0 голосов
/ 20 марта 2020

У меня есть короткий скрипт, прикрепленный к Text-Gameobject, который устанавливает текст для отображения текущего значения / положения слайдера. Этот текстовый игровой объект прикрепляется к ползункам по значению измененного поля: ShowSliderValue -> [Dynami c float] TextUpdate

Когда я нажимаю кнопку «Воспроизвести», в моем тексте не сразу отображается выбранное значение / позиция. Только когда я меняю положение ползунка, текст меняется с «Новый текст» на фактическое значение моего ползунка. Технически я хочу запустить «On Value Changed», когда я нажимаю play. Таким образом, я могу избежать любых ненужных зависимостей в моем скрипте.

using UnityEngine;
using UnityEngine.UI;

public class ShowSliderValue : MonoBehaviour
{
    private Text text;

    void Awake()
    {
        text = this.GetComponent<Text>();
    }

    public void TextUpdate(float value)
    {
        text.text = value.ToString("0.00");
    }
}

При поиске решения я нашел следующее видео. В 5:06 (до 5:26) они устанавливают значение по умолчанию от 1 до 30, и это, кажется, работает прямо из коробки. Нажмите здесь для ссылки на YouTube.

Можно ли в моем тексте отобразить значение ползунка без предварительного перемещения ползунка или без активного запроса значения ползунка в показанном скрипте?

Редактировать:

Вот мое текущее решение: я добавляю скрипт к своему ползунку, который изменяет значение ползунка при запуске (). Поскольку значение должно действительно измениться, slider.value = slider.value не работает.

using UnityEngine;
using UnityEngine.UI;


public class SliderTest : MonoBehaviour
{
    private void Start()
    {
        Slider slider = this.GetComponent<Slider>();

        float originalValue = slider.value;

        slider.value = slider.maxValue;
        slider.value = slider.minValue;

        slider.value = originalValue;
    }
}

Это гарантирует, что изменение значения произойдет. Если minValue = maxValue - что делает ползунок в любом случае устаревшим.

1 Ответ

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

Вы можете использовать этот скрипт, который установит текст ползунка в первом кадре, и после этого вы можете использовать функцию Textupdate для установки значения текстов. Это скрипт, который я сделал:


using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class SliderTutorial : MonoBehaviour
{
    public Slider slider;
    public TextMeshProUGUI txt;

    // Start is called before the first frame update
    void Start()
    {
        SetText();
    }

    public void SetText()
    {
        txt.SetText(slider.value.ToString());
    }
    public void TextUpdate(float value)
    {
        txt.SetText(value.ToString());
    }
}

Вы также можете использовать что-то вроде этого, которое будет постоянно обновлять текст из самого скрипта, а не событие On Value Changed.

using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class SliderTutorial : MonoBehaviour
{
    public Slider slider;
    public TextMeshProUGUI txt;

    // Update is called once per frame
    void Update()
    {
        txt.SetText(slider.value.ToString());
    }
}

Если у вас есть еще вопросы, не стесняйтесь их задавать.

...