Godot 学习笔记 #01

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 需要你的图片的透明通道,我的那个纯黑白图当然就不行了,修改一下成功了:

godotMask.gif

Light2D

会照亮相应的 Light Mask 层

2018-12-06-10-31-51.png

CanvasModulate

2018-12-06-10-27-54.png

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

2018-12-06-10-29-02.png
2018-12-06-10-29-26.png

Outline 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.png

UI 相关

UI想要不跟随摄影机移动?

添加一个 CanvasLayer 节点,把相关的 UI Node 放里面

2018-12-06-10-13-35.png

CanvasLayer 上的 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

你可能感兴趣的:(Godot 学习笔记 #01)