Добавление гиперссылок в текст
Для добавления гиперссылок к тексту в Редакторе UI или во время выполнения можно использовать теги Rich Text. В демонстрационных целях в этом примере показано, как добавить гиперссылки в окне пользовательского Редактора.
Примерный обзор
В этом примере создается окно редактора с тремя гиперссылками. Первые две ссылки создаются с помощью тегов <link>, которые используют ссылку IDs. Третья ссылка использует тег <a> с атрибутом href для определения места назначения.
Третья ссылка создается с помощью тега <a>, который использует атрибут href для определения места назначения ссылки.
Тег <link> — это богатый текстовый тег, который вы можете использовать для создания ссылок в UI Toolkit. Используйте тег <link>, если вам нужно создать много ссылок или вы хотите определить поведение ссылок с помощью скриптов C#.
В этом примере для определения логики тега <link> используются следующие события:
Примечание: Эти события являются экспериментальными, так что они все еще находятся в процессе становления достаточно стабильными для выпуска.
- PointerDownLinkTagEvent
- PointerUpLinkTagEvent
- PointerMoveLinkTagEvent
- PointerOutLinkTagEvent
- PointerOverLinkTagEvent
Вы можете найти завершенные файлы, созданные этим примером, в хранилище GitHub.
Предварительные условия
Это руководство предназначено для разработчиков, знакомых со скриптами Unity Editor, UI Toolkit и C#. Перед началом работы ознакомьтесь со следующим:
Создание примера
Для создания настраиваемого окна Редактора с гиперссылками с помощью UI Toolkit выполните следующие действия:
Создайте проект в Unity с любым шаблоном.
Щелкните правой кнопкой мыши папку
Assetsи выберите Создать > UI Toolkit > Окно редактора.В UI Toolkit Editor Window Creatorвведите
LinkTagв поле C#.Выберите Confirm. Это создаст папку
Editorсо скриптом C#, файлами UXML и USS для вашего настраиваемого окна.Дважды щелкните
LinkTag.uxml, чтобы открыть его в UI Builder.В UI Builder выберите первую метку.
-
Заменить поле Текст следующим содержимым:
Link to <link="1"><color=#40a0ff><u>Unity</u></color></link> Link to <link="2"><color=#40a0ff><u>UITK Discussions</u></color></link>! Включить Включить богатый текст.
Выберите Добавить класс стиля в список.
Вход
linkи нажмите Вход ключ. Это добавляетlinkкласс к первой метке.-
Выберите вторую метку и замените поле Текст следующим содержимым:
Link to <a href="https://www.google.com/"><u>Google</u></a> using <noparse><a></noparse> tag. Включить Включить богатый текст.
Сохраните и закройте UI Builder.
-
Заменить содержание
LinkTag.ussследующим текстом:Label { font-size: 75px; } /*Turn the mouse pointer into a hand pointer when you hover over the link text. Note that the cursor override for the link value doesn’t work at runtime.*/ .link-cursor { cursor: link; } -
Заменить содержание
LinkTag.csследующим текстом:using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.UIElements; using UnityEngine.UIElements.Experimental; public class LinkTag : EditorWindow { [SerializeField] private VisualTreeAsset m_VisualTreeAsset = default; [MenuItem("Window/LinkTag Sample")] public static void ShowExample() { LinkTag wnd = GetWindow<LinkTag>(); wnd.titleContent = new GUIContent("LinkTag Sample"); } readonly string linkCursorClassName = "link-cursor"; Dictionary<int, string> m_UrlLookup; Label linkLabel; public void OnEnable() { // Use the dictionary to map link IDs to URLs. // The link ID is the number in the link tag, and the URL is the destination. // This is a simple example, in a real application you can define a more complex structure. m_UrlLookup = new Dictionary<int, string>() { { 1, "https://www.google.com/" }, { 2, "https://discussions.unity.com/" } }; } public void CreateGUI() { VisualElement uxml = m_VisualTreeAsset.Instantiate(); rootVisualElement.Add(uxml); linkLabel = rootVisualElement.Q<Label>(className: "link"); linkLabel.RegisterCallback<PointerDownLinkTagEvent>(HyperlinkOnPointerDown); linkLabel.RegisterCallback<PointerUpLinkTagEvent>(HyperlinkOnPointerUp); linkLabel.RegisterCallback<PointerMoveLinkTagEvent>(HyperlinkPointerMove); linkLabel.RegisterCallback<PointerOverLinkTagEvent>(HyperlinkOnPointerOver); linkLabel.RegisterCallback<PointerOutLinkTagEvent>(HyperlinkOnPointerOut); } void HyperlinkOnPointerOver(PointerOverLinkTagEvent _) { linkLabel.AddToClassList(linkCursorClassName); } void HyperlinkPointerMove(PointerMoveLinkTagEvent _) { } void HyperlinkOnPointerOut(PointerOutLinkTagEvent _) { linkLabel.RemoveFromClassList(linkCursorClassName); } void HyperlinkOnPointerDown(PointerDownLinkTagEvent _) { } void HyperlinkOnPointerUp(PointerUpLinkTagEvent evt) { var linkID = int.Parse(evt.linkID); if (m_UrlLookup.TryGetValue(linkID, out var url)) Application.OpenURL(url); } }
Проверка связи
Чтобы проверить, работает ли ссылка, выполните следующие действия:
- В руководстве выберите Окно > LinkTag Образец.
- Выберите ссылки в настраиваемом окне, чтобы открыть связанные веб-сайты.