Defold по сути является 3D движком. Даже когда работа ведется только с 2D-материалом, весь рендеринг выполняется в 3D, но проецируется на экран ортографически. Defold позволяет полноценно использовать 3D-контент, включая 3D-ассеты, или модели в коллекции. Игры могут быть созданы исключительно в 3D с использованием лишь 3D-ассетов, или же 3D и 2D контент может совмещаться в соответствии с целями разработчика.
Модели создаются так же, как и любой другой компонент игрового объекта. Это можно сделать двумя способами:
После того как модель создана, необходимо определить ряд ее свойств.
Помимо свойств Id, Position и Rotation существуют следующие специфичные для данного компонента свойства:
После того, как модель размещена, можно свободно редактировать и манипулировать этим компонентом и/или объемлющим игровым объектом с помощью обычных инструментов Scene Editor, перемещая, вращая и масштабируя модель по своему усмотрению.
Манипулировать моделями во время выполнения можно с помощью ряда различных функций и свойств (обращайтесь к документации по API).
Defold предоставляет мощную поддержку для управления анимацией во время выполнения. За подробностями обращайтесь к руководству по модельной анимации:
local play_properties = { blend_duration = 0.1 }
model.play_anim("#model", "jump", go.PLAYBACK_ONCE_FORWARD, play_properties)
Курсор воспроизведения анимации может быть анимирован как вручную, так и с помощью механизма анимации свойств:
-- set the run animation
model.play_anim("#model", "run", go.PLAYBACK_NONE)
-- animate the cursor
go.animate("#model", "cursor", go.PLAYBACK_LOOP_PINGPONG, 1, go.EASING_LINEAR, 10)
Модель также имеет ряд различных свойств, которыми можно манипулировать с помощью go.get()
и go.set()
:
animation
hash
, только для чтения). Анимация изменяется с помощью model.play_anim()
(см. выше).cursor
number
).material
hash
). Это свойство можно изменить с помощью свойства ресурса Material и go.set()
. За примером обращайтесь к справочнику по API.playback_rate
number
).textureN
hash
). Может быть изменено с помощью свойства ресурса текстуры и go.set()
. За примером обращайтесь к справочнику по API.3D-программы обычно позволяют задавать свойства вершин объекта, такие как цвет и текстурирование. Эта информация попадает в файл Collada .dae, который экспортируется из 3D-программы. В зависимости от требований игры потребуется выбрать и/или создать подходящие и эффективные материалы для объектов. Материал сочетает в себе шейдерные программы с набором параметров для рендеринга объекта.
В папке встроенных материалов имеется простой материал для 3D-модели. Если необходимо создавать пользовательские материалы для моделей, обращайтесь к документации по материалам. Руководство по шейдерам содержит информацию о работе шейдерных программ.
The default model material has the following constants that can be changed using go.set() or go.animate() (refer to the Material manual for more details). Examples:
go.set("#model", "tint", vmath.vector4(1,0,0,1))
go.animate("#model", "tint", go.PLAYBACK_LOOP_PINGPONG, vmath.vector4(1,0,0,1), go.EASING_LINEAR, 2)
tint
vector4
). Для представления оттенка с компонентами x, y, z и w, соответствующими красному, зеленому, синему и альфа оттенкам, используется тип vector4.Рендер-скрипт по умолчанию создан для 2D-игр и не работает с 3D-моделями. Но, скопировав этот стандартный рендер-скрипт и добавив в него несколько строк кода, можно включить рендеринг моделей. Например:
function init(self)
self.model_pred = render.predicate({"model"})
...
end
function update()
...
render.set_depth_mask(true)
render.enable_state(render.STATE_DEPTH_TEST)
render.set_projection(stretch_projection(-1000, 1000)) -- orthographic
render.draw(self.model_pred)
render.set_depth_mask(false)
...
end
Обращайтесь к документации по рендеру за информацией о работе рендер-скриптов.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB