分类
dev

Godot engine学习 (2)

Day 3

GUI

Simplified UI controls
  • Label 显示一个文本的node
  • TextureFrame 显示一个简单的材质
  • TextureButton 显示一个简单的、材质化的按钮, 具有常规的state
  • TextureProgress 显示一个材质化的进度条
Complex UI controls

其他的控件:

  • 需要复杂UIs的情况: PC RPCs, MMOs, strategy, sims游戏等
  • 创建自定义的开发工具以加速内容的创建
  • 创建Godot编辑器的插件
  • 这类控件的重定位更常用containers来完成

Size and anchors

为不同尺寸的设备配置UI控件:

godot-anchors-guide

Splash Screen

基本上,这也是个场景(Scene).

使用自定义的布局, 包含一些基础的UI元素, 例如一个“Start开始”按钮.

一张背景图(TextureFrame).

和一个使用custom font自定义字体的Label, 显示copyright信息.

fonts字体

现今操作系统的字体通常都是矢量图形, 适合不同尺寸的展示, 格式通常为TTF(TrueType)或OTF(OpenType).

渲染此类字体成位图资源是一个复杂的过程. 通常由CPU完成. 而游戏引擎使用GPU渲染, 3D相关APIs并不能高效支持此类渲染, 所以需要在之前将字体转换成一个更友好的格式.

基本上呢, 和使用Unity类似, 有指定字体大小情况下的bitmap生成图, 再交由引擎使用, 是一个好方法.

劣势也是一样的: 字体尺寸问题、中文字符集问题等.

Animations

Godot里的动画. Godot的动画系统是极其强大而灵活的.

增加AnimationPlayer节点(node).

选中时, 会出现Animation Editor面板.

off

(颈椎背痛,休息了四天...)

Day 4

Resources资源

Godot里, 引擎绝大多数的行为与功能都是有nodes实现而来, 与Nodes一样非常重要的另一种数据类型是resource.

Nodes关注与behaviors(行为), 例如绘制一个sprite, 绘制3D模型, 物理引擎, GUI控件等等.

Resources则纯粹是数据容器(data containers). 意思是它们不会有任何action也不会处理任何信息.

Resources只包含数据.

如: Texture, Script, Mesh, Animation, Sample, AudioStream, Font, Translation等等.

当Godot从磁盘存储或载入一个scene(.scn/.xml), 一张图片(.png/.jpg), 一段脚本(.gd)或几乎任何东西, 被操作的那个文件就是一个resource.

当资源(resource)从磁盘载入, 它将只会被载入一次. 这意味着,资源会被载入到内存(memory). 尝试再次载入只会返回该资源.

通常而言, Godot里的每个对象(Node, Resource or anything else)都能输出属性.

属性可以是很多类型, 如string, integer, Vector2等, 有些类型可以是个resource.

这意味着nodes和resources都可以包含resources型的属性. 如图:

godot-resource-1

External 外部 vs built-in 内建

资源属性可以以两种方式关联资源: external(on disk)或是built-in.

代码的两种载入方式:

# 1
func _ready():
        var res = load("res://robi.png") # resource is loaded when line is executed
        get_node("sprite").set_texture(res)

# 2
func _ready():
        var res = preload("res://robi.png") # resource is loaded at compile time
        get_node("sprite").set_texture(res)