Wonderland Engine для разработчиков Unity
Эта страница предоставляет соответствия между Unity и Wonderland Engine для написания скриптов и содержит список различий при создании решений.
Если вы предпочитаете видеоформат, не пропустите наше руководство по переходу на нашем канале YouTube:
Скриптинг
Wonderland Engine работает в браузере, который уже имеет встроенное JavaScript-окружение. Это делает его лучшим выбором языка скриптов для веб-движков, так как ничего дополнительно скачивать не нужно.
Чтобы создать скрипт, нажмите правой кнопкой мыши в обозревателе активов редактора Wonderland и создайте новый компонент JavaScript / TypeScript. Он содержит базовый шаблон, чтобы помочь вам начать.
Отличной средой разработки для JS/TS является Visual Studio Code.
Для получения дополнительной информации о различиях API Wonderland Engine и Unity см. раздел Код.
TypeScript vs JavaScript
TypeScript добавляет статическую проверку типов в JavaScript, что приближает его к C# и значительно улучшает автодополнение кода в вашей IDE. Мы обычно рекомендуем TypeScript разработчикам, знакомым с Unity.
Wonderland Engine автоматически настраивает любой tsconfig.json за вас, создайте просто компонент TypeScript из обозревателя активов.
Упаковка
Хотя в Unity обычно используется предварительный просмотр в редакторе, в Wonderland Engine процесс упаковки достаточно быстр, чтобы конечное приложение в браузере можно было использовать как предварительный просмотр.
Страница в браузере будет перезагружаться при каждой перепаковке. Чтобы сделать живую перезагрузку еще быстрее, в Views > Preferences отключите “Force full page reloads”.
Для развертывания приложения, просто загрузите содержимое папки deploy вашего проекта на веб-сервер. В качестве альтернативы, вы можете загрузить через плагин “Wonderland Cloud Publish”, который можно активировать в Views > Plugins.
Несколько сцен
Wonderland Engine позволяет переключаться между несколькими сценами, созданными в нескольких файлах проекта (.wlp). Ознакомьтесь с Руководством по переключению сцен для получения инструкций.
Вы также можете загружать части сцены во время выполнения, см. Руководство по потоковой передаче .bin-файлов во время выполнения.
Префабы
В Wonderland Engine пока не существует эквивалента префабам. Вместо этого вы можете настроить прототип в сцене и object.clone() иерархию со всеми ее компонентами.
В качестве альтернативы, переместите объект префаба в отдельную сцену для загрузки во время выполнения, используя engine.loadPrefab(…) и создавая экземпляр.
Импорт активов
В Wonderland Engine, если файл сцены импортируется (путем перетаскивания из обозревателя активов либо в окно сцены, либо в контур сцены, или перетаскивания изображений в слот текстуры материала), он связывается и отслеживается на предмет изменений. Найденные в файле сцены ресурсы будут доступны в проекте и могут быть просмотрены в окне “Ресурсы”.
Пока файл не будет импортирован из обозревателя активов, он недоступен для использования в проекте. “Обозреватель активов” может рассматриваться как файловый обозреватель, который отличается от того, к чему вы могли привыкнуть в Unity.
Оптимизация активов
После импорта активы могут быть дополнительно оптимизированы:
- Модели могут быть автоматически упрощены для уменьшения количества вершин.
- Модели могут быть равномерно масштабированы.
- Изображения автоматически сжимаются.
- Изображения могут быть уменьшены в размерах.
Эти настройки находятся в окне “Ресурсы”.
Директории
deployсодержит итоговый результат упаковки.staticсодержит файлы, которые копируются вdeploy, как есть.cacheсодержит результаты кэширования компиляции активов, например, сжатые изображения. Обычно их можно безопасно удалить, но восстановление займет время.
Анимации
Анимации воспроизводятся через компонент типа animation. Анимации с кожей перенаправляются с помощью флажка retarget, если компонент прикреплен к одной из костей/суставов целевой кожи.
Ключевой кадр и событие ключевого кадра поддерживаются в редакторе анимации (см. Views > Animation Editor). Смешивание дорожек пока не поддерживается.
Физика
Жесткие тела создаются через компонент physx. Сцена может быть симулирована в редакторе с помощью Debug > Simulate Physics (Shift + Alt + S).
Сетевое взаимодействие
Пиринговое взаимодействие может быть достигнуто с поддержкой сообщества Wonderland Engine PeerJS Networking.
Оно использует WebRTC, который до определенной степени может использовать инфраструктуру сервера по умолчанию PeerJS.
В качестве альтернативы, сообщество интегрировало Colyseus для многопользовательского режима.
Пользовательский интерфейс
Пользовательский интерфейс настраивается вручную с помощью cursor, cursor-target и компонента collider.
Следующий 2D UI на основе HTML5 Canvas поддерживается сообществом: проект Lazy Widgets.
Терминология
| Термин | Unity | Wonderland Engine |
|---|---|---|
| Проект | Файл проекта. | Возможно, несколько файлов проекта, разделяющих одну корневую директорию проекта. |
| Просмотр инспектора | Просмотр свойств |
Код
Ниже приведен список общих шаблонов кода и их эквивалентов в Wonderland Engine:
Пользовательское поведение
В Wonderland Engine вместо “MonoBehaviour” используем “Component”. Чтобы написать его, просто расширьте класс Component:
| Unity | Wonderland Engine (JavaScript) | Wonderland Engine (TypeScript) |
| | |
Как и в Unity, некоторые элементы UI будут генерироваться для параметров.
Получить компонент на игровом объекте
| Unity | Wonderland Engine |
|
Присоединить компонент к объекту
| Unity | Wonderland Engine |
Получить дочерний объект
Получить родительский объект
Установить свойство материала
Установите различные свойства материала, такие как цвет или текстуры.
| Unity | Wonderland Engine |
Математика
JavaScript не поддерживает перегрузку операторов, что означает, что для написания математического кода используется другой подход.
Во многих случаях написание математического кода можно избежать вообще, так как API Wonderland Engine Object3D содержит много функций для манипуляции трансформациями, эффективно реализованных в WebAssembly:
1/* Перемещайте объект по нескольким осям. Чтобы избежать создания мусора для вектора, используйте временный вектор-член или постоянный в области модуля. */
2this.object.translateWorld([1, 2, 3]);
3
4/* Поверните объект вокруг оси Y. */
5const AxisY = [0, 1, 0];
6this.object.rotateAxisAngleDegLocal(AxisY, 25);Сборка мусора
JavaScript — это язык с управляемой памятью, который может вызывать непланируемые прерывания из-за автоматической сборки мусора. Чтобы избежать добавления памяти в кучу в форме списков/векторов или объектов, которые не могут быть легко собраны, рекомендуется создавать временные векторы/кватернионы либо в конструкторе, либо в теле пользовательского компонента для повторного использования, либо аккуратно в области модуля вашего компонента (выше класса). Постоянные векторы, такие как [0, 1, 0], лучше всего объявлять в области модуля как const AxisY = [0, 1, 0].
Математическая библиотека
Мы рекомендуем использовать glMatrix, которая является производительной библиотекой для языка JavaScript/TypeScript и учитывает сборку мусора. Она уже установлена в наших стандартных шаблонах и с нашими стандартными компонентами, поэтому, вероятно, нет необходимости устанавливать её дополнительно.
Вместо возвращения нового выделенного вектора функции glMatrix, рассчитывающие вектор или кватернион, ожидают, что первым параметром будет место, куда следует записать результат. Функции, возвращающие примитив, возвращают результат как обычно.
См. полную документацию библиотеки glMatrix здесь.
| Unity | Wonderland Engine |
JavaScript vs C#
Некоторые более заметные различия при переходе с C# включают:
- Всегда добавляйте префикс
this.для доступа к переменным-членам. varсоздает “глобальную” переменную, которая не ограничена текущей областью видимости. Рекомендуется избегать её и использоватьletилиconstвместо этого, которые создают переменные с локальной областью видимости.