Урок Roblox StudioЗанятие 2 / 8

Проверяем дистанцию

Защитить взаимодействие

Проверяем дистанцию
Иллюстрация к теме занятия

Цель

Защитить взаимодействие

Подготовка

ReplicatedStorage → RemoteEvent OpenDoor; Workspace → Door; ServerScriptService → Script.

Пошаговая работа

  1. Создай отдельную копию проекта для урока №74.
  2. ReplicatedStorage → RemoteEvent OpenDoor; Workspace → Door; ServerScriptService → Script.
  3. Сделай кнопку открытия двери
  4. На сервере проверь расстояние HumanoidRootPart до двери
  5. Отклони дальний запрос
  6. Запусти Play и проверь результат по контрольным условиям.

Пример Luau

local event = game.ReplicatedStorage:WaitForChild("OpenDoor")
local door = workspace:WaitForChild("Door")
local lastUse = {}
event.OnServerEvent:Connect(function(player)
    local root = player.Character and player.Character:FindFirstChild("HumanoidRootPart")
    if not root or (root.Position-door.Position).Magnitude > 10 then return end
    local now = os.clock()
    if now - (lastUse[player] or -100) < 1 then return end
    lastUse[player] = now
    door.CanCollide = false
    door.Transparency = 0.5
end)
game.Players.PlayerRemoving:Connect(function(p) lastUse[p] = nil end)

Проверка

Слишком далёкий игрок не открывает дверь

Игрок с расстояния более 10 studs не откроет дверь; спам запросов ограничен.

Ошибка и ограничения

Проверяется расстояние только на клиенте. Проверка только в LocalScript не защищает сервер от поддельного запроса.

Усложнение

Добавь сообщение об отказе

Проверь пример в тестовой Roblox Studio перед публикацией. Используй отдельные копии проектов и не подключай два конкурирующих сохранения одновременно.

Проверь свою работу

Перед тестом убедись, что ты выполнил практику самостоятельно.

Эти отметки — личная памятка, они не влияют на звёзды.

Проверь себя

Ответь на вопросы урока. Успешный тест даёт одну звезду в личном кабинете.

⭐ Проверь свои знания

5 вопросов по теме урока. За 4 правильных ответа получишь звезду. Повторные попытки разрешены.

1. Игрок в 50 studs от двери. Сервер разрешает открыть её только в пределах 10 studs. Результат?
2. Где должна находиться окончательная проверка расстояния?
3. Чему равно расстояние между позициями (0,0,0) и (6,0,8) в studs?
4. Что проверять перед чтением HumanoidRootPart.Position?
5. Какой способ вычисляет расстояние от персонажа до двери?