Подсказка над объектом

Чтобы подсказка (BillboardGui) автоматически размещалась на определённом расстоянии выше объекта и включала озвучку, нужно доработать скрипт. Также мы добавим проверку размеров объекта для динамического размещения подсказки.


Шаг 1: Структура объектов

  1. Для каждого объекта:
    • Добавьте ClickDetector.
    • Вложите BillboardGui:
      • Установите Enabled = false.
      • Внутри BillboardGui настройте TextLabel для текста.
    • Добавьте объект Sound, если требуется озвучка.

Шаг 2: Универсальный скрипт

Скрипт

lua
local activeHint = nil -- Текущая активная подсказка local defaultOffset = Vector3.new(0, 5, 0) -- Смещение подсказки по умолчанию -- Функция для управления подсказками local function toggleHint(object) -- Скрываем активную подсказку if activeHint then activeHint.Enabled = false activeHint = nil end -- Показываем новую подсказку local billboardGui = object:FindFirstChildOfClass("BillboardGui") local sound = object:FindFirstChildOfClass("Sound") if billboardGui then -- Определяем размер объекта local sizeOffset = Vector3.new(0, object.Size.Y / 2, 0) -- Смещение на половину высоты объекта billboardGui.StudsOffset = defaultOffset + sizeOffset billboardGui.Enabled = true activeHint = billboardGui -- Включение звука if sound then sound:Play() end -- Автоматическое закрытие через 10 секунд task.delay(10, function() if activeHint == billboardGui then billboardGui.Enabled = false activeHint = nil end end) else warn("BillboardGui не найден у объекта:", object.Name) end end -- Подключение событий для всех объектов local function setupObject(object) local clickDetector = object:FindFirstChild("ClickDetector") if not clickDetector then return end -- Проверяем, есть ли у объекта свойство Size (например, для Part) if not object:IsA("BasePart") then warn("Объект не поддерживает подсказки, так как он не является BasePart:", object.Name) return end clickDetector.MouseClick:Connect(function(player) toggleHint(object) end) end -- Настройка объектов в рабочей области for _, object in pairs(workspace:GetDescendants()) do setupObject(object) end -- Подключение новых объектов workspace.DescendantAdded:Connect(function(object) setupObject(object) end)

Объяснение работы

  1. Автоматическое определение высоты объекта:

    • Скрипт использует свойство Size.Y объекта (например, для Part), чтобы разместить подсказку выше верхней границы.
    • BillboardGui.StudsOffset автоматически устанавливается на высоту объекта плюс стандартное смещение (defaultOffset).
  2. Включение озвучки:

    • Если в объекте есть Sound, он автоматически проигрывается при активации подсказки.
  3. Закрытие подсказок:

    • Подсказка автоматически скрывается через 10 секунд.
    • При активации другой подсказки текущая закрывается.

Настройки

  • Смещение подсказки: можно изменить значение defaultOffset в скрипте.
  • Автоматическое время скрытия: задано на 10 секунд (task.delay), но может быть изменено при необходимости.

Теперь подсказки будут корректно отображаться в 3D-пространстве с учётом размеров объектов и поддерживать озвучку.


Last modified: Tuesday, 10 December 2024, 1:48 PM