Є простий спосіб зробити спливаючі підказки — BillboardGui + TextLabel.
Вони показуються над об’єктом, коли гравець дивиться на нього.
Ось покрокова інструкція 👇
🏷 Як зробити спливаючу підказку (tooltip)
1. Створи об’єкт
Наприклад, у тебе є Part (ключ, скриня, кнопка — будь-що).
Назви його як хочеш, наприклад Key
.
2. Додай BillboardGui
-
У Explorer натисни правою кнопкою на
Key
. -
Обери Insert Object → BillboardGui.
-
У властивостях BillboardGui зміни:
-
Adornee → перетягни сюди твій
Key
(щоб підказка була прив’язана до цього об’єкта). -
StudsOffset →
Vector3.new(0, 2, 0)
(піднімає підказку на 2 студи над об’єктом). -
Size →
UDim2.new(0, 200, 0, 50)
(ширина і висота). -
AlwaysOnTop →
true
(щоб видно було навіть крізь інші об’єкти).
-
3. Додай текст
-
Усередині BillboardGui встав TextLabel.
-
Налаштуй у Properties:
-
Text → наприклад,
"Натисни E, щоб взяти ключ"
. -
BackgroundTransparency →
1
(щоб фон був прозорий). -
TextScaled →
true
(щоб текст підлаштовувався під розмір). -
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 з двома текстами
-
У Key встав BillboardGui.
-
Налаштуй:
-
Size →
UDim2.new(0, 200, 0, 50)
-
StudsOffset →
Vector3.new(0, 2, 0)
-
AlwaysOnTop →
true
-
-
Усередині BillboardGui створи дві TextLabel:
-
FarText → текст
"Підійди ближче..."
-
NearText → текст
"Натисни E, щоб взяти ключ"
-
-
Зроби BackgroundTransparency = 1 для обох.
-
Встанови 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
-
У Explorer знайди ReplicatedStorage.
-
Натисни правою кнопкою → Insert Object → BillboardGui.
-
Назви його TooltipTemplate (щоб зрозуміло, що це шаблон).
-
Налаштуй його властивості:
-
Size →
UDim2.new(0, 200, 0, 50)
-
StudsOffset →
Vector3.new(0, 2, 0)
-
AlwaysOnTop →
true
-
-
Усередині нього встав 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
-
Встав Part у Workspace (наприклад,
Key
). -
Додай 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. Створюємо шаблон підказки
-
У StarterGui створи ScreenGui → назви її
TooltipGui
. -
Всередині ScreenGui створи TextLabel:
-
Name →
TooltipLabel
-
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 — тоді підказка буде з'являтись біля миші, як у звичайних іграх.)
-
Можна робити різні стилі (фон, рамка, анімації прозорості).