Roblox · Дополнительное

Табличка-подсказка

Табличка у дороги: издалека пустая, подходишь ближе 15 studs — на ней плавно проявляется совет. У каждого игрока — по своему расстоянию.

Структура

Синим — что нужно создать.

Workspace
└─ Signs (Folder) — все таблички
   └─ Sign1 (Model)
      ├─ Post (Part) — столб
      └─ Board (Part) — доска
         └─ SurfaceGui (SurfaceGui) — Face — к дороге
            └─ TextLabel (TextLabel) — текст; TextTransparency 1
StarterPlayer → StarterPlayerScripts
└─ SignLocal (LocalScript)

Шаги

  1. Подсказки помогают новичку: что делать, куда идти, как работает ловушка. Лучше короткие и рядом с местом, где нужны.
  2. Табличка: столб «Post» и доска «Board». В доске SurfaceGui → TextLabel. Face — сторона доски с текстом (Front, Back…), подбери, чтобы текст был со стороны дороги.
  3. TextTransparency = 1 — текст скрыт. SignLocal 5 раз в секунду меряет расстояние до каждой доски и плавно проявляет текст (TweenService), если игрок ближе 15.
  4. Скрипт локальный: подошёл ты — текст видишь ты, другой игрок вдалеке видит пустую доску.
  5. Новая табличка — копия Sign1 в папке Signs с другим текстом. Скрипт трогать не нужно.

Скрипты

SignLocal

Где: StarterPlayer → StarterPlayerScripts · LocalScript
Зачем: Проявляет текст рядом.

-- игроки
local Players = game:GetService("Players")
-- плавность
local TS = game:GetService("TweenService")
-- этот игрок
local player = Players.LocalPlayer
-- все таблички
local signs = workspace:WaitForChild("Signs")
-- ближе — текст проявляется
local DISTANCE = 15
-- табличка → показана ли
local shown = {}

-- постоянно
while true do
    -- 5 раз в секунду
    task.wait(0.2)
    -- где игрок
    local root = player.Character and player.Character:FindFirstChild("HumanoidRootPart")
    -- каждая табличка
    for _, sign in ipairs(signs:GetChildren()) do
        -- доска с текстом
        local board = sign:FindFirstChild("Board")
        -- текст
        local label = board and board:FindFirstChild("SurfaceGui") and board.SurfaceGui:FindFirstChild("TextLabel")
        -- есть
        if label then
            -- рядом?
            local near = root ~= nil and (root.Position - board.Position).Magnitude <= DISTANCE
            -- состояние сменилось
            if near ~= (shown[sign] or false) then
                -- запоминаем
                shown[sign] = near
                -- проявить или спрятать — только у этого игрока
                TS:Create(label, TweenInfo.new(0.4), {TextTransparency = near and 0 or 1}):Play()
            -- конец проверки
            end
        -- конец проверки
        end
    -- конец перебора
    end
-- конец цикла
end

Проверка

Запусти Play (или Run) и убедись:

Собрать табличку одной командой