Ползунок пользовательских значений unity

#unity3d #slider #letter

Вопрос:

Я хочу вернуть отображаемое значение (a,b,c,d), а не числа (0.01-0.019 и т. Д.) Помощь будет приятной, и многие люди будут счастливы. Этот код выглядит как процентное отображение, но мне не нужен процент, мне нужен текст

 Mathf.RoundToInt(value * 100)   "%"
 

Комментарии:

1. Немного сбивает с толку то, что вы пытаетесь сделать, вы имеете в виду соотношение числа к тексту от » 50%» до «пятидесяти процентов»?

2. Нет, мне просто нужен текст, когда я перетаскиваю ползунок

3. @VaporMarin Я добавил два решения. Один специально для буквенно-цифрового вывода, а другой для более общих строковых значений, сопоставленных с числами.

4. Создайте массив текстов .. используйте ползунок только с полными целочисленными шагами -> каждый шаг является индексом вашего массива .. готово

Ответ №1:

Вместо того, чтобы создавать совершенно новый пользовательский слайдер, используйте то, что уже предоставляет Unity, а затем сопоставьте выходные данные в любом желаемом формате. Ползунки можно настроить так, чтобы они имели фиксированное количество выходов, а также фиксировались только на целых числах.

Пример

Если вы посмотрите на компонент слайдер в редакторе, поля Min Value , Max Value , и Whole Numbers должны быть установлены. Самое важное-установить Whole Numbers значение true и Max Value максимально возможное значение — 1 из вашего нового сопоставленного набора.

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

Пример 2

Вы можете либо добавить обратный вызов в редакторе с помощью UnityAction пользовательского интерфейса в редакторе, либо программно добавить обратный вызов, обратившись к onValueChange прослушивателям и добавив нового прослушивателя. Для примера я сделаю все в коде, чтобы устранить любую путаницу.

Все, что осталось, — это сопоставить полученные значения, которые выводит наш слайдер, с некоторым желаемым результатом. Поскольку желаемые выходные данные кажутся просто буквенно-цифровыми значениями, вы действительно можете упростить решение, зная, что, взяв целое значение и добавив к нему символ «a», вы получите соответствующее буквенно-цифровое значение (где 0 соответствует a, а 25-z).

 [SerializeField] private Slider slider = null;

private void Start()
{
    slider.onValueChanged.AddListener(delegate { SliderValueChangedCallback(); });
}

/// <summary>
/// Called when our slider value changes
/// </summary>
private void SliderValueChangedCallback()
{
    // grab out numeric value of the slider - cast to int as the value should be a whole number
    int numericSliderValue = (int)slider.value;

    // now, plot our value to an alphanumeric one
    char alphaNumericValue = (char)(numericSliderValue   'a');

    Debug.Log(alphaNumericValue);
}
 

Теперь это решение будет работать только в том случае, если вы хотите, чтобы ваши выводимые значения были буквенно-цифровыми. Если вам нужно более модульное решение, вот одно из них:

 [SerializeField] private Slider slider = null;
[SerializeField] private Text currentValue = null;

[SerializeField] private List<string> yourValueList = new List<string> { "First Message", "Second Message", "Third Value", "4 for some reason", "the letter 6" };

private void Start()
{
    slider.onValueChanged.AddListener(delegate { SliderValueChangedCallback(); });

    // assuring that our slider is setup properly to map values
    slider.minValue = 0;
    slider.maxValue = yourValueList.Count - 1;
    slider.wholeNumbers = true;
}

/// <summary>
/// Called when our slider value changes
/// </summary>
private void SliderValueChangedCallback()
{
    // grab out numeric value of the slider - cast to int as the value should be a whole number
    int numericSliderValue = (int)slider.value;

    // debugging - do whatever you want with this value
    currentValue.text = yourValueList[numericSliderValue];
}
 

Вот его gif в действии:

Пример 3

Дайте мне знать, если у вас возникнут вопросы. Я не был уверен, хотите ли вы визуально отображать эти маркеры и на слайдере, но это также можно сделать, используя нормализованные позиции и группу горизонтальной компоновки.