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
现在的效果是这样:
![](https://img.haomeiwen.com/i12965633/12e9bbe32a782675.png)
已经实现半透明 mask,问题是颜色被灯光叠加了
灯光相关设置为:
![](https://img.haomeiwen.com/i12965633/23687e579da9646e.png)
材质需要为 CanvasItemMaterial:
![](https://img.haomeiwen.com/i12965633/19a05bdb5bbcbdf3.png)
更新 : 我发现indienova已经有人发过相关的笔记:https://www.indienova.com/groups/post/29324
问题在于,要做灯光 mask 需要你的图片的透明通道,我的那个纯黑白图当然就不行了,修改一下成功了:
![](https://img.haomeiwen.com/i12965633/344c23e73b88ed46.gif)
Light2D
会照亮相应的 Light Mask 层
![](https://img.haomeiwen.com/i12965633/246643952d393424.png)
CanvasModulate
![](https://img.haomeiwen.com/i12965633/fb8f5456811f8339.png)
这个节点会调整最近一个 viewport 的颜色,不过只要有 Light2D 存在就会失效
![](https://img.haomeiwen.com/i12965633/3fa303a82b09aa57.png)
![](https://img.haomeiwen.com/i12965633/7e1c57c72e3d7510.png)
Outline Shader
https://github.com/steincodes/godot-shader-tutorials/blob/master/Shaders/outline.shader
这个 Shader 用来做人物高亮选择框,不过最好配合 Viewport 使用,在 Sprite 中使用这个 Viewport 作为贴图,然后再加 Shader 使用
![](https://img.haomeiwen.com/i12965633/fef60f0a538812d6.png)
两个数值这么调,正好是一个像素
![](https://img.haomeiwen.com/i12965633/911455543cf9a1cb.png)
UI 相关
UI想要不跟随摄影机移动?
添加一个 CanvasLayer 节点,把相关的 UI Node 放里面
![](https://img.haomeiwen.com/i12965633/38f9379a9dd4b99d.png)
CanvasLayer 上的 Node 受到了 2D 光照影响?
![](https://img.haomeiwen.com/i12965633/d8e3d19991cc0bb6.png)
需要去掉 UI Node 的 Light Mask
![](https://img.haomeiwen.com/i12965633/423776b9790820ed.png)
![](https://img.haomeiwen.com/i12965633/091d17af7e4d0df8.png)
打开 2D 光照后 CanvasLayer 下的文字渲染不出来?
![](https://img.haomeiwen.com/i12965633/9133bfb4a1a248b5.png)
把 Lyaer 调为 0,是什么机制现在还不清楚
![](https://img.haomeiwen.com/i12965633/021e87126c6bc782.png)
网友评论