Godot 学习笔记 #01
程序部分
关于 _ready
在 _ready 中你可以访问完整的 tree,但是你不能更改 tree 的结构。当我想在 _ready 中把一个子物体移动到另外一个地方时,操作总是无法成功的。这个时候有两种方法:
- 使用 call_deferred(函数名)
- 使用 yield(get_tree(),"idle_frame")
相关阅读:
https://twitter.com/reduzio/status/966037750918057987
https://godotengine.org/qa/7336/what-are-the-semantics-of-call_deferred
Editor 相关
GDScript 脚本中只要加入 tool 关键字就会在编辑器中执行
包括子物体的 Visible 显示都可以在编辑器的界面中实时反馈了,要研究的是:
- tool 所放置的位置有没有关系,之前的代码会不会在编辑器中运行
- extend 的脚本跟 tool 的关系,(测试是可以运行的)
检测当前是否在 Editor 中运行,使用 Engine.editor_hint 检查
https://docs.godotengine.org/en/3.0/classes/class_engine.html?highlight=editor_hint
渲染相关
Viewport 内的 Node 无法使用移动工具
这个官方还没有解决:
https://github.com/godotengine/godot/issues/20619
https://github.com/godotengine/godot/issues/17739
viewport 中不显示子物体内容?
在使用 viewport 时一定要给一个 camera 配合这个 viewport(最近的一个),否则这个 viewport遇到别的摄影机时就会用别的摄影机.
实现 mask 的尝试
这里有 light mask 的演示 :https://www.youtube.com/watch?v=e5EUZGbrMRY
但是,新渲染引擎中这个功能失效了,需要等待下个版本修复:https://github.com/godotengine/godot/issues/8685
现在的效果是这样:

已经实现半透明 mask,问题是颜色被灯光叠加了
灯光相关设置为:

材质需要为 CanvasItemMaterial:

更新 : 我发现indienova已经有人发过相关的笔记:https://www.indienova.com/groups/post/29324
问题在于,要做灯光 mask 需要你的图片的透明通道,我的那个纯黑白图当然就不行了,修改一下成功了:

Light2D
会照亮相应的 Light Mask 层

CanvasModulate

这个节点会调整最近一个 viewport 的颜色,不过只要有 Light2D 存在就会失效


Outline Shader
https://github.com/steincodes/godot-shader-tutorials/blob/master/Shaders/outline.shader
这个 Shader 用来做人物高亮选择框,不过最好配合 Viewport 使用,在 Sprite 中使用这个 Viewport 作为贴图,然后再加 Shader 使用

两个数值这么调,正好是一个像素

UI 相关
UI想要不跟随摄影机移动?
添加一个 CanvasLayer 节点,把相关的 UI Node 放里面

CanvasLayer 上的 Node 受到了 2D 光照影响?

需要去掉 UI Node 的 Light Mask


打开 2D 光照后 CanvasLayer 下的文字渲染不出来?

把 Lyaer 调为 0,是什么机制现在还不清楚

网友评论