Hệ thống Tooltip đơn giản cho UI

Tags:
UI
Tooltip
Input

C# Code

/* TooltipManager.cs (Singleton) */
using UnityEngine;
using TMPro;

public class TooltipManager : MonoBehaviour
{
    public static TooltipManager Instance { get; private set; }
    public Tooltip tooltip;

    void Awake()
    {
        if (Instance != null && Instance != this) Destroy(gameObject); else Instance = this;
    }

    void Start()
    {
        if (tooltip != null) tooltip.gameObject.SetActive(false);
    }

    public void ShowTooltip(string content)
    {
        if (tooltip != null)
        {
            tooltip.SetText(content);
            tooltip.gameObject.SetActive(true);
        }
    }

    public void HideTooltip()
    {
        if (tooltip != null) tooltip.gameObject.SetActive(false);
    }
}

/* Tooltip.cs */
using UnityEngine;
using TMPro;

public class Tooltip : MonoBehaviour
{
    public TextMeshProUGUI contentField;
    public RectTransform backgroundRectTransform;
    private RectTransform rectTransform;

    void Awake()
    {
        rectTransform = GetComponent<RectTransform>();
    }

    void Update()
    {
        // Follow mouse position
        transform.position = Input.mousePosition;

        // Adjust pivot to stay on screen
        Vector2 pivot = new Vector2(Input.mousePosition.x / Screen.width, Input.mousePosition.y / Screen.height > 0.5f ? 1 : 0);
        rectTransform.pivot = pivot;
    }

    public void SetText(string content)
    {
        contentField.text = content;
        // Optional: Adjust background size based on text length
        backgroundRectTransform.sizeDelta = new Vector2(contentField.preferredWidth + 20f, contentField.preferredHeight + 20f);
    }
}

/* TooltipTrigger.cs */
using UnityEngine;
using UnityEngine.EventSystems;

public class TooltipTrigger : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    [TextArea]
    public string content;

    public void OnPointerEnter(PointerEventData eventData)
    {
        TooltipManager.Instance.ShowTooltip(content);
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        TooltipManager.Instance.HideTooltip();
    }
}

Hiển thị một khung thông tin (tooltip) khi người dùng di chuột qua một đối tượng UI. Gồm 3 scripts: TooltipTrigger để kích hoạt, Tooltip để hiển thị, và TooltipManager (Singleton) để quản lý.

Bình luận (0)

Bạn cần đăng nhập để có thể bình luận.

Chưa có bình luận nào. Hãy là người đầu tiên!

Bài viết liên quan

Tạo một joystick ảo có thể di chuyển bằng cách kéo thả trên màn hình cảm ứng. Yêu cầu 2 đối tượng Image UI cho background và handle của joystick.

Mobile
UI
Input
Player
Movement

Một hệ thống UI cho phép người chơi kéo thả vật phẩm giữa các ô trong kho đồ. Yêu cầu một CanvasGroup trên prefab của item để xử lý raycast.

UI
Inventory
Drag and Drop
Input

Cho phép người chơi di chuyển nhân vật đến một vị trí trên mặt đất bằng cách chạm vào điểm đó trên màn hình. Sử dụng Raycast để xác định vị trí trong không gian 3D.

Mobile
3D
Movement
Player
Input

Cung cấp chức năng cho người chơi chụp lại khoảnh khắc trong game và lưu thành tệp PNG vào một thư mục được chỉ định.

Utility
Input
Mobile
Saving

Một script để quản lý một điểm đánh dấu trên UI (ví dụ: icon nhiệm vụ), đảm bảo nó luôn chỉ đúng hướng tới mục tiêu trong không gian 3D và ghim vào cạnh màn hình khi mục tiêu ở ngoài tầm nhìn.

UI
Navigation
Quest
Camera

Sử dụng Input System mới của Unity để di chuyển nhân vật 2D hoặc 3D một cách hiệu quả và linh hoạt.

2D
3D
Input
Gameplay
Player

Sử dụng cảm biến con quay hồi chuyển (gyroscope) của điện thoại để điều khiển sự xoay của một đối tượng. Hữu ích cho các game đua xe hoặc trải nghiệm VR/AR đơn giản.

Mobile
Input
Movement
Rotation
Sensor

Sử dụng Rich Text tags để thay đổi màu sắc của một phần văn bản trong TextMeshPro một cách linh hoạt mà không cần thay đổi màu của toàn bộ đối tượng.

UI
TextMeshPro
Rich Text

Sử dụng DOPunchScale của DOTween để tạo hiệu ứng 'nảy' hoặc 'đấm' cho đối tượng, rất hữu ích cho các nút bấm hoặc item.

DOTween
Animation
Punch
UI

Sử dụng DOTween để thay đổi kích thước của một đối tượng, tạo hiệu ứng phóng to hoặc thu nhỏ.

DOTween
Animation
Scale
UI