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
现在的效果是这样:
2018-12-06-10-50-11.png已经实现半透明 mask,问题是颜色被灯光叠加了
灯光相关设置为:
2018-12-06-10-52-26.png材质需要为 CanvasItemMaterial:
2018-12-06-10-53-38.png更新 : 我发现indienova已经有人发过相关的笔记:https://www.indienova.com/groups/post/29324
问题在于,要做灯光 mask 需要你的图片的透明通道,我的那个纯黑白图当然就不行了,修改一下成功了:
Light2D
会照亮相应的 Light Mask 层
2018-12-06-10-31-51.pngCanvasModulate
2018-12-06-10-27-54.png这个节点会调整最近一个 viewport 的颜色,不过只要有 Light2D 存在就会失效
2018-12-06-10-29-02.png 2018-12-06-10-29-26.pngOutline Shader
https://github.com/steincodes/godot-shader-tutorials/blob/master/Shaders/outline.shader
这个 Shader 用来做人物高亮选择框,不过最好配合 Viewport 使用,在 Sprite 中使用这个 Viewport 作为贴图,然后再加 Shader 使用
2018-12-06-10-25-24.png两个数值这么调,正好是一个像素
2018-12-06-10-19-05.pngUI 相关
UI想要不跟随摄影机移动?
添加一个 CanvasLayer 节点,把相关的 UI Node 放里面
2018-12-06-10-13-35.pngCanvasLayer 上的 Node 受到了 2D 光照影响?
2018-12-06-09-59-25.png需要去掉 UI Node 的 Light Mask
2018-12-06-10-00-31.png 2018-12-06-10-00-47.png打开 2D 光照后 CanvasLayer 下的文字渲染不出来?
2018-12-06-10-10-18.png把 Lyaer 调为 0,是什么机制现在还不清楚
2018-12-06-10-11-05.png
网友评论