Система подсказок для 2D, 3D и UI

Иногда в играх, для уточнения каких-нибудь деталей интерфейса, или описания игровых объектов, просто незаменимы всплывающие подсказки/тултипы, при наведении курсора. Реализацией подобной задачи, мы и займемся. При этом, нам нужно учитывать несколько важных пунктов: подсказки не должны выходить за границы экрана; текст тултипа должен сохранять стандартные теги редактора; должна быть возможность менять локаль подсказок. Кроме этого, такая система подсказок, должна работать не только с двухмерными или трехмерными объектами, но и элементами UI. Весь текст тултипа у нас будет храниться в одном текстовом файле, и для того, чтобы переключить язык подсказок, нужно будет просто подгрузить другой файл.


Чтобы сделать разные локали в игре, создаем в проекте папку Resources, а в ней еще одну Tooltip, затем, в эту папку можно добавлять текстовые файлы, для русской локали, например, файл Russian.txt и т.п.

Внимание! Текст файла должен иметь следующий вид:

ключ-1
текст-1 текст-1 текст-1

ключ-2
текст-2 текст-2 текст-2

ключ-3
текст-3 текст-3 текст-3


Именно в током порядке: строка с ключом, ниже строка с текстом тултипа и т.д. Обратите внимание, что текст тултипа должен быть написать в одну строку, для переноса строк используется специальный тег!

Ключ для тултипа мы придумываем и пишем в триггере:

using System.Collections;
using UnityEngine;

public class TooltipTrigger : MonoBehaviour {

	[SerializeField] private string key; // ключ тултипа
	public string Key {get{return key;}}
}

Это скрипт-триггер, который мы цепляем на объекты, чтобы показывать подсказки.

Далее, нам нужно получить доступ к UI объектам. Ищем на сцене объект EventSystem:

Система подсказок для 2D, 3D и UI

Удаляем стандартный скрипт Standalone Input Module и заменяем на свой:

using UnityEngine.EventSystems;
using UnityEngine;

public class StandaloneModule : StandaloneInputModule {

	public PointerEventData GetPointerEventData(int id)
	{
		return GetLastPointerEventData(id);
	}
}

Должно получиться следующие:


Теперь можно сделать шаблон тултипа. Это обычный UI Image с фиксированный шириной, а дочерним ему делаем UI Text. Получается родитель у нас картинка, и дочерний текст. Так вот на родителя вешаем скрипт TooltipComponent - это и есть наш тултип.

На Canvas цепляем управляющий класс TooltipSystem.

Для того чтобы переключить язык тултипа, вызываем метод:

TooltipSystem.SwitchLocale("English");

Это значит, что в ресурсах уже должен лежать файл English.txt.

Текстовые теги:

<b></b> - жирный текст
<i></i> - текст курсивом
<size=20></size> - размер текста
<color=#00ffffff></color> - цвет текста
<br> - перенос строки


Скачать демо:
https://www.patreon.com/posts/sistema-dlia-2d-23168629
Тестировалось на: Unity 2017.2.0

Комментариев 3

Офлайн
outgouing 6 февраля 2018
Добавьте еще поддержку тача :)
Можно как то так, думаю коряво но вроде работает,

StandaloneModule.cs


TooltipSystem.cs
Офлайн
Light 1 декабря 2017
SlavaXD, а здесь разве нет 2д рейкаста? По моему есть.
Офлайн
SlavaXD 30 ноября 2017
бро а нет урока по RayCast 2D?
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика