本文針對Godot 4.0。
我也查到了Godot 3.5如何實(shí)現(xiàn)遮罩,見這個(gè)鏈接 https://ask.godotengine.org/3031/how-do-i-mask-a-sprite
由于查到的大部分教程均針對3.5版本,特此提供4.0版本的教程。
CanvasItem的遮罩功能
Godot4.0的遮罩不是一個(gè)單獨(dú)的節(jié)點(diǎn),這個(gè)功能被包含在了一個(gè)常見的基類CanvasItem內(nèi)。
若要遮罩一個(gè)物體,可以這樣做:
- 建立精靈(或是其他繼承自CanvasItem的節(jié)點(diǎn)),貼圖為希望作為 "蒙版" 的圖。接下來簡稱這個(gè)物體為蒙版。
- 把你希望被遮罩的物體稱作本體,建立它或是拿出來它,把它作為 "蒙版" 的子物體,可以先擺一個(gè)你認(rèn)為方便查看的位置,等一下就要開啟遮罩了。
- 這一步是重點(diǎn)。在檢查器中設(shè)置 "蒙版" 的屬性。設(shè)置
CanvasItem->Visibility欄目->ClipChildren
為ClipOnly
。
這樣就成功實(shí)現(xiàn)了遮罩的效果,即,本體顯示時(shí),透明度會根據(jù)蒙版的透明度進(jìn)行調(diào)整。
因?yàn)檎谡止δ鼙粌?nèi)置在CanvasItem內(nèi),所以不論是繼承自Node2D的Sprite2D,還是繼承自Control的Label,都可以將自己設(shè)置為"蒙版"或是"本體"。
效果如下
我想到的一點(diǎn)竅門
很多時(shí)候,我們希望遮罩的運(yùn)作模式類似于一些游戲中的"拿手電筒照射黑暗區(qū)域",場景是固定的,光照區(qū)域是運(yùn)動的。
而為了使用蒙版,不得不把場景設(shè)置成光照區(qū)域的子物體,這樣不就是場景隨著光照運(yùn)動了嗎?
我想到了幾個(gè)解決方案分享一下:
1. 強(qiáng)制跟隨
使用RemoteTransform2D節(jié)點(diǎn),將目標(biāo)設(shè)置為"本體",使節(jié)點(diǎn)跟隨RemoteTransform2D節(jié)點(diǎn)而不是"蒙版"節(jié)點(diǎn)。
或?yàn)楸倔w節(jié)點(diǎn)綁定腳本,在_Process()
中不斷重設(shè)自己的GlobalPosition
。
注:Godot中有多個(gè)會不斷輪詢的函數(shù),如果你的蒙版位移不是在_Process()
中處理的,比如是在_Input()
函數(shù)中處理,那么本體也應(yīng)該在_Input()
中重設(shè)位置,若是被物理組件控制,本體應(yīng)該在_PhysicsProcess()
中重設(shè)位置。不這樣做容易產(chǎn)生明顯的畫面晃動。
我推測使用上述方法可能會增加無謂的DrawCall,說不定還會引起輕微的畫面晃動。
2. 使用shader
經(jīng)驗(yàn)證,按我目前了解的知識,shader似乎無法只對蒙版起作用,渲染結(jié)果會影響整個(gè)物體的最終效果而不是遮罩本身。
若有能只影響蒙版的shader寫法,或是別的方案,若能在評論區(qū)指出,不勝感激。
如果會簡單的shader編程,那么使用shader控制蒙版的形狀應(yīng)該是最恰當(dāng)?shù)倪x擇。
為了方便操作,可以設(shè)置一個(gè)充滿屏幕的ColorRect作為父節(jié)點(diǎn),設(shè)置ClipChildren
使其變成蒙版,而后在工具欄中選擇"鎖定",避免操作子物體時(shí)誤操作蒙版
然后用shader控制蒙版的透明度以構(gòu)成希望的形狀。簡單的圓、矩形是比較容易實(shí)現(xiàn)的。
可參考GodotShaders網(wǎng)站中的示例,特別是這一系列:
https://godotshaders.com/snippet/useful-code-snippets/文章來源:http://www.zghlxwxcb.cn/news/detail-476724.html
參考
https://godotforums.org/d/33826-where-is-the-mask-mode-for-light2ds-in-godot-4文章來源地址http://www.zghlxwxcb.cn/news/detail-476724.html
到了這里,關(guān)于Godot 4.0 遮罩一個(gè)2D物體,使其部分顯示的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!