Godot 學(xué)習筆記 #01
程序部分
關(guān)于 _ready
在 _ready 中你可以訪問完整的 tree,但是你不能更改 tree 的結(jié)構(gòu)。當我想在 _ready 中把一個子物體移動到另外一個地方時,操作總是無法成功的。這個時候有兩種方法:
- 使用 call_deferred(函數(shù)名)
- 使用 yield(get_tree(),"idle_frame")
相關(guān)閱讀:
https://twitter.com/reduzio/status/966037750918057987
https://godotengine.org/qa/7336/what-are-the-semantics-of-call_deferred
Editor 相關(guān)
GDScript 腳本中只要加入 tool 關(guān)鍵字就會在編輯器中執(zhí)行
包括子物體的 Visible 顯示都可以在編輯器的界面中實時反饋了,要研究的是:
- tool 所放置的位置有沒有關(guān)系,之前的代碼會不會在編輯器中運行
- extend 的腳本跟 tool 的關(guān)系,(測試是可以運行的)
檢測當前是否在 Editor 中運行,使用 Engine.editor_hint 檢查
https://docs.godotengine.org/en/3.0/classes/class_engine.html?highlight=editor_hint
渲染相關(guān)
Viewport 內(nèi)的 Node 無法使用移動工具
這個官方還沒有解決:
https://github.com/godotengine/godot/issues/20619
https://github.com/godotengine/godot/issues/17739
viewport 中不顯示子物體內(nèi)容?
在使用 viewport 時一定要給一個 camera 配合這個 viewport(最近的一個),否則這個 viewport遇到別的攝影機時就會用別的攝影機.
實現(xiàn) mask 的嘗試
這里有 light mask 的演示 :https://www.youtube.com/watch?v=e5EUZGbrMRY
但是,新渲染引擎中這個功能失效了,需要等待下個版本修復(fù):https://github.com/godotengine/godot/issues/8685
現(xiàn)在的效果是這樣:

已經(jīng)實現(xiàn)半透明 mask,問題是顏色被燈光疊加了
燈光相關(guān)設(shè)置為:

材質(zhì)需要為 CanvasItemMaterial:

更新 : 我發(fā)現(xiàn)indienova已經(jīng)有人發(fā)過相關(guān)的筆記:https://www.indienova.com/groups/post/29324
問題在于,要做燈光 mask 需要你的圖片的透明通道,我的那個純黑白圖當然就不行了,修改一下成功了:

Light2D
會照亮相應(yīng)的 Light Mask 層

CanvasModulate

這個節(jié)點會調(diào)整最近一個 viewport 的顏色,不過只要有 Light2D 存在就會失效


Outline Shader
https://github.com/steincodes/godot-shader-tutorials/blob/master/Shaders/outline.shader
這個 Shader 用來做人物高亮選擇框,不過最好配合 Viewport 使用,在 Sprite 中使用這個 Viewport 作為貼圖,然后再加 Shader 使用

兩個數(shù)值這么調(diào),正好是一個像素

UI 相關(guān)
UI想要不跟隨攝影機移動?
添加一個 CanvasLayer 節(jié)點,把相關(guān)的 UI Node 放里面

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

需要去掉 UI Node 的 Light Mask


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

把 Lyaer 調(diào)為 0,是什么機制現(xiàn)在還不清楚
