Поделиться через


Руководство программиста по визуальному скрипту сетки

Перейдите в обзорную статью по визуальному скрипту

Ограничения

  • Только подмножество функциональных возможностей Unity предоставляется визуальным скриптам.
  • Переменные и свойства с не простыми типами (включая ссылки на объекты) не используются автоматически. Дополнительные сведения об этом см. в разделе "Общий доступ и сеть " ниже.

Hello World

Самый простой визуальный скрипт, который можно создать, — это просто открывающее окно сообщения:

Снимок экрана: график визуального скрипта примера Hello World

Вот как он выглядит в Сетке:

Окно браузера сетки с всплывющим окном, отображающим Hello World и кнопку

Снимок экрана редактора Unity с открытой сценой

Тестирование скриптов

Перед отправкой сцены в Сетку можно разрабатывать и тестировать визуальные скрипты даже с несколькими клиентами в режиме разбиения экрана, используя режим воспроизведения с эмуляцией сетки.

Визуальный скрипт диагностика в редакторе

При выборе GameObject с компьютером скрипта в иерархии преобразования Сетка отображает панель диагностики визуального скрипта сетки в нижней части панели инспектора:

Снимок экрана: панель диагностика визуального скрипта сетки

Панель диагностика предоставляет немедленные отзывы о любых предупреждениях или ошибках, которые могут препятствовать работе скриптов в Сетке.

Текущее ограничение: будущие версии панели диагностика также могут дать представление об использовании общих переменных и свойств визуального скрипта и отобразить дополнительные диагностика и предупреждения.

Отправка в сетку

Используйте средство отправки сетки для отправки сцен, содержащих визуальные скрипты. Чтобы открыть средство отправки, в меню "Набор средств сетки" выберите "Среды".

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

Общий доступ и сеть

Общее и локальное состояние скрипта

Сетка использует visual Scripting Unity, которая предназначена для работы без сети. Визуальные скрипты выполняются независимо от каждого клиента. Однако взаимодействие с сеткой пользователей совместно используется; все пользователи сталкиваются с одной общей сценой, которая выглядит одинаково на всех клиентах.

Результатом выполнения визуального скрипта является изменение состояния сцены.

По умолчанию Сетка автоматически реплицирует изменения сцены, выполненные визуальными скриптами на одном клиенте на всех остальных клиентах. Помимо всего общего в сцене, некоторое состояние остается независимым от каждого клиента (другими словами, локальным).

Локальные изменения временно имеют приоритет над изменениями, поступающими от клиентов. Пример. Если вы сохраняете анимацию объекта локально, локальная анимация не скомпрометирована изменениями, поступающими от других клиентов.

Существует некоторое автоматическое ограничение скорости обновления. Клиент не отправляет дополнительные обновления, пока он еще находится в полете; через сервер отправляется одно обновление. Это составляет около пяти до шести обновлений в секунду в практических ситуациях. Это означает, что плавное анимация, управляемое одним клиентом, не будет выглядеть гладко на других клиентах. Рекомендуется выполнять гладкую анимацию локально, в идеале не через визуальные скрипты, а через обычную систему анимации Unity.

Итоговая согласованность общего состояния гарантируется (даже если состояния клиентов могут временно отличаться).

Локальное состояние:

  • Естественное локальное состояние — звуки, пользовательский интерфейс, отрисовка.
  • Управляемое пользователем локальное состояние — вложенные сцены, помеченные компонентом локальной области скрипта.
  • Техническое локальное состояние — объекты, которые не являются частью иерархии сцен (например, материалы отрисовщика, ресурсы).

Общее состояние:

  • Ограничен переменными визуального скрипта и свойствами GameObjects и компонентами сцены, которые являются частью иерархии сцен.
  • Можно реплицировать только переменные и свойства простых типов: целые числа, числа с плавающей запятой, логические значения, строки, Color,3/Vector2/4 , Quaternionи .RectMatrix4x4

Любое изменение общего состояния отправляется по сети. Это увеличивает сетевой трафик и, если используется небрежно, может потреблять значительную пропускную способность.

Триггеры общего и локального скрипта

Все потоки визуальных скриптов начинаются в ответ на событие.

  • Если событие возникает на одном клиенте (например, пользователь нажимает кнопку), визуальный скрипт выполняется только на этом клиенте.
  • Если событие происходит на всех клиентах, визуальный скрипт выполняется на всех клиентах (например, событие таймера, изменение общего свойства, обновление общей переменной, аватар вводит триггер, тело физики касается коллидера).

При добавлении узла, чтобы определить, выбран ли объект, важно выбрать правильный. У вас есть два варианта: текст, взаимодействующий с сеткой: выбран локально, а также текст, взаимодействующий с сеткой: выбран. Предположим, например, вы хотите нажать кнопку, которую можно нажать, чтобы активировать телепортацию. Чтобы участники нажимали кнопку и перевозили только себя, используйте текст сетки, взаимодействующий с сеткой: выбран локальный узел.

Снимок экрана: элемент

Чтобы участник нажимал кнопку и телепортировать всех пользователей в интерфейсе, используйте текст сетки: Выбран узел. В каждом случае текст над узлом указывает на ожидаемое поведение:

Снимок экрана: узел

Если локальный скрипт задает общую переменную и второй скрипт прослушивает изменения этой переменной (с помощью триггера on State Changed ; см. ниже), второй сценарий будет выполняться на всех клиентах.

Сетка предлагает некоторые специальные узлы скриптов:

  • В интервале триггеры с регулярными интервалами синхронно на всех клиентах.
  • При изменении состояния триггеры при изменении входных данных (например, общие свойства, общие переменные, локальные).
  • Диалоговое окно "Показать" отображает диалоговое окно сообщения с пользовательским текстом, который может при необходимости предоставлять кнопки в качестве параметров ответа.

Сетка делает определенные компромиссы в пользу простоты:

  • Если несколько клиентов пытаются изменить одни и те же данные, последний клиент выигрывает (вместо использования модели обновления данных на основе транзакций).
  • Чтобы обеспечить согласованность данных, визуальные скрипты, выполняемые на всех клиентах, не должны считывать, а затем записывать общие свойства или переменные. Если это происходит, он вызывает ошибку среды выполнения и прерывает выполнение потока скрипта.

Рекомендации

Визуальные скрипты значительно медленнее собственного кода C#. Кроме того, сетка расширяет визуальные скрипты с сетевыми и другими функциями интеграции, и, казалось бы, низкозатратные действия визуального скрипта могут привести к сетевому трафику. Чтобы узнать, как получить лучшую производительность из визуальных скриптов, рекомендуется просмотреть следующие статьи:

Обзор рекомендаций по работе с визуальными скриптами
Рекомендации по работе с визуальными скриптами
Рекомендации по визуальному скрипту для сети
Рекомендации по отладке визуального скрипта

Безопасность

Сетка защищает пользователей от таких сценариев угроз:

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

Для этого Сетка запускает визуальные скрипты в песочнице (например, JavaScript в веб-браузере).

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

Во время выполнения сцены Сетка ограничивает доступ к определенным частям сцены:

  • Локально: запрет доступа к внутренним компонентам Сетки и другим конфиденциальным данным.
  • Удаленно: проверив, что автор сцены намерен изменить эту часть сцены. Это делается путем статического анализа визуальных скриптов на стороне получателя для их потенциальных операций записи сцены.

Примеры:

  • Вредоносный локальный визуальный скрипт хочет дать всем аватарам боблые головы. В этом случае она пытается сканировать всю сцену для GameObjects, представляющих головы аватара. Сетка автоматически фильтрует результаты сканирования, чтобы исключить систему аватара.
  • Вредоносный удаленный клиент хочет разорвать сцену, перевернуть все GameObjects вверх с ног на голову. Для этого он отправляет обновление свойства, которое задает вертикальный масштаб каждого GameObject в сцене. Однако поскольку визуальный скрипт на принимающем клиенте не предназначен для выполнения таких действий, локальный клиент игнорирует удаленные входные данные.

Интеграция сетки

Текущее ограничение. В этом разделе описывается предварительная версия функций, которые по-прежнему работают.

Как правило, интеграция с другими компонентами часто выполняется путем изменения и прослушивания изменений свойств компонента. Например:

  • Взаимодействуемые объекты: обратите внимание на свойства "Наведите указатель мыши" и "Выбрано".

  • Физические взаимодействия: наблюдение за телами в томе триггера или контакте с коллидером.

  • Аватары: чтение позиции аватара, поворот представления и пластина имен. (Пока недоступно.)

  • Состояние сеанса: вывод списка участников и чтение сведений о участниках. (Пока недоступно.)

  • Cloud Scripting: работает в тандеме с облачными скриптами, которые могут считывать и записывать переменные и свойства компонентов. (Пока недоступно.)

Некоторые компоненты предоставляют локальные действия:

  • Диспетчер звука
  • Временная шкала
  • Аниматоры
  • Отрисовка: чтение и запись материалов и свойств шейдера

Физика обрабатывается специально потому, что моделирование для любого заданного объекта физики всегда достоверно делается только одним клиентом: его владельцем. Чтобы сделать эту работу, настройка свойств физики активирует автоматическую передачу владения клиенту, который применяет изменение.

Следующие шаги