Як зробити спливаючі підказки на об'єктах

Є простий спосіб зробити спливаючі підказки — BillboardGui + TextLabel.

Вони показуються над об’єктом, коли гравець дивиться на нього.

Ось покрокова інструкція 👇


🏷 Як зробити спливаючу підказку (tooltip)

1. Створи об’єкт

Наприклад, у тебе є Part (ключ, скриня, кнопка — будь-що).
Назви його як хочеш, наприклад Key.


2. Додай BillboardGui

  1. У Explorer натисни правою кнопкою на Key.

  2. Обери Insert ObjectBillboardGui.

  3. У властивостях BillboardGui зміни:

    • Adornee → перетягни сюди твій Key (щоб підказка була прив’язана до цього об’єкта).

    • StudsOffsetVector3.new(0, 2, 0) (піднімає підказку на 2 студи над об’єктом).

    • SizeUDim2.new(0, 200, 0, 50) (ширина і висота).

    • AlwaysOnToptrue (щоб видно було навіть крізь інші об’єкти).


3. Додай текст

  1. Усередині BillboardGui встав TextLabel.

  2. Налаштуй у Properties:

    • Text → наприклад, "Натисни E, щоб взяти ключ".

    • BackgroundTransparency1 (щоб фон був прозорий).

    • TextScaledtrue (щоб текст підлаштовувався під розмір).

    • TextColor3 → вибери білий або жовтий (добре видно).

    • Font → будь-який, наприклад GothamBold.


4. (Додатково) Зроби, щоб підказка зникала після взаємодії

Можна додати маленький скрипт, який видаляє BillboardGui, коли гравець бере ключ:

local key = script.Parent local billboard = key:FindFirstChild("BillboardGui") local clickDetector = key:FindFirstChild("ClickDetector") clickDetector.MouseClick:Connect(function(player) if billboard then billboard.Enabled = false -- або billboard:Destroy() end end)

🔥 Поради

  • Для багатьох підказок краще зробити Template BillboardGui у ReplicatedStorage, а потім клонувати його через скрипти.

  • Можна робити динамічні підказки (наприклад, показувати інший текст залежно від стану об’єкта).


🏷 Приклад: Підказка близько / далеко

1. Створюємо об’єкт

  • Додай Part у Workspace (наприклад, Key).

  • Зроби його Anchored = true і кинь десь на сцену.


2. Додаємо BillboardGui з двома текстами

  1. У Key встав BillboardGui.

  2. Налаштуй:

    • SizeUDim2.new(0, 200, 0, 50)

    • StudsOffsetVector3.new(0, 2, 0)

    • AlwaysOnToptrue

  3. Усередині BillboardGui створи дві TextLabel:

    • FarText → текст "Підійди ближче..."

    • NearText → текст "Натисни E, щоб взяти ключ"

  4. Зроби BackgroundTransparency = 1 для обох.

  5. Встанови Visible = false для NearText (щоб спочатку показувався тільки текст "далеко").


3. Додаємо локальний скрипт

Усередині BillboardGui встав LocalScript і встав цей код:

local billboard = script.Parent local keyPart = billboard.Adornee or billboard.Parent local farText = billboard:FindFirstChild("FarText") local nearText = billboard:FindFirstChild("NearText") local player = game.Players.LocalPlayer local runService = game:GetService("RunService") local nearDistance = 10 -- відстань, коли міняється текст runService.RenderStepped:Connect(function() if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then local distance = (player.Character.HumanoidRootPart.Position - keyPart.Position).Magnitude if distance <= nearDistance then -- Близько if farText then farText.Visible = false end if nearText then nearText.Visible = true end else -- Далеко if farText then farText.Visible = true end if nearText then nearText.Visible = false end end end end)

🔎 Як це працює

  • Скрипт постійно перевіряє відстань між гравцем і об’єктом.

  • Якщо гравець ближче ніж 10 студів → показує NearText ("Натисни E...").

  • Якщо далі → показує FarText ("Підійди ближче...").


💡 Ідеї для покращення

  • Можна зробити плавну анімацію прозорості, щоб підказка красиво з’являлась/зникала.

  • Можна показувати різні підказки для різних гравців (наприклад, якщо в одного вже є ключ — взагалі ховати текст).

  • Можна додати перевірку клавіші E, щоб одразу брати предмет.


Створення Template BillboardGui у ReplicatedStorage,
та клонування його через скрипти

🗂 1. Створюємо шаблон (Template) у ReplicatedStorage

  1. У Explorer знайди ReplicatedStorage.

  2. Натисни правою кнопкою → Insert ObjectBillboardGui.

  3. Назви його TooltipTemplate (щоб зрозуміло, що це шаблон).

  4. Налаштуй його властивості:

    • SizeUDim2.new(0, 200, 0, 50)

    • StudsOffsetVector3.new(0, 2, 0)

    • AlwaysOnToptrue

  5. Усередині нього встав TextLabel і зроби його красивим:

    • BackgroundTransparency = 1

    • TextScaled = true

    • **TextColor3 = Color3.new(1,1,1)` (білий)

    • Font = GothamBold

    • **Text = "Sample Tooltip"` (тестовий текст)


📜 2. Пишемо скрипт, щоб клонувати шаблон

Припустимо, у нас є Part під назвою Key, до якого треба додати підказку.

У ServerScriptService створи Script з таким кодом:

local ReplicatedStorage = game:GetService("ReplicatedStorage") -- Беремо шаблон local tooltipTemplate = ReplicatedStorage:WaitForChild("TooltipTemplate") -- Знаходимо об'єкт, до якого прив'язуємо підказку local key = workspace:WaitForChild("Key") -- Клонуємо шаблон local newTooltip = tooltipTemplate:Clone() newTooltip.Adornee = key -- щоб "висів" над цим Part newTooltip.Parent = key -- або workspace, але краще робити дочірнім об'єкта -- Міняємо текст у клоні (якщо треба) local textLabel = newTooltip:FindFirstChildOfClass("TextLabel") if textLabel then textLabel.Text = "Натисни E, щоб взяти ключ" end

🔎 Як це працює

  • Шаблон зберігається у ReplicatedStorage — це місце, яке бачать і сервер, і клієнти.

  • Коли треба показати підказку — ми просто клонуємо шаблон, вказуємо, до чого його прикріпити (Adornee), і змінюємо текст, якщо треба.

  • Так можна швидко створювати багато підказок навіть у циклі для десятків об’єктів.


🚀 Приклад для кількох об’єктів

Якщо в тебе 10 ключів у Workspace, можна зробити так:

local ReplicatedStorage = game:GetService("ReplicatedStorage") local tooltipTemplate = ReplicatedStorage:WaitForChild("TooltipTemplate") for _, part in ipairs(workspace:GetChildren()) do if part.Name == "Key" then local tooltip = tooltipTemplate:Clone() tooltip.Adornee = part tooltip.Parent = part local textLabel = tooltip:FindFirstChildOfClass("TextLabel") if textLabel then textLabel.Text = "Натисни E, щоб взяти ключ" end end end

Цей код автоматично додасть підказки всім об'єктам з ім'ям Key.


🏷 Приклад: Підказка при наведенні миші

1. Додаємо об’єкт і ClickDetector

  1. Встав Part у Workspace (наприклад, Key).

  2. Додай ClickDetector у цей Part (через Explorer → Insert Object → ClickDetector).


2. Створюємо шаблон підказки в ReplicatedStorage

(Як я пояснював раніше — BillboardGui з TextLabel усередині).
Назви його TooltipTemplate.


3. Скрипт для показу / приховування підказки

У ServerScriptService створи Script:

local ReplicatedStorage = game:GetService("ReplicatedStorage") local tooltipTemplate = ReplicatedStorage:WaitForChild("TooltipTemplate") local key = workspace:WaitForChild("Key") local clickDetector = key:WaitForChild("ClickDetector") local currentTooltip -- тут збережемо активну підказку -- Функція показу підказки local function showTooltip() if not currentTooltip then currentTooltip = tooltipTemplate:Clone() currentTooltip.Adornee = key currentTooltip.Parent = key end end -- Функція приховування підказки local function hideTooltip() if currentTooltip then currentTooltip:Destroy() currentTooltip = nil end end -- Підписуємось на події миші clickDetector.MouseHoverEnter:Connect(showTooltip) clickDetector.MouseHoverLeave:Connect(hideTooltip)

🔎 Як це працює

  • MouseHoverEnter → викликає showTooltip(), клонуючи BillboardGui і прив’язуючи його до об’єкта.

  • MouseHoverLeave → викликає hideTooltip(), видаляючи підказку.

Це дуже зручно, бо підказка існує тільки тоді, коли гравець наводить мишку на об’єкт.


💡 Поради

  • Можна додати затримку (0.2–0.3 секунди), щоб підказка не мигала, якщо гравець швидко водить мишкою.

  • Можна зробити одну глобальну BillboardGui і просто міняти їй Adornee і Text, щоб не створювати нові кожного разу (оптимізація).

  • Якщо у тебе багато об’єктів з підказками — можна підписувати їх на один і той самий скрипт у циклі.

🏷 Глобальна підказка (одна на всю гру)

1. Створюємо шаблон підказки

  1. У StarterGui створи ScreenGui → назви її TooltipGui.

  2. Всередині ScreenGui створи TextLabel:

    • NameTooltipLabel

    • BackgroundTransparency = 1`

    • TextScaled = true`

    • Text = ""` (порожній на старті)

    • Visible = false` (щоб не видно було, поки не наведеш мишу)

Це буде UI-елемент на екрані, а не BillboardGui — підказка буде показуватись у кутку екрана або біля курсора.


2. Скрипт для управління підказкою

У StarterPlayerScripts створи LocalScript:

local player = game.Players.LocalPlayer local mouse = player:GetMouse() local tooltipGui = player:WaitForChild("PlayerGui"):WaitForChild("TooltipGui") local tooltipLabel = tooltipGui:WaitForChild("TooltipLabel") -- Список об'єктів, для яких будуть підказки local tooltipObjects = { {object = workspace:WaitForChild("Key"), text = "Натисни E, щоб взяти ключ"}, {object = workspace:WaitForChild("Door"), text = "Це двері, які можна відкрити ключем"} } -- Функція показу підказки local function showTooltip(text) tooltipLabel.Text = text tooltipLabel.Visible = true end -- Функція приховування підказки local function hideTooltip() tooltipLabel.Visible = false end -- Прив'язуємо події до об'єктів for _, data in ipairs(tooltipObjects) do local obj = data.object local clickDetector = Instance.new("ClickDetector") clickDetector.MaxActivationDistance = 10 -- відстань наведення clickDetector.Parent = obj clickDetector.MouseHoverEnter:Connect(function() showTooltip(data.text) end) clickDetector.MouseHoverLeave:Connect(function() hideTooltip() end) end

🔎 Як це працює

  • TooltipLabel завжди є, але прихована (Visible = false).

  • Коли наводиш мишу на будь-який об’єкт зі списку tooltipObjects → показує текст.

  • Коли відводиш мишу → підказка зникає.

  • Так у грі завжди є одна єдина підказка, а не багато BillboardGui, що зменшує навантаження.


💡 Покращення

  • Можна зробити, щоб підказка рухалась за курсором:

game:GetService("RunService").RenderStepped:Connect(function() tooltipLabel.Position = UDim2.fromOffset(mouse.X + 15, mouse.Y + 15) end)

(Додай це в LocalScript — тоді підказка буде з'являтись біля миші, як у звичайних іграх.)

  • Можна робити різні стилі (фон, рамка, анімації прозорості).