Roblox GuidebookБаза знаний
Русский ⌄

Studio / ROBLOX

Клиент и сервер в Roblox Studio: как сравнить состояние во время теста

Разбираемся, какую сторону теста ты сейчас наблюдаешь, где искать объект и как сопоставлять Explorer с Output. С учебным маркером, записью наблюдений и проверкой после остановки.

Обновлено:

Сформулируй вопрос о состоянии #

Фраза «объект изменился» недостаточна для разбора ошибки. Нужно уточнить, где ты это увидел: в клиентском окне, серверном дереве или журнале. Для упражнения выбери один безобидный элемент отдельного прототипа, например закреплённый Part с именем ContextMarker. Не используй деньги, покупки или сохранённые данные игрока как учебный индикатор.

Наш вопрос: «Какое значение свойства я вижу на каждой стороне одного теста?» Он отличается от проверки нескольких игроков и от проверки сохранения между входами. Сначала запиши исходный путь Workspace → ContextMarker и одно свойство, например Color. Маркер здесь предложен для упражнения; фактических изменений наших игр и испытаний в Studio для статьи не было.

Запусти подходящий режим #

В меню режимов теста выбери Test или Test Here и запусти симуляцию. Документация описывает для этих одиночных режимов отдельную клиентскую и серверную симуляции. У Test появляется персонаж; Test Here использует положение перед текущей камерой. Для этого упражнения не нужен запуск нескольких клиентских окон.

Не подменяй режимом Run проверку обычного пути игрока: Run не вставляет аватар. Перед сравнением запиши выбранный режим и начальные условия. Если твой прототип требует персонажа, проверь, что он появился. Две записи из разных режимов могут объясняться различием запуска, поэтому начинай с одной неизменной конфигурации.

Определи активную сторону #

Во время одиночного теста используй переключатель Client/Server. Его состояние показывает, какую симуляцию ты наблюдаешь. Перед чтением любого свойства запиши сторону, а после переключения снова проверь её. Не делай вывод по тому, что камера находится рядом с тем же предметом: одинаковый вид мира не обозначает одинаковый контекст.

Полезно подписывать записи «Client» и «Server», сохраняя название кнопки как в Studio. Снимок дерева без этой отметки позже легко перепутать с другим наблюдением. В учебной схеме две панели обозначают контексты, а не два реальных игрока. Она не является снимком интерфейса или доказательством состояния работающего проекта.

Найди объект по полному пути #

На стороне клиента открой Explorer и найди выбранный путь. Затем переключись на сервер и проверь тот же путь и свойство. Сверяй родителя и имя; похожий ContextMarker в другой модели — другой объект. Если элемент не найден, запиши отсутствие, а не выдумывай значение, которое он должен был иметь.

Деревья контекстов различаются. Документация показывает клиентские PlayerScripts и серверные ServerScriptService и ServerStorage. Наличие объекта в серверном хранилище само по себе не означает доступность на клиенте. При включённом streaming клиент также может получать не весь Workspace сразу; это отдельный вопрос, который нельзя свести к ошибке в имени.

Две стороны одного одиночного тестаОткрыть изображение крупнее ↗
Оригинальная схема клиентского и серверного контекстов. Не реальные деревья проекта.

Сохрани исходную пару наблюдений #

До изменения запиши две строки: Client, полный путь, наблюдаемое значение; Server, тот же путь, наблюдаемое значение. Добавь момент наблюдения или шаг сценария. Не называй значения одинаковыми, пока реально не прочитал оба. Таблица в статье описывает формат записи, а не заполненный журнал нашего теста.

Если значения уже различаются, сначала выясни, не меняет ли их существующий скрипт и не сравниваешь ли ты разные объекты или моменты. Не добавляй новое поведение поверх необъяснённого исходного состояния. Для отдельного учебного маркера лучше начать с простого прототипа, где тебе известно, что могло воздействовать на выбранное свойство.

Запись наблюденийОткрыть изображение крупнее ↗
Оригинальная карточка записи: значения нужно прочитать в собственном тесте.

Измени одну вещь и снова сравни #

В отдельном учебном тесте выбери клиентский контекст и измени только одно наблюдаемое свойство маркера через Properties. Сразу запиши, где сделано изменение, затем прочитай значение на обеих сторонах. Цель — научиться различать место действия и место наблюдения, а не доказать универсальное правило для всех свойств Roblox.

Останови тест, вернись к исходным условиям и сделай отдельное сравнение с изменением на серверной стороне. Не смешивай два изменения в одном незаписанном ходе: серверный скрипт, задержка или новое изменение могут повлиять на увиденное. Если результат отличается от ожидания, сохрани обе записи и условия; не объявляй репликацию сломанной по одному цвету.

Сопоставь результат с Output #

Открой Output и обращай внимание на происхождение сообщений. Документация обозначает сообщения клиента синим, сервера зелёным; для сообщения ModuleScript сторона определяется тем, откуда модуль вызван. Цвет метки — дополнительный ориентир, но для разбора также нужен текст сообщения и путь к источнику.

Если в твоём прототипе уже есть диагностическая строка, сравни её время и объект с записью Explorer. Сообщение «готово» без стороны и нужного значения мало объясняет. Вымышленная ситуация: подпись интерфейса стала «выбрано», а журнал относится к другому объекту. Совпадение слов не доказывает, что сервер подтвердил именно это действие.

Проверь тип и расположение скрипта #

Когда нужного сообщения нет, посмотри на тип скрипта, его расположение и RunContext, если это Script. Один только значок или слово Script не отвечает на вопрос о стороне выполнения. В справке Roblox Script может работать на клиенте или сервере в зависимости от контекста и места; LocalScript относится к клиенту.

Не переставляй рабочие скрипты наугад, чтобы появилась строка в Output. Сначала сохрани путь и настройки, затем сравни их с официальной инструкцией о расположении скриптов. Для ModuleScript важно также, кто его вызвал. Смена места может создать дополнительное выполнение или другую ошибку, поэтому каждое изменение требует нового отдельного наблюдения.

Что проверитьПочему важно
ScriptМесто и RunContext
LocalScriptКлиентский контекст и допустимое место
ModuleScriptКто вызывает модуль

Отличай остановку от сохранения #

Stop завершает симуляцию и возвращает объекты к состоянию до теста. После остановки снова проверь исходный маркер в режиме редактирования. Изменение, которое ты видел только во время симуляции, не является автоматически сохранённой правкой проекта. Зафиксируй, где именно было выполнено редактирование.

Это упражнение не проверяет DataStore, покупку или состояние после нового входа в опубликованную игру. Даже успешное сравнение двух контекстов не означает, что данные записаны между сессиями. Для таких вопросов нужен отдельный сценарий с подходящими источниками и условиями. Не добавляй вывод о постоянном сохранении в журнал наблюдений цвета.

Составь вывод с понятными границами #

Запиши режим теста, сторону изменения, обе стороны наблюдения, путь, свойство, последовательность и связанное сообщение Output. Формулируй вывод конкретно: «В этом ходе на этой стороне наблюдалось такое значение». Отдельно укажи, что осталось непроверенным: другие клиенты, сеть, повторный вход или реальная игровая логика.

После исправления повтори тот же сценарий с исходными условиями. Если задача касается того, что видят другие игроки, переходи к отдельному тесту Server & Clients; одно переключение не заменяет его. Статья даёт оригинальную методику и учебные схемы. Реальных результатов Studio, изменений игр или измерений репликации здесь не заявлено.

ЗаписьЧто сохранить
ЗапускРежим и исходные условия
ИзменениеСторона, путь и одно свойство
НаблюдениеОбе стороны и сообщение Output
Граница выводаЧто ещё не проверялось

Первоисточники

Roblox Creator Hub — Studio testing modes
Roblox Creator Hub — Client-server runtime
Roblox Creator Hub — Script types and locations