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

Studio / ROBLOX

Чья это подсказка: история личной панели в Roblox

Вымышленная мастерская ветра: Ася открывает справку, а у Дани меняется страница. Как разделить личный интерфейс, общий этап задания и мир на сервере, прежде чем писать исправление.

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

Вымышленная мастерская и две разные страницы #

Это вымышленная учебная история об отдельном прототипе, а не отзыв игроков или отчёт об исправлении наших игр. Ника придумала мастерскую ветра: два участника вместе собирают модель колеса. У общего задания есть этапы «основание», «лопасти» и «проверка». Сейчас команда находится на этапе лопастей. Колесо стоит в центре помещения, а личная кнопка открывает справку.

Ася, обозначенная A, читает «Как закрепить лопасть». Даня, B, открыл другую тему — «Как повернуть камеру», чтобы осмотреть крепление сбоку. Ася листает свою справку. У Дани внезапно появляется та же страница. Он возвращается к камере, но следующее действие Аси опять меняет его текст. Ника видит не проблему размера кнопки, а нарушение границы между двумя личными выборами.

1. Общая цель не делает общим всё #

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

В раннем замысле использовалось одно значение «текущая страница помощи команды». Любое перелистывание становилось сообщением всем. Именно это выбрано причиной в нашей истории; похожий симптом в реальном проекте ещё требует диагностики. Ника не обвиняет Roblox в автоматическом соединении панелей. Она записывает точное нежелательное поведение: ввод A меняет выбор B без общей игровой причины. Так проблему можно передать разработчику, не пряча её за фразой «интерфейс сломан».

2. Три вида состояния вместо одной переменной #

На листе появляются три строки. Личное представление: открыта ли справка, какая тема выбрана, какое место текста читает конкретный участник. Общий прогресс: на каком этапе находится командная сборка. Состояние мира: какие детали действительно установлены и как выглядит колесо. Последние две строки могут быть связаны правилами, но не заменяют первую.

Ася может открыть страницу о проверке заранее. Это не переносит команду на этап проверки и не устанавливает лопасть. Закрытие окна тоже не отменяет работу Дани. Для каждого поля Ника указывает владельца, источник изменения и читателей. «Владелец» здесь означает область ответственности состояния, а не авторское право на панель. Таблица контракта описывает выбранную архитектуру прототипа, не универсальные правила всех кооперативных игр.

Кому принадлежит состояниеОткрыть изображение крупнее ↗
Наша схема ответственности: личное чтение отделено от серверного этапа и деталей мира. Реализация не проверена в Studio.

3. PlayerGui помогает найти нужную копию #

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

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

4. Исправительное правило начинается с обычного чтения #

Ника выбирает простой контракт: открытие справки A показывает только панель A; переход A между темами меняет только его выбор; закрытие A не закрывает B. На сервере S эти действия не продвигают сборку и не изменяют детали. Личное представление в этом прототипе управляется локально, без ненужной отправки каждого перелистывания команде.

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

СостояниеОтветственностьИсточник измененияЧто не меняет
Видимость справкиЛичный UI каждого игрокаСвой открыть/закрытьПанель B и сборку S
Тема и место чтенияКонкретный читательСвой выбор/прокруткаВыбор другого участника
Язык личного текстаПредставление своего игрокаЛичная языковая настройкаЯзык B и общий этап
Этап командной задачиСерверный общий источникРабота по правилам прототипаНе обязан открывать всем справку
Установленные деталиМир, подтверждаемый серверомДопустимое игровое действиеНе выводится из прочитанной страницы
Текущий заголовок этапаОтображение общего факта в личном UIАктуальные сведения SНе выбирает за B его тему

5. Командный этап по-прежнему важен обоим #

Теперь Ника замечает обратную крайность: если вообще перестать получать общий прогресс, справка может описывать уже завершённый этап. Она сохраняет серверный источник командного состояния. Действительно выполненная работа меняет его по правилам прототипа; клиентский текст лишь отображает подтверждённые сведения. Кнопка «Следующая страница» не служит разрешением на изменение мира.

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

6. Устаревшая подсказка требует понятного перехода #

Ася читает инструкцию о лопастях, а общий этап уже сменился на проверку. Ника заранее выбирает поведение: сохранить видимость личной панели, показать «Этап изменился: теперь проверка» и предложить открыть актуальную тему. Старый текст получает явную пометку, если больше не применим. Он не должен молча выглядеть текущей задачей.

Это проектный выбор, а не автоматическая функция PlayerGui. Для поздних обновлений Ника просит сопоставлять сведения с текущим этапом и выбранной темой, чтобы старый ответ не перезаписал новый личный выбор. Пока такое сопоставление не реализовано, его отмечают требованием. Не нужно автоматически открывать помощь всем при каждом событии. У участника остаётся собственный путь чтения, а у команды — понятный общий факт, который можно проверить.

7. Доступная справка тоже остаётся личной #

На рисунке Ника подписывает область «Моя справка», а общий заголовок — «Этап команды». Одного синего или оранжевого цвета для этого недостаточно: принадлежность объясняют словами. Страница содержит название темы и понятный способ закрытия. Увеличенный текст не должен вытеснить эти ориентиры из доступного пространства.

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

8. Перевод меняет фразу, а не командный этап #

В замысле Ася читает по-русски, Даня — по-английски. Они могут видеть разные длины и порядок слов при одном общем этапе. Внутреннее обозначение этапа не должно зависеть от переведённого заголовка. Владелец страницы также не меняется от языка текста.

Roblox предоставляет средства локализации и ручные переводы. Ника использует это как основание подготовить фразы с контекстом, а не сравнивать отображаемые слова для игровой логики. «Моя справка» и «Этап команды» переводятся полностью; для арабского проверяют направление и смешанные обозначения, для китайского — переносы. Автоматический перевод не доказывает, что экран различает личное и общее. Смена языка A в нашем контракте не выбирает язык B и не переключает командную сборку на другой этап.

9. Возвращение персонажа не решает вопрос владельца #

Ника добавляет к будущей проверке респавн A. В этой версии задумано возвращать его личную справку закрытой, а общий этап читать заново из актуального состояния. B продолжает пользоваться своей панелью. Это выбранная политика, не обещание стандартного поведения каждой игры.

Поведение GUI при появлении персонажа связано с настройками, включая ResetOnSpawn у LayerCollector, от которого наследуется ScreenGui. Сохранение экземпляра панели и восстановление правильного содержимого — разные задачи. Ника просит проверить реальную иерархию и настройки, не опираться на устаревший общий ResetPlayerGuiOnSpawn. Мы не ставим значение в чужом проекте. Новый вход, респавн и закрытие справки остаются отдельными случаями; никакой из них сам по себе не обещает сохранение личного чтения между посещениями.

10. План проверки оставляют незаполненным #

Последний лист содержит исходную ситуацию: A открыл тему лопастей, B — камеры, S хранит этап лопастей. Затем отдельно проверяют перелистывание, закрытие, почти соседние действия обоих, смену общего этапа, позднее обновление, респавн и языки. Ожидание задано заранее; фактические колонки A/B/S пока пусты.

Если будущая проверка покажет изменение B после личного действия A, записывают тему, порядок и общий этап, а не сразу предполагают конкретную строку кода. Если обе панели получили обновлённый этап после настоящей общей работы, это может быть правильным результатом. Нельзя копировать серверное значение в наблюдение B. Инструкция по запуску двух клиентов приведена отдельным связанным гайдом; эта история передаёт критерии принадлежности, а не повторяет список кнопок Studio.

Случай / вводОжидание контрактаA: фактB: фактS: факт
A листает при разных темах A/BМеняется только чтение A; S не меняется———
A закрывает при открытой панели BA закрыта; B продолжает чтение———
A и B почти подряд выбирают темыКаждый сохраняет свой выбор; порядок записан———
Команда выполнила действие нового этапаАктуальный общий этап виден; личная видимость не принуждается———
Старое обновление после нового личного выбораСопоставить этап/тему; не перезаписать новый выбор———
Респавн AПо выбранной политике A закрыта; B не затронут; этап актуален———
Язык A отличается от B, длинный текстПонятны «личное/командное», язык B и этап не меняются———
Открыть страницу проверки заранееЧтение не продвигает сборку и не устанавливает детали———

11. Ника закрывает схему, а не объявляет победу #

В воображаемом финале Ася листает свою тему, Даня продолжает читать о камере, а колесо не меняется от чтения. Ника прикрепляет к проектному заданию три строки состояния, правила адресата, поведение при смене этапа и пустую таблицу. Это образ желаемого результата рассказа, не проведённый игровой тест.

Реализация ещё впереди. Проверены официальные источники, тексты и схемы; Studio, публичный сервер и наши игры не запускались. После исправления разработчику предстоит подтвердить контракт двумя клиентами и нужными устройствами. Совместная цель остаётся общей, но каждый участник получает право читать в своём темпе. Самый полезный итог этой истории — точное объяснение, что должно принадлежать игроку, что команде и что подтверждается миром, вместо единственной расплывчатой переменной «помощь».

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

Roblox Creator Hub — PlayerGui
Roblox Creator Hub — StarterGui
Roblox Creator Hub — Client-server runtime
Roblox Creator Hub — Remote events and callbacks
Roblox Creator Hub — LayerCollector / ResetOnSpawn
Roblox Creator Hub — Localization
Roblox Creator Hub — Accessibility guidelines