От прототипов до обучающих приложений, цифровых двойников, человеко-машинных интерфейсов и конфигураторов продукции — разнообразие приложений, которые вы можете разработать и запустить с помощью Unity Industry, практически безгранично.
Вам интересно, как ваша организация может использовать Unity, новому подписчику или более опытному разработчику Unity Industry , желающему повысить свою квалификацию? Независимо от того, открываете ли вы редактор впервые или являетесь опытным разработчиком, выпустившим множество проектов, всегда полезно знать, как наиболее эффективно использовать мощные возможности Unity, чтобы сделать вашу повседневную работу максимально продуктивной и приятной.
Повысьте производительность благодаря преобразованию CAD-моделей в 3D, адаптивному пользовательскому интерфейсу, архитектуре кода и многому другому.
В этом руководстве представлен обзор шаблона «Основы Unity Industry» , нового обучающего шаблона для разработчиков Unity Industry, встроенного в редактор.

Шаблон «Основы индустрии» доступен в Unity Hub для подписчиков Unity Industry или пользователей с 30-дневной пробной версией.
Основные выводы из основ отрасли
В серии обучающих материалов шаблон Unity Industry Fundamentals демонстрирует шаги по реализации важных функций в проектах Unity Industry , включая:
- Как использовать набор инструментов Asset Transformer Toolkit для преобразования и оптимизации CAD-моделей в 3D модели, готовые к использованию в реальных промышленных проектах.
- Как создать человеко HMI) и связать пользовательский интерфейс с данными в реальном времени.
- Как реализовать навигационную систему, которая поддерживает как автоматическую, так и ручную навигацию?
- Как настроить виртуальные камеры, чтобы пользователи всегда имели необходимый им обзор в симуляциях сложных и больших сред.
- Как спроектировать C# скрипты, обрабатывающие поведение робота, управление состоянием и потоком данных, используя ScriptableObjects для обеспечения независимости слоя данных.
Цель курса «Основы индустрии» — помочь вам сделать процесс разработки на Unity более эффективным, целенаправленным и продуктивным. Полученные знания применимы ко многим типам промышленных приложений, работающих в режиме реального времени с 3D моделированием, включая человеко-машинные интерфейсы (HMI), учебные симуляции, цифровые двойники и конфигураторы продукции.
Получите шаблон «Основы отрасли».
Прежде чем начать, вот шаги, которые помогут вам найти и скачать шаблон, если вы еще этого не сделали.
Если вы являетесь подписчиком Unity Industry :
1. Откройте Unity Hub и обновите Unity до версии 6.4.
2. Создайте новый проект, а затем найдите раздел «Основы отрасли» или перейдите в категорию «Обучение» и выберите там нужный шаблон.
Если у вас нет подписки на Unity Industry :
1. Перейдите на страницу бесплатной пробной версии и следуйте инструкциям, чтобы получить бесплатную пробную версию.
2. После запуска пробного периода выполните те же действия, что и для подписчиков из отраслевой группы.
Шаблон, который вы можете изучить и изменить.

Панель управления в автоматическом режиме с мини-картой склада.
Шаблон состоит из четырех обучающих материалов, которые проведут вас через рабочие процессы и этапы создания интерактивного 3D приложения для промышленности. После открытия проекта в редакторе Unity вы найдете готовую сцену под названием Warehouse в папке Scenes. На этом снимке представлен полностью оборудованный складской комплекс с множеством роботов, расположенных по всей площади и готовых к извлечению, размещению и перемещению товаров.
Демонстрационная сцена предназначена для быстрого прототипирования; просто перетащите свою 3D модель в сцену, прикрепите один компонент, и все автоматически подключится. Ваш объект появится в пользовательском интерфейсе и мгновенно начнет вести себя как автономный робот, перемещаясь в окружающей среде и реагируя на ввод и вывод данных из интерфейса.
Откройте окно «Игра», войдите в режим «Играть» и начните взаимодействовать с имитированным складом через пользовательский интерфейс, который позволяет управлять каждым из роботов и отслеживать их состояние в режиме реального времени, отображая такие данные, как уровень заряда батареи и уровень здоровья робота. Пользовательский интерфейс отображает миниатюрную карту, показывающую текущее местоположение роботов. Вы также можете вручную изменить некоторые настройки робота, переключившись из автоматического режима в ручной, и управлять движением каждого робота с помощью клавиш WASD. Отрегулируйте скорость каждого робота и используйте ползунок для удлинения или укорачивания его манипулятора.
Рассмотрим основные особенности этой симуляции складского хозяйства.
Смотреть: С чего начать

Набор инструментов для преобразования активов: От САПР до оптимизированных 3D моделей

Одна из 3D моделей робота из основной сцены-примера склада в шаблоне Industry Fundamentals.
Программное обеспечение САПР отдает приоритет математической точности и детализации на основе геометрии в своих моделях, в то время как приложения реального времени должны балансировать визуальное качество с практическими соображениями производительности, такими как управляемое количество полигонов, эффективная выборка текстур и иерархии, которые можно отсеивать и объединять в пакеты.
Unity Asset Transformer Toolkit, входящий в состав лицензии Unity Industry , служит связующим звеном между данными САПР вашей организации и вашими проектами Unity . Он обеспечивает бесшовную интеграцию ваших существующих данных с Unity посредством автоматизированных рабочих процессов подготовки данных, экономя ваше время и усилия. Вы можете импортировать любые 3D файлы или файлы САПР, что исключает необходимость многократного импорта или создания новых моделей, обеспечивая полный контроль над размером и качеством сетки, что оптимизирует ваши данные для повышения производительности на целевых устройствах.
В примере «Основы индустрии» вы увидите, как импортировать новый объект робота в Unity. Модель робота, созданная на основе исходного CAD-файла, представляет собой громоздкий объект с грубоватым внешним видом, не подходящим для качественной презентации. Инструментарий Asset Transformer Toolkit используется для преобразования и оптимизации моделей для использования в интерактивных 3D приложениях, предназначенных для таких платформ, как настольные компьютеры и веб-приложения.
Чтобы узнать, как установить и открыть Asset Transformer Toolkit в редакторе, посмотрите видео в конце этого раздела.
Давайте начнём с рассмотрения панели инструментов.
Изучите панель инструментов Asset Transformer Toolkit.

Набор инструментов для Asset Transformer Toolkit
Вот краткое описание действий, доступных на панели инструментов:
- Модель импорта : Нажмите сюда, чтобы начать процесс импорта ваших CAD-данных в Unity.
- Создание сетки и оптимизация : Используйте их для упрощения геометрии и удаления любых ненужных деталей, например, отверстий или внутренних граней.
- Пересетка : Эта функция позволяет полностью перестроить геометрию для сценариев использования с высокой производительностью.
- Иерархия : Используйте их для очистки любых неаккуратных структур объектов, перенесенных из сборок САПР.
- Трансформация : Быстро исправьте точки опоры и проблемы с выравниванием в модели.
- УФ-излучение и коллайдеры : Используйте эти настройки для генерации данных, необходимых Unity для текстурирования и взаимодействия на основе физических принципов.
При импорте сохраняйте настройки и изменения модели.
В этом руководстве процесс импорта не рассматривается подробно; встроенное в редактор руководство и видеоролик в конце этого раздела помогут вам пройти все важные этапы.
Важно отметить, что при выборе файла для импорта в папке Assets в окне Project создается объект ScriptableObject с тем же именем, что и ваша модель.
Это не сама модель; преимущество здесь в том, что ScriptableObject содержит набор настроек, которые можно использовать для импорта модели, что позволяет сохранить её настройки и изменения. Если в CAD-модель внесены изменения и требуется ее повторный импорт, вам не придется настраивать все с нуля. Все эти настройки будут сохранены в объекте ScriptableObject.

При выборе файла для импорта в папке Assets в окне Project создается объект ScriptableObject с тем же именем, что и ваша модель. Этот ScriptableObject содержит набор настроек, которые можно использовать для импорта модели, позволяя сохранить её параметры и изменения.
Когда вы выберете объект ScriptableObject и откроется окно инспектора, вверху вы увидите поле « Режим импорта» , в котором можно установить значение «Префаб» или «Сцена» :
- Сборный дом : Для отдельных объектов
- Сцена : Для очень крупных и детализированных объектов, таких как высотное здание, состоящее из тысяч или даже миллионов элементов, это особенно актуально для моделей.
В разделе «Инспектор» также есть три вкладки: Модель, механизм правил и уровни детализации (LOD):
- Модель : Здесь вы можете задать параметры импорта модели. На этом этапе исходная модель преобразуется в оптимизированный 3D объект.
- Механизм правил : Создайте набор правил, который позволит автоматизировать подготовку данных для вашей модели непосредственно на этапе загрузки данных. Наборы правил особенно полезны, когда вам необходимо повторно импортировать исходную модель по мере ее развития. В следующем разделе вы найдете вводную информацию о механизме правил и наборах правил.
- Уровни детализации (LOD) : Добавьте правила LOD для генерации уровней детализации; их можно сгенерировать непосредственно в процессе импорта модели на заключительном этапе.
После того, как все настройки будут готовы, нажмите «Импорт» , и префаб модели будет добавлен в папку Assets > 3DModels в окне Project. Вы можете перетащить модель в окно сцены, что также добавит её в иерархию.
Смотреть: Установите Unity Asset Transformer Toolkit.

Оптимизируйте 3D модели.
Набор инструментов Asset Transformer Toolkit предоставляет средства для очистки импортированных моделей, подготавливая их для работы в режиме реального времени, сохраняя при этом визуальную точность и все необходимые метаданные. Это можно сделать автоматически в процессе импорта с помощью упомянутых выше наборов правил или вручную после импорта в качестве отдельных действий с помощью инструментов на панели инструментов Asset Transformer.
Навести порядок в иерархии
Если вы выполните шаги по импорту нового робота в шаблоне, вы увидите, что его структура в иерархии чрезмерно сложна. Щёлкните по одному из основных элементов, например, по объекту GameObject с именем body_body_main_01-1 , и вы увидите в его инспекторе, что все метаданные, связанные с этой частью, добавлены в компонент. Однако его дочерний объект содержит фильтр сетки, который отображает фактическую геометрию, а также информацию о материале, в данный момент назначенном ему.

Добавлен дочерний GameObject объекта body_body_main_01-1 с компонентом Mesh Filter.
Эффективнее хранить все эти данные в одном объекте вместе с метаданными, а не раздельно.
Для решения этой проблемы воспользуйтесь инструментом «Слияние» . По умолчанию инструмент «Объединение» настроен на «Объединить все» . Вам не следует применять это, поскольку это объединит все в один префаб. Вы хотите сохранить конечный уровень всех объектов. Если вы выберете в выпадающем списке параметр «Конечный уровень» , это укажет инструменту «Слияние» пройтись по списку в иерархии, найти последний объект в каждом дереве, а затем объединить его с объектом, расположенным непосредственно над ним.

Инструмент «Слияние» в наборе инструментов Asset Transformer Toolkit.
Дополнительные шаги смотрите в этом видео .
Децимация
Для уменьшения веса модели можно удалить лишние геометрические элементы. В инструменте Asset Transformer Toolkit опция «Статистика» отображает статистику для выбранной модели или её части. CAD-модель, которую вы импортируете в этом обучающем шаблоне, содержит 510 игровых объектов и более 600 000 треугольников до оптимизации, что делает её очень плотной моделью. Посмотрите это видео , чтобы увидеть, как удаляются отверстия в новой модели робота.
Проверьте плотность модели, активировав меню «Отладка» и изменив режим просмотра на «Соотношение вершин» . Красным цветом обозначены объекты, которые расположены чрезвычайно плотно по отношению ко всему остальному в сцене. Это хороший показатель того, где можно использовать децимацию для оптимизации модели.

Масштабное уничтожение
Процесс уменьшения размерности может быть утомительным, если в вашей модели, как в данном случае, много геометрических объектов. Таким образом, у вас также есть возможность проводить децимацию в больших масштабах.
Установив параметр «Критерий» в инструменте уменьшения качества на «Качество» и выбрав верхний уровень CAD-модели в иерархии, вы можете выбрать целевой уровень качества, а затем запустить инструмент для применения уменьшения качества ко всему объекту.
Применение этого действия к модели робота с низким качеством привело к уменьшению количества треугольников на 65%, до менее чем 200 000, что оптимизировало модель для работы на мобильных устройствах.
Отрегулируйте нормали
Одна из проблем, часто возникающих при подобной масштабной оптимизации, заключается в том, что она может нарушить плавность модели. После уничтожения растительности ее внешний вид и восприятие при освещении могут измениться: внезапно появятся артефакты или, возможно, более четкие углы, чем раньше. Это можно исправить, скорректировав нормали вашей модели. Набор инструментов Asset Transformer Toolkit предоставляет ряд средств, позволяющих корректировать или изменять нормали вашей модели.
Смотреть: Оптимизировать CAD-модель

Используйте наборы правил, чтобы сэкономить время при повторном импорте ресурсов.
В процессе проектирования CAD-модели часто проходят множество итераций, и необходимость выполнять все вышеперечисленные действия каждый раз при повторном импорте модели после внесения изменений в CAD-приложение может стать неэффективной.
В зависимости от того, на каком этапе процесса проектирования вы находитесь и сколько итераций у вас есть, это может стать утомительным процессом.
Именно здесь своды правил обеспечивают существенное преимущество. Наборы правил, которые вы настраиваете в механизме правил Asset Transformer Toolkit, представляют собой последовательность инструкций, называемых действиями , которым Unity следует во время импорта или которые вы можете применять вручную, автоматизируя многие действия, которые обычно требуются для работы с CAD-моделью.
Создайте набор правил
Набор правил — это, по сути, рецепт, который указывает инструменту Asset Transformer Toolkit найти конкретный объект или объекты на основе заданных критериев, а затем применить указанное вами действие. Например, если вы видите это название материала в файле САПР, сопоставьте его с этим материалом Unity . Когда вы находите детали, названные по этому шаблону, сгруппируйте их вместе. Когда количество полигонов превысит этот порог, сгенерируйте уровни LOD ). Эти правила позволяют автоматизировать то, что в противном случае было бы утомительной ручной работой.
Шаблон «Основы отрасли» включает в себя несколько предварительно созданных наборов правил в папке «Наборы правил». Их стоит изучать не только из-за того, что они делают, но и потому, как они могут заставить вас задуматься о приоритезации оптимизации. В шаблоне один набор правил обрабатывает модель робота, которая требует высокой детализации суставов манипулятора, на которых пользователи будут сосредотачивать свое внимание, но может обойтись и меньшей детализацией основания, где это менее заметно. Другой вариант отвечает за складское помещение, где геометрия проще, но её много, поэтому агрессивная генерация LOD имеет смысл.
Существует набор правил, который автоматически применяет операции по удалению лишних элементов и очистке иерархии во время импорта. Этот шаблон также предоставляет еще один набор правил, который автоматически встраивает затенение окружающей среды в данные вершин, чтобы повысить визуальную точность модели. Наконец, существуют наборы правил, которые покажут вам, как можно заменять материалы и объекты в процессе импорта.
Для создания набора правил:
1. В папке проекта щелкните правой кнопкой мыши и выберите Создать > Преобразователь ресурсов > Набор правил .
2. Задайте имя для вашего набора правил.
3. Редактировать набор правил можно на специальной вкладке (она автоматически открывается рядом с инспектором).
4. Добавьте в последовательность элементы, например, фильтры, действия и дополнительные правила. Правила применяются последовательно, сверху вниз.
Если вы посмотрите на изображение ниже, справа вы увидите открытый набор правил. По умолчанию первое действие установлено на «Получить» . Это добавит объект в сцену, и все последующие действия будут применяться к выбранному объекту.

Набор правил (справа) для одной из моделей робота.
Действие Get выберет всю модель робота, и все последующие действия будут применяться ко всей модели робота, поэтому вам нужен способ найти конкретные элементы внутри нее, к которым вы хотите применить последующие действия. Для этого добавьте к этому правилу действие «Фильтрация» и установите для него параметр «Фильтрация по метаданным» , чтобы использовать метаданные, импортированные вместе с CAD-моделью.
Эффективный реимпорт активов
Подобные наборы правил можно запускать вручную следующим образом:
- Выбор объекта или объектов, которые вы хотите применить.
- Выберите набор правил и нажмите кнопку «Выполнить» .
Однако вы также можете настроить автоматическое применение наборов правил в процессе импорта. Для этого выберите созданный в папке Assets > 3DModel объект ScriptableObject с настройками импорта, и в его инспекторе вы увидите, что кнопка «Импорт» теперь называется «Повторный импорт» .
Выберите кнопку «Механизм правил» , а затем укажите набор правил , который вы хотите запустить в процессе импорта.
Если после настройки вы выберете кнопку «Повторный импорт» , то при каждом повторном импорте CAD-модели к ней будет применяться указанное правило. Вы также можете вкладывать несколько правил и наборов правил внутрь правила импорта, чтобы гарантировать их применение в процессе импорта.
Смотреть: Наборы правил

Смотреть: Расширенные наборы правил

Добавить нового робота в шаблон
После того, как вы изучили способы импорта, оптимизации и автоматизации всего этого процесса, настало время превратить эти данные САПР в функционального, управляемого данными робота в рамках моделирования.
Шаблон предоставляет все необходимые компоненты для выполнения всех этапов процесса, включая скрипты на C# для связи вашей модели с пользовательским интерфейсом и настройки возможности переключения между различными вариантами робота, а также тестирования его поведения в реальном времени.
Рассмотрим один из рабочих процессов, описанных в шаблоне.
На сцене на складе находится несколько роботов, и вам нужно настроить каждую новую модель робота так, чтобы она обладала теми же функциями, что и остальные. Для этого вам потребуется повторно импортировать модель — это эффективный и предсказуемый процесс, поскольку теперь у вас есть наборы правил. Вот шаги:
1. В разделе «Проект > 3DModels» вы найдете импортируемый ресурс ScriptableObject, содержащий все ранее установленные настройки. Откройте инспектор и на вкладке «Механизм правил» убедитесь, что у вас настроены правила импорта.

Вкладка «Механизм правил» (справа) с ранее заданными наборами правил для этой модели.
2. На вкладке «Модель» убедитесь, что выбран параметр «Импорт метаданных» . Это крайне важно для корректной работы фильтров и всех наборов правил .
3. После повторного импорта модели вы найдете ее в Assets > 3DModels , и оттуда сможете перетащить ее в окно сцены.
4. В иерархии вы заметите, что существующие роботы на сцене вложены под родительский объект Robots GameObject. Разверните этот раздел, выберите один из дочерних объектов роботов, и вы увидите, что к нему прикреплен скрипт робота с объектом Robot Data ScriptableObject, содержащим всю информацию о каждом роботе.

Объект Robot Data SO ScriptableObject, содержащий всю информацию о каждом роботе.
5. Если вы заглянете в папку Assets > Warehouse > RobotData , вы увидите, что у каждого из четырех роботов, находящихся в данный момент на сцене, есть свой собственный объект RobotDataSO ScriptableObject. Вам потребуется прикрепить тот же самый ScriptableObject к новому роботу.
6. Для этого щелкните правой кнопкой мыши в папке Assets и выберите Create > Industry Template > Robot Data . Дайте ему имя, соответствующее номеру модели робота.
7. Щелкните по добавленному роботу, чтобы открыть его инспектор, затем нажмите «Добавить компонент» , найдите в раскрывающемся списке скрипт робота под названием Robot.cs и добавьте его.
8. Перетащите новый объект ScriptableObject робота в поле Data нового скрипта, и он автоматически добавит все остальные скрипты и компоненты, необходимые для того, чтобы этот робот вел себя так же, как и остальные.
Следуйте инструкциям в шаблоне, чтобы увидеть каждый шаг процесса преобразования ваших CAD-данных в приложение реального времени для создания цифрового двойника и настройки элементов управления для мониторинга роботов через пользовательский интерфейс.
Смотреть: Пользовательский интерфейс и интерактивность

Создайте панель мониторинга с помощью UI Toolkit.
В Unity есть две системы для создания пользовательских интерфейсов (UI): Unity UI (uGUI) и набор инструментов пользовательского интерфейса. В Industry Fundamentals используется UI Toolkit.
UI Toolkit разработан для обеспечения оптимальной производительности и адаптивности к различным платформам и вдохновлен стандартными веб-технологиями. Если у вас есть опыт разработки веб-страниц или приложений, основные концепции UI Toolkit должны быть вам знакомы. UI Toolkit предоставляет мощные инструменты и рабочие процессы, которые позволяют использовать ваши существующие знания языков разметки и таблиц стилей.
Набор инструментов пользовательского интерфейса: Вдохновлено стандартными веб-технологиями.
С помощью UI Toolkit вы можете разделить структуру, стиль и поведение вашего пользовательского интерфейса, аналогично тому, как это делается с HTML, CSS и JavaScript.
UXML — это язык разметки, созданный по образцу HTML и XML, который определяет структуру пользовательского интерфейса и позволяет создавать многократно используемые шаблоны. Хотя пользовательский интерфейс можно создавать на C#, использование UXML позволяет работать над макетами интерфейса непосредственно в окне UI Builder в Unity, что обеспечивает визуальный интерфейс для разработки.
USS — это таблицы стилей, которые применяют визуальные стили и правила компоновки к пользовательскому интерфейсу. Подобно CSS, USS поддерживает подмножество стандартных свойств CSS. Хотя стили можно определять и в C#, рекомендуется использовать USS, поскольку это гарантирует повторное использование стилей во всем пользовательском интерфейсе, создавая единый внешний вид и упрощая управление ими.

Создание пользовательского интерфейса панели управления в UI Builder
UI Toolkit поддерживает систему привязки данных , которая позволяет связывать свойства элементов пользовательского интерфейса с источниками данных. Это означает, что при изменении данных пользовательский интерфейс обновляется автоматически, и наоборот.
В этом разделе мы рассмотрим дизайн панели мониторинга и принцип ее работы с привязкой данных.
Настройка панели управления в разделе «Основы отрасли».

Интерфейс панели управления с отображением списка роботов слева и подробной информацией и элементами управления справа.
Панель управления состоит из отдельных разделов: вверху — общая информация, слева — список роботов, а справа — подробная информация и элементы управления. Файл USS панели управления определяет полную систему дизайна, включая переменные цвета и отступов, а также классы для повторяющихся элементов, таких как кнопки и индикаторы состояния.
Каждый робот имеет три состояния: стандартное, предупреждающее или критическое, которые необходимо визуально отображать. Система USS определяет три класса – стандартный статус, предупреждающий статус и критический статус, каждый из которых имеет свой собственный цвет фона. Скрипт AC# добавляет и удаляет эти классы в зависимости от состояния робота. Состояние здоровья робота ухудшается со временем, когда заряд батареи падает ниже критического порога; чем ниже заряд батареи, тем быстрее ухудшается его состояние. Если состояние робота или заряд батареи падает до тревожного или критического уровня, соответствующие классы состояния обновляются, предоставляя операторам мгновенный визуальный сигнал на панели управления.

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

Привязка данных в UI Toolkit
Вместо того чтобы писать код, который вручную обновляет каждую метку и индикатор выполнения, вы объявляете привязки в UXML, которые связывают свойства элементов пользовательского интерфейса со свойствами источника данных. При изменении данных пользовательский интерфейс автоматически обновляется.
Этот шаблон напрямую связывает элементы пользовательского интерфейса с объектом RobotDataSO ScriptableObject каждого робота. Это позволяет отслеживать уровень заряда батареи, её состояние, температуру и скорость. В UXML-документе объявляются привязки следующего вида: "текст этой метки должен быть свойством Battery этого источника данных, отформатированным в процентах".
Эта привязка является двунаправленной; например, ползунок диапазона движения руки не просто отображает значение, но и устанавливает его. Когда пользователь перетаскивает ползунок, связанное свойство обновляется, что приводит к перемещению манипулятора робота. Пользовательский интерфейс становится не просто дисплеем, а панелью управления.
Конвертеры являются неотъемлемой частью процесса привязки данных, устраняя разрыв между типами данных и форматами отображения. В источнике данных значение батареи отображается в виде float от 0 до 100, но вам нужно отображать "75%", а не "75.0". Шаблон включает в себя ресурсы конвертера, которые регистрируют функции форматирования. Вы ссылаетесь на эти преобразователи в своих привязках, и они преобразуют значения на пути от данных к отображению.
мини-карта

Мини-карта на панели управления; фоном мини-карты служит текстура рендеринга с камеры, расположенной сверху.
Мини-карта демонстрирует пользовательскую отрисовку в UI Toolkit. Фоном для мини-карты служит текстура рендеринга, полученная с помощью камеры, расположенной сверху. Точки, отображающие положение робота, представляют собой элементы пользовательского интерфейса, расположенные на основе мировых координат, преобразованных в пространство пользовательского интерфейса. В каждом кадре код считывает мировые координаты каждого робота, вычисляет, куда они отображаются на мини-карте, и обновляет положение точки — простой, но эффективный метод отображения пространственных взаимосвязей.
Смотреть: Подробный анализ пользовательского интерфейса

Настройка автоматической и ручной навигации

Предварительно заготовленная навигационная сетка на складе
Как роботы узнают, куда им можно двигаться? Склад полон препятствий – стеллажей, поддонов, других роботов – и каждому роботу необходимо найти обходные пути. Это задача системы навигации на основе искусственного интеллекта Unity.
Если открыть сцену склада в редакторе, перейти на верхнюю панель инструментов и нажать кнопку «Переключить видимость» , то NavMesh появится в сцене в виде синего наложения. NavMesh — это сетка, которую Unity генерирует для аппроксимации доступных для ходьбы областей и препятствий в окружающей среде с целью поиска пути и навигации под управлением ИИ.
Более производительный вариант — это встроить NavMesh в сцену, а не создавать его во время выполнения. В процессе запекания система навигации анализирует вашу сцену и, основываясь на заданных вами параметрах, находит все области, где могут перемещаться агенты (в данном случае, роботы).

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

Компонент Nav Mesh Agent
Хотя большая часть логики перемещения управляется системой NavMesh, в Assets > Warehouse > Scripts также есть скрипт RandomAgentMovement , который отвечает за установку целевых точек назначения. В данной сцене определены конкретные, заранее заданные пункты назначения. Во время выполнения этот скрипт назначит роботу одно из этих мест назначения, а затем будет постоянно проверять, как далеко робот находится от него. Если робот достигает пункта назначения, он останавливается там на несколько секунд. Затем скрипт назначает новый целевой пункт назначения; благодаря NavMesh робот автоматически определяет и следует по оптимальному маршруту к месту назначения.

Скрипт RandomAgentMovement
Сложности могут возникнуть в приложениях, где любое количество объектов может управляться вручную наряду с автономными агентами, такими как роботы. Роботы должны распознавать движущиеся объекты, такие как открывающаяся и закрывающаяся дверь или движущийся ящик. Для того чтобы роботы могли отслеживать эти движения, эта функция должна быть заложена в конфигурацию NavMesh.
Для управления этим процессом в Industry Fundamentals в систему NavMesh добавляется компонент NavMeshObstacle . Это указывает системе NavMesh на необходимость создания заданной области вокруг робота. По мере движения робота, окружающая среда также перемещается вместе с ним, предотвращая прохождение роботов сквозь такие элементы, как полки, или столкновения с другими роботами.
При переключении в ручной режим управления роботами компонент NavMeshObstacle назначается и активируется, а компонент NavMeshAgent отключается.

Роботы склада перемещаются по навигационной сетке (NavMesh).

Переключение между режимами происходит через ScriptableObject, содержащий данные робота. Свойство OperationMode принимает значение Auto или Manual, и различные компоненты проверяют это значение, чтобы решить, что делать. В пользовательском интерфейсе есть кнопки для переключения режимов, которые обновляют данные, заставляя компоненты реагировать. Такой подход, основанный на данных, означает, что добавление новых режимов или изменение поведения режимов не требует работы с множеством скриптов.
Смотреть: Пошаговое руководство по NavMesh

Система виртуальных камер с использованием Cinemachine
В шаблоне Industry Fundamentals используется система виртуальных камер Cinemachine (которую можно скачать в виде пакета) тремя способами:
- Для создания камеры, которая следует за активным роботом, и для обеспечения плавного перехода между различными роботами при выборе разных карточек.
- Чтобы камера оставалась зафиксированной на роботе во время его перемещения по складу, и чтобы вы не проходили сквозь различные объекты, необходимо следить за тем, чтобы камера не задевала их.
- Чтобы вывести 3D изображение непосредственно в пользовательский интерфейс панели управления.
Основная концепция проста: В вашей сцене есть один игровой объект Unity Camera , управляемый компонентом Cinemachine Brain , и несколько виртуальных камер, определяющих потенциальные ракурсы съемки. Компонент «Мозг» переключается между виртуальными камерами в зависимости от их приоритетов. Только виртуальная камера с наивысшим приоритетом управляет тем, что вы видите.
Камеры в разделе «Основы индустрии»
Если вы откроете сцену на складе, то увидите несколько разбросанных роботов, которые послужат вам основой для работы перед добавлением собственного робота. Вам необходимо убедиться, что при добавлении собственного робота на сцену ему также назначена виртуальная камера.
В иерархии найдите объект Cinemachine Shots GameObject, который предоставляет стандартный ракурс съемки.

Виртуальные камеры Cinemachine на складе
После нажатия кнопки «Воспроизвести» у каждого робота появится собственная камера слежения, добавленная с помощью скрипта во время выполнения. Этот скрипт получает список количества роботов в сцене, включая добавленных новых, и для каждого из них создает компонент Cinemachine Camera, а также компонент Third-Person Follow . Компонент «Слежение от третьего лица» позволяет создать камеру, которая располагается позади движущегося объекта и будет следовать за тем объектом, который назначен в качестве цели слежения.

Игровой объект RobotFollowCam с подключенными компонентами Cinemachine , включая
Для пользовательского интерфейса панели управления Cinemachine реализована двумя различными способами: Одна 3D камера отображает текущую визуализированную камеру, а другая — мини-карту. Мини-карта использует текстуру рендеринга с отдельной камерой, которая отображает вид сверху, а затем выводит этот вид на текстуру рендеринга. 3D камера не использует текстуру, а отображает изображение с реальной камеры запущенного приложения, однако через прямоугольный вырез в пользовательском интерфейсе.
Cinemachine позволяет создавать гибкие системы камер, где «мозг» Cinemachine будет обрабатывать всю логику переключения между различными камерами, создавая виртуальные камеры, которые выступают в качестве позиционных фиксаторов для основной камеры. Наконец, он предоставляет дополнительные компоненты, такие как камера слежения от третьего лица, которая берет на себя большую часть работы, обычно выполняемой при создании приложений реального времени.
Смотреть: Видеообзор Cinemachine

Оптимизируйте освещение с помощью универсального конвейера рендеринга.
Универсальный конвейер рендеринга (URP) — это решение Unity для масштабируемого рендеринга. Он разработан для создания высококачественного изображения и эффективной работы на любых устройствах, от высокопроизводительных настольных компьютеров до мобильных устройств и веб-браузеров. Для промышленного применения такая гибкость имеет решающее значение. Одно и то же приложение может потребоваться для работы в качестве киоска на выставке, в качестве веб-приложения для удаленных клиентов и в качестве приложения для планшетов для выездных технических специалистов.
Настройки URP шаблона находятся в папке «Настройки». Ресурс Render Pipeline управляет глобальными настройками рендеринга. Понимание того, для чего нужны эти настройки, поможет вам вносить разумные корректировки в ваши собственные проекты.

Один из роботов из сцены на складе в шаблоне «Основы индустрии».
Рендеринг Forward+
В шаблоне используется технология рендеринга Forward+ , которая эффективно обрабатывает несколько источников света, сохраняя при этом совместимость с широким спектром оборудования. Технология Forward+ работает за счет кластеризации источников света в экранном пространстве, поэтому добавление большего количества источников света в сцену не оказывает негативного влияния на производительность, как это было бы при традиционном прямом рендеринге.
Сглаживание устраняет неровности, возникающие в местах соприкосновения геометрических объектов с фоном. В этом шаблоне используется MSAA с коэффициентом 4x для высокого уровня качества, 2x для среднего и без сглаживания для низкого уровня. MSAA работает быстро на современных видеокартах, но использует больше памяти, поэтому многоуровневый подход позволяет масштабировать производительность в зависимости от целевого устройства.
Используйте каскады теней
Тени улучшают визуальное качество, но могут быть ресурсоемкими с точки зрения вычислительных ресурсов. В шаблоне используются каскады теней, которые обеспечивают тени высокого разрешения вблизи камеры и тени более низкого разрешения на расстоянии.
Сочетание ламп с термической обработкой и световых зондов.
В данном проекте освещение выполнено с использованием гибридного подхода. В статических геометрических объектах, таких как пол, стены и стеллажи складского помещения, используется запеченное освещение. Динамические объекты, такие как роботы, используют световые датчики и световые зонды, работающие в режиме реального времени.
Зонды освещения — это невидимые точки в вашей сцене, которые измеряют интенсивность запеченного освещения. Когда динамический объект приближается к световому зонду, он улавливает окружающее освещение из этого места. В конструкции предусмотрены световые датчики, размещенные по всему складу, чтобы роботы ощущались интегрированными в окружающую среду, а не просто стояли на ней.
Система LightRig добавляет еще один уровень защиты. Каждый робот оснащен набором прожекторов, которые активируются при выборе именно этого робота. Это позволяет визуально сфокусироваться на активном роботе без необходимости дорогостоящего глобального освещения. Данная реализация представляет собой простой компонент, который включает и выключает освещение в зависимости от состояния выбора.

Каждый робот оснащен набором прожекторов, которые активируются при выборе именно этого робота.
Окружающее освещение создается с помощью HDRI-изображения, которое обеспечивает мягкий рассеянный свет, заполняющий тени и создающий отражающую поверхность на металлических поверхностях. Шаблон включает в себя несколько вариантов HDRI, чтобы вы могли увидеть, как различные условия освещения влияют на настроение сцены.
Скрипты на C#
Давайте рассмотрим скрипты и объекты ScriptableObjects, используемые в шаблоне.
Как описано в предыдущих разделах, все детали работы робота, такие как его движения, причины поломок и способы передачи информации в пользовательский интерфейс, содержатся в объекте ScriptableObject. Если вы перейдете в представление «Проект», а затем в «Ресурсы» > «Склад» > «Данные робота» , вы найдете ScriptableObject каждого робота. Откройте инспектор одного из таких роботов, и вы найдете подробную информацию о нем, такую как его название, текущий режим работы, текущее состояние, активная модификация, состояние батареи, рабочая температура, скорость и так далее. Объект ScriptableObject сам по себе ничего не делает; в данном контексте это просто контейнер, содержащий все данные, специфичные для данной модели.
Также имеется объект ScriptableObject, содержащий данные по всему парку роботов, включая средний уровень заряда батарей у всех роботов, количество движущихся роботов и количество роботов в каждой категории состояния. Вся эта информация передается в пользовательский интерфейс панели управления.
Скрипты используются для связи всех этих данных с самими роботами и наделения их функциональностью, например, движением или переключением между различными вариантами. В шаблоне вы найдете их в папке «Скрипты хранилища». Существуют скрипты для управления роботами и для связи всех объектов, доступных по скрипту, с реальной моделью. Выберите один из этих вариантов, и вы увидите скрипты Robot, Simulator и Variant.
RobotManager
Скрипт RobotManager активирует все данные при запуске. Этот скрипт является синглтоном, поэтому во всей сцене он встречается только один раз. При запуске приложение обнаружит всех роботов на сцене и сохранит их в список. Этот скрипт содержит два важных события: События ActiveRobotChanged срабатывают каждый раз, когда пользователь выбирает другого робота, и RobotListChanged срабатывают при добавлении или удалении робота из списка.
Этот скрипт является основой коммуникации всего проекта. Просматривая другие скрипты, вы увидите, что многие из них подписываются на эти события.

Скрипт RobotManager
Скрипт OverallDataUpdater запускается в каждом кадре и дает указание объекту OverallData ScriptableObject пройтись по данным каждого робота, подсчитать значения и обновить сводку по флоту. Таким образом, хотя общие данные содержат всю необходимую информацию, именно этот скрипт обеспечивает их корректную работу.

Скрипт OverallDataUpdater
Каждый робот использует NavMesh, чтобы понимать, куда ему можно, а куда нельзя двигаться. Но им также нужно куда-то двигаться, и, как объяснялось ранее, каждый робот может работать в автоматическом или ручном режиме. Для управления всем этим в шаблоне есть скрипт RobotEditor, доступный через Assets > Warehouse > Scripts > Editor. Этот скрипт автоматически добавляет все необходимое в префаб робота при назначении ему объекта ScriptableObject.
Скрипт RandomAgentMovement активен, когда роботы находятся в автоматическом режиме. Этот скрипт содержит массив целей. При запуске скрипта он случайным образом выбирает один из вариантов и направляет агента к нему. В каждом кадре проверяется, прибыл ли агент. Он отслеживает оставшееся расстояние, проверяет, продолжается ли расчет траектории, и остановился ли агент. Как только все три условия будут выполнены, робот выжидает случайное количество времени (от одной до трех секунд), затем выбирает новую цель и начинает весь процесс заново.
Как вы увидите в симуляции, роботы перемещаются по складу, и в каждом пункте назначения они на мгновение останавливаются, как будто что-то там делают, а затем поворачиваются и двигаются к следующей цели.
И, как вы, возможно, помните, при переключении в ручной режим Robotscript отключает компонент NavMesh Agent и активирует компонент NavMesh Obstacle с включенной функцией построения траектории. Робот с активированным этим компонентом переместится над навигационной сеткой и вырежет в ней отверстие вокруг неё. Когда другой робот в автоматическом режиме приблизится к нему, он не сможет проехать сквозь него, так как в навигационной сетке есть проход; он найдет новый путь в обход. При переключении обратно в автоматический режим компонент Nav Mesh Obstacle будет удален, а NavMeshAgent снова включен.
Скрипт RobotDataSimulator имитирует то, что могло бы произойти в реальной среде, например, разрядку батарей во время движения роботов, поломки оборудования и т.д. Этот скрипт также вносит изменения в объект ScriptableObject, который, в свою очередь, сообщает панели управления пользовательского интерфейса, что следует отображать.
Наконец, для каждой модели в скрипте Variant можно указать различные варианты и их поведение. При нажатии кнопки, переключающей между вариантами, этот скрипт будет включать и отключать соответствующие из них.
Смотреть: Архитектура C# и ScriptableObjects

Оптимизация производительности
Промышленные приложения часто должны хорошо работать на различных аппаратных устройствах, что требует тщательного продумывания способов оптимизации пользовательского опыта. Вот некоторые из стратегий, использованных в этом шаблоне.
- Обновление управления частотой : Не все события должны происходить в каждом кадре. Симулятор телеметрии обновляется с каждым кадром, поскольку пользователи ожидают мгновенной обратной связи при ручном управлении автомобилем. Сводные статистические данные обновляются раз в секунду, поскольку средние показатели по всему флоту существенно не меняются быстрее. Шаблон позволяет настраивать этот параметр, регулируя баланс между быстродействием и использованием процессора.
- Кэширование запросов пользовательского интерфейса : Метод Q в UI Toolkit находит элементы по имени или классу, что удобно, но имеет свою цену. Вызов функции Q каждый кадр для поиска одного и того же элемента приводит к нерациональному расходованию ресурсов. Шаблон выполняет запрос один раз при запуске, сохраняет ссылки в полях и в дальнейшем использует эти кэшированные ссылки.
- Оптимизация запросов NavMesh : Полное вычисление пути от точки А до точки В — дорогостоящий процесс, тогда как проверка одной точки обходится дешевле. В ручном контроллере используется NavMesh.SamplePosition вместо CalculatePath, поскольку ему нужно знать только, действителен ли следующий шаг, а не весь маршрут.
- Уровни детализации (LOD) : Модель робота имеет несколько уровней детализации, которые автоматически выбираются в зависимости от размера экрана. При ближайшем рассмотрении вы увидите все детали, в то время как у робота, находящегося дальше, геометрия упрощена, но при этом изображение отображается корректно. Пороговые значения LOD) в шаблоне настроены для складской среды; вам нужно будет отрегулировать их в зависимости от типичного расстояния просмотра в вашей сцене.
- Разрешение текстуры рендеринга : Это позволяет сбалансировать качество с объемом памяти графического процессора и скоростью ее заполнения. Камера видеонаблюдения и мини-карта не требуют полного разрешения, поэтому они отображаются на текстурах меньшего размера. Это уменьшает количество пикселей, которые графическому процессору необходимо заполнить, и объем памяти, потребляемый этими текстурами.
- Фильтрация физического слоя : Этот шаблон размещает роботов на слое "Bot" и настраивает параметры физики таким образом, чтобы сталкивались только соответствующие слои. Роботы сталкиваются с землей и друг с другом, но не с целями трассировки лучей пользовательского интерфейса или другими системами, использующими коллайдеры в целях, не связанных с физикой.
- Уровни качества : Шаблон определяет три уровня с постепенно уменьшающимися настройками. Во время выполнения программы вы определяете возможности устройства или предоставляете пользовательские настройки, а затем вызываете QualitySettings.SetQualityLevel для переключения. Ресурс URP Render Pipeline Asset поддерживает переопределение параметров для каждого уровня, поэтому вы можете уменьшить разрешение теней на устройствах низкого класса, не затрагивая устройства высокого класса.
Наконец, инструменты профилирования Unity необходимы для выявления узких мест. Проведите профилирование целевого оборудования, выявите проблемные места и оптимизируйте именно их, а не пытайтесь преждевременно оптимизировать всё.
Экосистема Unity Industry
Unity Industry включает в себя продукты и поддержку, необходимые для создания, управления и масштабирования многоплатформенных приложений. Разработанный для создателей контента в индустрии, он охватывает все этапы, от интеграции данных до развертывания.
Присоединяйтесь к ведущим компаниям в сфере производства, автомобилестроения, розничной торговли и других отраслях, которые используют 3D технологии в реальном времени для получения конкурентного преимущества, ускорения вывода продукции на рынок и оптимизации ресурсов. От визуализации продукции до моделирования, Unity Industry обеспечивает создание захватывающих интерактивных приложений.
Получите шаблон «Основы отрасли».
Если вы являетесь подписчиком Unity Industry :
1. Откройте Unity Hub и обновите Unity до версии 6.4.
2. Создайте новый проект, а затем найдите раздел «Основы отрасли» или перейдите в категорию «Обучение» и выберите там нужный шаблон.
Если у вас нет подписки на Unity Industry :
1. Перейдите на страницу бесплатной пробной версии и следуйте инструкциям, чтобы получить бесплатную пробную версию.
2. После запуска пробного периода выполните те же действия, что и для подписчиков из отраслевой группы.
Читать книгу
Заполните эту форму, чтобы получить доступ к передовым аналитическим данным и решениям от экспертов отрасли.



