Русский
Русский
English
Статистика
Реклама

Основы Armory. Traits

Traits, как вы уже успели догадаться из прошлых постов - это система скриптов в Armory. Если вы работали с движком Source то наверно помните такие розовые кубики - там они именовались Entities. Так и у нас, суть одна и та же. В нашем случае используемые traits можно посмотреть только в Outliner, переключившившись на режим просмотра Orphan Data в Collections. Это крайне неудобно, потому что нет визуального отображения в скриптов в сцене.

Типы traits

Traits делятся на несколько видов:

  • Haxe - написание скриптов с нуля на Haxe.

  • Wasm - см. WebAssembly.

  • UI - работа пользовательским интерфейсом.

  • Bundled - готовые / связанные сценарии Haxe.

  • Nodes - создание скриптов в Logic Editor (как в blueprints UE4).

Все они могут и (будут!) использоваться в вашем проекте.

Fake User

Если вы написали или составили в Logic Editor traits и не привязали к объекту - при экспорте игры она не сохранится. Чтобы не допустить пропажу ценных часов потраченных на составление хитроумного скрипта, в Blender есть одноименная функция. Нажмите значок щита рядом с вашей trait и она будет экспортирована. Функции или ноды требующих имени, должны быть экспортированы.

Traits Events

Trait могут запускать ивенты с жизненным циклом:

  • Trait.notifyOnAdd() - к объекту добавлен trait.

  • Trait.notifyOnInit() - объект добавлен в сцену.

  • Trait.notifyOnRemove() - объект удаляется со сцены.

  • Trait.notifyOnUpdate() - обновляет логику игры.

  • Trait.notifyOnRender() - обновляет рендеринг.

  • Trait.notifyOnRender2D() - обновляет рендер 2D.

Если сцена построена асинхронно т.е если в ней присутствуют не все объекты, то onInit может добавлять их. Если в сцене у вас есть trait которая зависит от других объектов, то используйте Scene.active.notifyOnInit() - этот ивент вызывается когда сцена полностью построена и в ней присутствуют все необходимые объекты.

Свойства traits

Скриптам можно задавать параметры и свойства прямо из Blender. Перед переменной в исходном коде нужно вставить метаданную @prop. Переменная var поддерживается только с ключевым словом. Final не будет работать, потому что свойства trait устанавливаются через Haxe Reflection API, после сборки игры.

Поддерживаются следующие типы данных:

Пример исходного кода:

Код
 package arm;  // See below ("Object data types")import iron.object.CameraObject; import iron.math.Vec2;import iron.math.Vec3;import iron.math.Vec4; class MyTrait extends iron.Trait {// Primitive data types@propvar intValue: Int = 40; // Type annotation possible, but not required@propvar floatValue = 3.14;@propvar stringValue = "Hello world!";@propvar booleanValue = true; // Object data types@propvar objValue: iron.object.Object; // Needs type annotation to be recognized@propvar camObjValue: CameraObject; // Type can be imported (see above)...@propvar lightObjValue: iron.object.LightObject; // .. or not, both will work@propvar meshObjValue: iron.object.MeshObject;@propvar speakerObjValue: iron.object.SpeakerObject; // Vector data types@propvar vector2DValue: Vec2 = new Vec2(0.2, 0.5); // Initialization possible...@propvar vector3DValue: Vec3; //... but not required@propvar vector4DValue = new Vec4(1, 2, 3, 4); // Not visible in Blender, `@prop` is missingvar notVisibleValue = 0.0; // ...}

Вот что дает этот исходник:

Предупреждения и ошибки

Движок будет предупреждать о неверных @prop:

  • Каждый @prop должен объявлять следующую переменную

  • Должна быть поддержка свойств

  • Синтаксис свойств должен быть правильным

  • Не лучшим решением будет делать статические свойства, потому что несколько объектов могут записать одно и то же свойство, что может привести к ошибкам.

Упорядочивание

По дефолту все traits создаются и хранятся в папке sources/ arm. Сваливать все в одну кучу - не самое умное решение, вам же потом поддерживать проект и искать битый скрипт среди сотен других - то еще занятие. Сохранять лучше в отдельных папках и подпапках для каждой сцены.

Можно упорядочить иерархически, для этого используем Haxe package syntax при наименовании какой нибудь traits. Например создадим trait с именем general.BoxBehavior - она сохранится в подкаталоге Sources/arm/general с именем BoxBehavior.hx

Вложенные подпапки можно создавать бесконечно, добавляя имя traits через точку: general.terrain.TerrainCollider создаст файл с именем TerrainCollider.hx по пути Sources/arm/ general/terrain.

Если вдруг понадобилось присвоить объекту другую характеристику, то нажмите на Class под списком свойств и выберите в выпадающем списке необходимое имя.

Источник: habr.com
К списку статей
Опубликовано: 07.12.2020 14:17:59
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Работа с 3d-графикой

Разработка игр

Игры и игровые приставки

Armory engine

Blender

Скрипты

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru