Wonderland Engine для разработчиков Unity
Эта страница предоставляет соответствия между Unity и Wonderland Engine для скриптинга и предоставляет список различий для построения решений.
Если вы предпочитаете видеоформат, обязательно ознакомьтесь с нашим руководством по переходу на нашем канале YouTube:
Скриптинг
Wonderland Engine работает в браузере, в котором уже встроено JavaScript-окружение. Это делает его наилучшим выбором для веб-движка, так как ничего дополнительного не нужно загружать.
Чтобы создать скрипт, кликните правой кнопкой мыши в обозревателе активов Wonderland Editor и создайте новый компонент JavaScript/TypeScript. Он имеет базовый шаблон, чтобы помочь вам начать.
Хорошая IDE для JS/TS – это Visual Studio Code.
Для получения дополнительной информации о том, как API Wonderland Engine отличается от Unity, см. раздел Код.
TypeScript против JavaScript
TypeScript добавляет статическую проверку типов в JavaScript, что приближает его к C# и значительно улучшает автодополнение кода в вашей IDE. Мы, как правило, рекомендуем TypeScript разработчикам, знакомым с Unity.
Wonderland Engine автоматически обрабатывает любую настройку tsconfig.json
для вас, просто
создайте компонент TypeScript из обозревателя активов.
Упаковка
В то время как рабочий процесс Unity часто использует предварительный просмотр в редакторе, в Wonderland Engine процесс окончательной упаковки настолько быстрый (меньше 1 секунды), что конечное приложение в браузере может использоваться в качестве предварительного просмотра.
Страница в браузере будет перезагружаться при каждой перепаковке, и проверьте Views > Preferences
, чтобы она
запускалась автоматически после каждого сохранения.
Для развертывания приложения, вам нужно просто загрузить содержимое папки 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
,
если компонент прикреплен к одной из костей/суставов целевой кожи.
Смешивание, редактирование ключевых кадров или событий ключевых кадров пока не поддерживается.
Физика
Жесткие тела создаются через тип компонента physx
. Сцена
может быть симулирована в редакторе с помощью Debug > Simulate Physics (Alt + S)
.
Сетевое взаимодействие
Peer-to-Peer сетевое взаимодействие может быть достигнуто с поддерживаемым сообществом Wonderland Engine PeerJS Networking.
Оно использует WebRTC, который в определенной мере может использовать инфраструктуру сервера по умолчанию PeerJS.
В качестве альтернативы, сообщество интегрировало Colyseus для многопользовательского режима.
Пользовательский интерфейс
Пользовательский интерфейс настраивается вручную с помощью cursor,
cursor-target и компонента collider
.
Следующий 2D UI на основе HTML5 Canvas поддерживается сообществом: проект Lazy Widgets.
Терминология
Термин | Unity | Wonderland Engine |
---|---|---|
Проект | Файл проекта. | Возможно несколько файлов проекта, разделяющих одну корневую директорию проекта. |
Просмотр инспектора | Просмотр свойств |
Код
Ниже приведен список общих шаблонов кода и их эквивалентов в Wonderland Engine:
Пользовательское поведение
В Wonderland Engine у нас есть “Component” вместо “MonoBehaviour”. Чтобы написать его, просто расширьте класс Component:
Unity | Wonderland Engine (JavaScript) | Wonderland Engine (TypeScript) |
|
|
|
Как и в Unity, некоторые элементы UI будут генерироваться для параметров.
Получить компонент на игровом объекте
Unity | Wonderland Engine |
|
Присоединить компонент к объекту
Unity | Wonderland Engine |
Получить дочерний объект
Получить родительский объект
Установить свойство материала
Установите различные свойства материала, такие как цвет или текстуры.
Unity | Wonderland Engine |
Математика
JavaScript не поддерживает перегрузку операторов, что означает, что мы используем другой подход к написанию математического кода.
Во многих случаях можно полностью избежать написания математического кода, так как Object3D API Wonderland Engine содержит множество функций для манипуляций с трансформациями, эффективно реализованных в 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 против C#
Некоторые более заметные различия при переходе с C# включают:
- Всегда добавляйте префикс
this.
для доступа к переменным-членам. var
создает “глобальную”, которая не ограничена текущей областью видимости. Рекомендуется избегать ее и использоватьlet
илиconst
вместо этого, которые создают переменные с областью видимости.