Defold 核心是3D的. 就算只有2D材质的话渲染也是3D的, 只不过是映射到平面屏幕上而已. Defold 允许在集合中使用 3D 资源, 或者称作 模型 . 你可以用Defold制作全3D的, 或者2D和3D混合的游戏.
Model 组件和其他游戏对象组件一样, 两种创建办法:
模型组件需要设置一些属性:
除了常见的 Id, Position 和 Rotation 属性, 模型组件还有如下特有属性:
有了模型组件就可以使用随意使用组件功能同时可以使用 Scene Editor 工具移动, 旋转和缩放模型游戏对象了.
有一套用于在运行时修改模型的方法和属性 (参见 API文档).
Defold 提供了强大的运行时动画控制方法:
local play_properties = { blend_duration = 0.1 }
spine.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
). 可使用 go.set()
修改. 参见 这个例子的 API 用法.playback_rate
number
).textureN
hash
). 可使用 go.set()
修改. 参见 这个例子的 API 用法.3D 一半都有给网格赋予材质的功能, 比如颜色和贴图. 这些信息保存在由 3D 软件输出的 glTF .gltf 或者 Collada .dae 文件中. 应该基于游戏需要选择或者建造 高性能 材质. 材质由 着色器程序 及其若干相关属性组成.
在内置材质文件夹里有一个3D模型材质. 如果需要自定义材质, 请参考 材质文档. 着色器教程 介绍了着色器程序的工作方式.
默认 model 材质常量可以使用 go.set() 或 go.animate() 来修改 (参考 材质教程). 例如:
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 分别对应红, 绿, 蓝和不透明度.默认的渲染脚本是为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