Обзор Unity Muse Chat (AI от Unity)

к сожалению, АИшка не знает ничего про ДТФ, может оно и к лучшему
к сожалению, АИшка не знает ничего про ДТФ, может оно и к лучшему

Посмотрим как сейчас работает Unity Muse, насколько он сырой и пригоден для работы и еще рассмотрим, как он может нам упростить жизнь.

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

Я получил свой доступ, примерно через месяц ожидания.

Введение

27 июня 2023 года, компания Unity выпустила на своем Youtube канале видео с названием — Create games and apps faster with Unity Muse | Unity AI, где как раз и анонсировали свои инструменты, которые будет использовать технологию искусственного интеллекта.

Одним из них как раз является Unity Muse, который представляет из себя чат, который специализирован на экосистеме Unity.

забавно, что он не смог ответить на этот вопрос)
забавно, что он не смог ответить на этот вопрос)

Вот что пишут сами разработчики в официальном блоге компании

Using Muse Chat, you can leverage AI-based search across Unity documentation, training resources, and support content to get well-structured, accurate, and up-to-date information from Unity. Muse Chat helps you find relevant information, including working code samples, to speed up development and troubleshoot issues.

Marc Whitten, President and General Manager, Unity Create

«Что знает Unity Muse? Знает ли он хоть что-то? Давайте выясним!»

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

Перед тем как будем задавать вопросы, некоторые оговорки:

  • Распределение по уровням от легкого до сложного, частично можно ориентироваться на грейды разработчиков.
  • В тоже время, стоит понимать, что оценка вопросов и ответов является субъективной, если вы не согласны, жду в комментариях.
  • Я ограничусь 2 вопросами в каждом уровне, чтобы статья не была превращалась в груду текста.
  • Свое мнение/оценку об ответе буду писать во врезке для различимости

Level 1: Junior

На данном этапе, хочется проверить его базовые познания в движке Unity и немного в программирование.

  1. Расскажи концепцию префабов в Unity
  2. Приведи пример кода движения GameObject’а в Unity использую C#

Дальше будут ответы:

Префабы в Unity — это шаблоны объектов, которые позволяют создавать и использовать множество экземпляров одного и того же объекта в проекте. Любые изменения, внесенные в префаб, автоматически отражаются на всех его экземплярах, что позволяет легко вносить изменения во всем проекте без повторения одного и того же действия для каждой копии объекта [1].

Префабы полезны, когда вы хотите создавать объекты во время выполнения, которые изначально не присутствуют в сцене, например, для появления бонусов, спецэффектов, снарядов или NPC в нужные моменты игрового процесса [1].

Чтобы создать префаб, перетащите объект из окна иерархии в окно проекта. Объект и все его компоненты и дочерние объекты станут новым активом (Asset) в окне проекта [2].

При работе с префабами следует использовать передовые методы, такие как вложенные префабы, которые позволяют создавать сложные иерархии объектов, удобные для редактирования на нескольких уровнях [1].

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

[1] Prefabs

[2] Creating prefabs

Unity Muse про концепцию Prefab

Как по мне, достойный ответ, рассказал что это такое, зачем используются, привел примеры, также дополнительно сделал ссылки на документацию, неплохо.

Теперь посмотрим, как он умеет писать код на C#, тут уже прикреплю скриншот:

Unity Muse рассказывает как можно реализовать движение игрового объекта
Unity Muse рассказывает как можно реализовать движение игрового объекта

В целом, достаточно примитивное решение через Rigidbody и AddForce, но вполне рабочее. Недостатком здесь является, что обязательно нужна физика и компонент Rigidbody.

Было бы лучше увидеть движение через MoveTowards() или Lerp().


Не нравится.

Из прикольного, Unity Muse дает возможность сразу скачать, т. е можно написать какой-то запрос, дождаться ответа, скачать и сразу добавить к себе в проект.

Если бы еще класс назвал MoveForward.cs, цены бы ему не было
Если бы еще класс назвал MoveForward.cs, цены бы ему не было

Level 2: Middle

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

  • Опишите принципы и применение событий (events) в Unity
  • Какие методы и лучшие практики вы бы применили для оптимизации производительности в Unity?

Дальше будут ответы:

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

Пример применения событий в Unity:

1. Создайте класс, который будет содержать событие, и определите делегат для этого события.

using UnityEngine; public class EventManager : MonoBehaviour { // Определение делегата для события public delegate void ExampleEventHandler(); // Определение события public static event ExampleEventHandler OnExampleEvent; // Метод для вызова события public void TriggerExampleEvent() { if (OnExampleEvent != null) { OnExampleEvent(); } } }

2. Создайте класс, который будет подписываться на событие и выполнять действия при его вызове.

using UnityEngine; public class EventSubscriber : MonoBehaviour { private void OnEnable() { EventManager.OnExampleEvent += HandleExampleEvent; } private void OnDisable() { EventManager.OnExampleEvent -= HandleExampleEvent; } private void HandleExampleEvent() { Debug.Log("Событие вызвано!"); } }

3. Вызовите событие из другого объекта или компонента.

using UnityEngine; public class EventTrigger : MonoBehaviour { private void Update() { if (Input.GetKeyDown(KeyCode.Space)) { FindObjectOfType<EventManager>().TriggerExampleEvent(); } } }

В этом примере при нажатии на пробел будет вызываться событие `OnExampleEvent`, а класс `EventSubscriber` будет реагировать на это событие и выводить сообщение в консоль.

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

Все просто и доходчиво.

Классно + Здорово.

Для оптимизации производительности в Unity можно использовать следующие методы и лучшие практики:

1. Профилирование: Используйте инструменты профилирования Unity, такие как Profiler, чтобы определить узкие места и проблемные области в вашем проекте.

2. Оптимизация рендеринга: Уменьшите количество отображаемых полигонов, используйте уровни детализации (LOD) для моделей, объединяйте статичные объекты и используйте атласы текстур для уменьшения количества вызовов на отрисовку.

3. Оптимизация физики: Используйте физические слои (Physics Layers) для ограничения количества проверок столкновений между объектами. Убедитесь, что коллайдеры имеют простые формы, и используйте фиксированный временной шаг (Fixed Timestep) для обработки физики.

4. Оптимизация скриптов: Избегайте использования частых вызовов Update и FixedUpdate, используйте корутины или события для асинхронных операций. Оптимизируйте код, избегая избыточных вычислений и дорогостоящих операций.

5. Оптимизация памяти: Управляйте памятью, используя пулы объектов (Object Pooling) для часто создаваемых и уничтожаемых объектов. Избегайте частых выделений памяти и сборки мусора (Garbage Collection) во время выполнения.

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

7. Оптимизация сетевого кода: Если ваш проект использует сетевые функции, оптимизируйте передачу данных, используя компактные форматы и сжатие. Также старайтесь минимизировать задержки и потери пакетов.

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

Unity Muse про оптимизацию

Ответ на оценку — приемлимо. Из классного, что упомянул про существование сетевую части. Также есть первичные входы в оптимизацию (Object Pooling, LOD, Update/FixedUpdate) .

Level 3: Senior

Здесь нет так такового правильного или неправильного ответа, это скорее вопросы на рассуждение

  • Зачем использовать Assembly Definition?
  • Как автоматизировать процесс интеграции контента (спрайты, модели)

Использование Assembly Definition в Unity имеет несколько преимуществ:

Улучшение структуры проекта: Assembly Definition позволяет разделить код проекта на отдельные сборки, что облегчает организацию и структурирование кода.

Ускорение компиляции: Разделение кода на сборки позволяет Unity компилировать только измененные сборки, а не весь проект целиком. Это сокращает время компиляции и ускоряет процесс разработки.

Создание платформо-специфичных сборок: Assembly Definition позволяет создавать сборки, которые включаются только для определенных платформ. Это упрощает разработку и поддержку многоплатформенных проектов [1].

Получение информации о сборках в скриптах сборки: Unity предоставляет удобный API через пространство имен UnityEditor. Compilation для доступа к информации о сборках, такой как ссылки на сборки и пути вывода, в скриптах сборки [1].

Чтобы использовать Assembly Definition в Unity, создайте новый файл Assembly Definition (расширение. asmdef) и настройте его свойства в соответствии с вашими требованиями. Затем добавьте ссылки на другие Assembly Definition, если это необходимо, и включите или исключите сборку для определенных платформ [2].

[1] Assembly Definition

[2] Table of contents

Unity Muse о Assembly Definition.

Бесполезная вторая ссылка на оглавление (а должно на конкретную документацию вести). Подчеркнул все важные преимущества Assembly Definition, уважаемый ответ, вот бы все так отвечали:)

Для автоматизации процесса интеграции контента, такого как спрайты и модели, в Unity, вы можете использовать скрипты редактора и Asset Pipeline. Вот несколько подходов, которые могут быть полезными:

1. Создайте скрипты редактора: Скрипты редактора позволяют вам расширять функциональность редактора Unity и автоматизировать задачи. Вы можете создать скрипты для импорта, настройки и размещения ресурсов в вашем проекте. Эти скрипты должны быть написаны на языке программирования C# и размещены в папке «Editor» вашего проекта.

2. Используйте Asset Pipeline: Asset Pipeline представляет собой систему, которая обрабатывает все ресурсы, импортируемые в Unity. Вы можете использовать AssetPostprocessor для настройки импорта и модификации ресурсов в процессе импорта. Это позволяет вам автоматически применять настройки, такие как компрессия текстур, настройки мешей и материалов.

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

4. Используйте пакеты ресурсов: Пакеты ресурсов позволяют вам управлять и оптимизировать загрузку контента во время выполнения. Вы можете создавать и настраивать пакеты ресурсов с помощью Addressable Asset System, что позволяет автоматизировать процесс загрузки и выгрузки контента.

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

Unity Muse про автоматизацию процесса интеграции контента

Жаль, не привел ссылок на документацию. Здесь конкретно он ответил неплохо, было интересно упоминание про AssetPostprocessor, совсем не в кассу про префабы.
Оценим как приемлимо.

Личный опыт

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

Чаще всего спрашиваю про Unity UI Toolkit, про различные особенности стиля или что-то еще (когда например, в офф. документации ничего нет).

Про написать код/рефакторинг — думаю проще самому написать, чем попросить AI’шку правильно что-то сделать/объяснить/править.

И по личным ощущениям, Unity Muse — это скорее энциклопедия/база знаний/советник, а не тот, кто может сделать за тебя всю работу (в отличие, от того же ChatGPT).

Итоги

Перед тем как перейдем к каким-либо возможным выводам, хочу упомянуть, небольшие недостатки, такие как:

Достаточно часто слетает доступ к AI (это не It Just Works):

Много жалоб можно найти на форуме Unity. 
Много жалоб можно найти на форуме Unity. 

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

Более 2-ух месяцев — Coming soon.
Более 2-ух месяцев — Coming soon.

Очевидно, что это все пофиксят и добьют фичи, а пока работаем с тем что есть.

Мне нравится этот продукт, это действительно крутой способ получать нужную информацию по движку Unity. Сейчас я готов оценить данный продукт на оценку — «Похвально».

Буду следить за обновлениями и нововведениями Unity Muse и обязательно расскажу, если будет что-то прикольное) .

Надеюсь, эта статья оказалась интересной и полезной.

Буду рад замечаниям, обратной связи, лайкам, репостам, скачиваниям.

Спасибо за внимание.

44
11 комментариев

Было бы лучше увидеть движение через MoveTowards() или Lerp().

Когда блять придётся тыкать в стены, бизнесмен который нанял долбаёбов будет ещё оплачивать переписания на вариант с ригибоди.

2
Ответить

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

2
Ответить

Chat gpt тоже самое умеет, если не лучше. Может он там под капотом)

1
Ответить

Не лучше, но Muse использует GPT-3 (не турбо)

Ответить

там чтобы в закрытую бету попасть нужно очередь ждать?

Ответить

я имел в виду ожидание приглашения.

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

Ответить

Где можно скачать Unity Muse торрентом?

Ответить