@Gwinterion

Можно ли в инспекторе полю типа string присвоить составное значение?

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

public class TooltipSystem : MonoBehaviour
{
    private static TooltipSystem current;

    public Tooltip tooltip;

    public void Awake()
    {
        current = this;
    }

    public static void Show(string content, string header = "")
    {
        current.tooltip.SetText(content, header);
        current.tooltip.SetPosition();
        current.tooltip.gameObject.SetActive(true);
    }

    public static void Hide()
    {
        current.tooltip.gameObject.SetActive(false);
    }
}


и

class TooltipTrigger : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    public string content;
    public string header;
    public void OnPointerEnter(PointerEventData eventData)
    {
        TooltipSystem.Show(content, header);
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        TooltipSystem.Hide();
    }
}


Первый класс отвечает за отображение подсказки, а второй является триггером и передаёт данные, которые необходимо отобразить в подсказке. Скрипт TooltipTrigger я привязываю к элементу интерфейса для которого необходимо отобразить подсказу, а данные для вывода ввожу в окне инспектора.
615a5dbda5ee8204758633.png
Вопрос: Можно ли как то в инспекторе полю string задать составное значение?
Например:
string content = $"Heal recover {Player.MaxHealth / 10} HP.}
  • Вопрос задан
  • 38 просмотров
Пригласить эксперта
Ответы на вопрос 2
red-cat-fat
@red-cat-fat
Делаю игры
Да, для этого можно реализовать юнитёвский метод OnValidate. Он будет отрабатывать в редакторе при зменении префаба или его загрузке.
#if UNITY_EDITOR
		
		private void OnValidate()
		{
			if (content == "")
				content = $"Heal recover {Player.MaxHealth / 10} HP.}";
		}

#endif


Либо динамически подставлять.
Типа:
content = "Heal recover {0} HP";
...
var result = string.Format(content, 42);

Тут вместо 0 будет передаваться 42. Просто отправляй туда нужные тебе данные, в данном примере Player.MaxHealth / 10.
Ответ написан
@NIKROTOS
Начинающий программист.
похоже на: https://docs.unity3d.com/ScriptReference/TooltipAt...
ну и остальные атрибуты: https://habr.com/ru/post/331042/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы