国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Godot 4.0 遮罩一個(gè)2D物體,使其部分顯示

這篇具有很好參考價(jià)值的文章主要介紹了Godot 4.0 遮罩一個(gè)2D物體,使其部分顯示。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本文針對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è)物體,可以這樣做:

  1. 建立精靈(或是其他繼承自CanvasItem的節(jié)點(diǎn)),貼圖為希望作為 "蒙版" 的圖。接下來簡稱這個(gè)物體為蒙版
  2. 把你希望被遮罩的物體稱作本體,建立它或是拿出來它,把它作為 "蒙版" 的子物體,可以先擺一個(gè)你認(rèn)為方便查看的位置,等一下就要開啟遮罩了。
  3. 這一步是重點(diǎn)。在檢查器中設(shè)置 "蒙版" 的屬性。設(shè)置CanvasItem->Visibility欄目->ClipChildrenClipOnly。

這樣就成功實(shí)現(xiàn)了遮罩的效果,即,本體顯示時(shí),透明度會根據(jù)蒙版的透明度進(jìn)行調(diào)整。

因?yàn)檎谡止δ鼙粌?nèi)置在CanvasItem內(nèi),所以不論是繼承自Node2DSprite2D,還是繼承自ControlLabel,都可以將自己設(shè)置為"蒙版"或是"本體"。

效果如下

Godot 4.0 遮罩一個(gè)2D物體,使其部分顯示
Godot 4.0 遮罩一個(gè)2D物體,使其部分顯示

我想到的一點(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/

參考

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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Godot引擎 4.0 文檔 - 循序漸進(jìn)教程 - 使用信號

    Godot引擎 4.0 文檔 - 循序漸進(jìn)教程 - 使用信號

    Using signals — Godot Engine (stable) documentation in English 在本課中,我們將研究信號。它們是節(jié)點(diǎn)在發(fā)生特定事件時(shí)發(fā)出的消息,例如按下按鈕。其他節(jié)點(diǎn)可以連接到該信號并在事件發(fā)生時(shí)調(diào)用函數(shù)。 信號是 Godot 中內(nèi)置的一種委托機(jī)制,它允許一個(gè)游戲?qū)ο髮α硪粋€(gè)游戲?qū)ο蟮淖兓?/p>

    2024年02月06日
    瀏覽(47)
  • Godot引擎 4.0 文檔 - 循序漸進(jìn)教程 - 節(jié)點(diǎn)和場景

    Godot引擎 4.0 文檔 - 循序漸進(jìn)教程 - 節(jié)點(diǎn)和場景

    Nodes and Scenes — Godot Engine (stable) documentation in English 在Godot 關(guān)鍵概念概述中,我們看到 Godot 游戲是一棵場景樹,每個(gè)場景都是一棵節(jié)點(diǎn)樹。在本課中,我們將對它們進(jìn)行更多解釋。您還將創(chuàng)建您的第一個(gè)場景。 節(jié)點(diǎn)是游戲的基本構(gòu)建塊 。它們就像食譜中的配料。Godot中有幾十

    2024年02月05日
    瀏覽(24)
  • Godot 4.0 加載為占位符(InstancePlaceholder)的用法和特點(diǎn)

    Godot 4.0 加載為占位符(InstancePlaceholder)的用法和特點(diǎn)

    加載為占位符 的功能設(shè)計(jì)上是用來輔助選擇性加載場景的。比如一個(gè)很龐大的3D世界,玩家一時(shí)之間只會處在世界一小部分區(qū)域內(nèi),同時(shí)讓整個(gè)地圖駐留于內(nèi)存是不現(xiàn)實(shí)的,此時(shí)需要選擇性地靈活加載地圖,使用Godot的\\\"加載為占位符\\\"功能可輔助這項(xiàng)工作的進(jìn)行。 本人以開發(fā)2D游戲

    2024年02月03日
    瀏覽(23)
  • Unity中實(shí)現(xiàn)2D遮罩

    Unity中實(shí)現(xiàn)2D遮罩

    一:前言 可以使用SpriteMask用作控制圖形顯示區(qū)域,SpriteRenderer用作顯示圖形,在SpriteRenderer中選擇MaskInteraction遮罩類型 二:基礎(chǔ)使用 創(chuàng)建一個(gè)空物體,添加SpriteMask組件,設(shè)置遮罩圖片。創(chuàng)建一個(gè)空物體,添加SpriteRenderer組件用作顯示圖,設(shè)置SpriteRenderer的MaskInteraction遮罩類型

    2024年02月16日
    瀏覽(21)
  • Godot 官方2D C#重構(gòu)(4):TileMap進(jìn)階使用

    Godot 官方2D C#重構(gòu)(4):TileMap進(jìn)階使用

    Godot 官方 教程 Godot 2d 官方案例C#重構(gòu) 專欄 Godot 2d 重構(gòu) github地址 我們有時(shí)候需要翻轉(zhuǎn)圖片,比如這個(gè)門,我們想要左右對稱的一組 如何繪制自行摸索 Y Sort Enable是干什么的? 因?yàn)檫@兩個(gè)物體有前后關(guān)系,所以不能通過簡單的判斷Z軸來設(shè)置遮擋關(guān)系(因?yàn)閆軸上下關(guān)系唯一,

    2024年02月08日
    瀏覽(26)
  • Godot 4 源碼分析 - Path2D與PathFollow2D

    Godot 4 源碼分析 - Path2D與PathFollow2D

    學(xué)習(xí)演示項(xiàng)目dodge_the_creeps,發(fā)現(xiàn)里面多了一個(gè)Path2D與PathFollow2D ?研究GDScript代碼發(fā)現(xiàn),它主要用于隨機(jī)生成Mob 這個(gè)有這么大的作用,不明覺厲 但不知道如何下手 查看源碼,有編輯器及類源碼 先從應(yīng)用角度,到B站上找找有沒有視頻,結(jié)果發(fā)現(xiàn)這個(gè) Godot塔防游戲 - 01 -核心路徑

    2024年02月14日
    瀏覽(25)
  • Unity UGUI的RectMask2D(2D遮罩)組件的介紹及使用

    RectMask2D是Unity UGUI中的一個(gè)組件,用于實(shí)現(xiàn)2D遮罩效果。它可以限制子對象在指定的矩形區(qū)域內(nèi)顯示,超出區(qū)域的部分將被遮罩隱藏。 RectMask2D組件通過裁剪子對象的渲染區(qū)域來實(shí)現(xiàn)遮罩效果。它使用一個(gè)矩形區(qū)域作為遮罩范圍,只有在該范圍內(nèi)的子對象才會被顯示出來。 Sh

    2024年02月16日
    瀏覽(16)
  • Unity中UI Shader遮罩RectMask2D

    Unity中UI Shader遮罩RectMask2D

    Unity中UI Shader遮罩RectMask2D 當(dāng)父級物體有Rect Mask 2D組件時(shí)激活. 需要先手動定義此變體#pragma multi_compile _ UNITY_UI_CLIP_RECT 同時(shí)需要聲明:_ClipRect(一個(gè)四維向量,四個(gè)分量分別表示RectMask2D的左下角點(diǎn)的xy坐標(biāo)與右上角點(diǎn)的xy坐標(biāo).) UnityGet2DClipping (float2 position, float4 clipRect)即可實(shí)現(xiàn)遮

    2024年02月07日
    瀏覽(21)
  • 【Unity源碼學(xué)習(xí)】遮罩:Mask 和 RectMask2D 學(xué)習(xí)

    【Unity源碼學(xué)習(xí)】遮罩:Mask 和 RectMask2D 學(xué)習(xí)

    UGUI的裁切分為Mask和Mask2D兩種 Mask原理分析 RectMask2D原理分析 RectMask2D和Mask的性能區(qū)分 Mask:IMaskable,IMaterialModifier 我們先來看Mask。它可以給Mask指定一張裁切圖裁切子元素。我們給Mask指定了一張圓形圖片,那么子節(jié)點(diǎn)下的元素都會被裁切在這個(gè)圓形區(qū)域中。 Mask的實(shí)現(xiàn)原理:

    2024年02月12日
    瀏覽(20)
  • 標(biāo)題:在Godot中使用Node2D創(chuàng)建自定義的Label

    標(biāo)題:在Godot中使用Node2D創(chuàng)建自定義的Label

    在Godot游戲引擎中,我們經(jīng)常需要在游戲中顯示文本信息。通常,我們可以使用Label節(jié)點(diǎn)來實(shí)現(xiàn)這一點(diǎn)。但是,在某些情況下,你可能希望更靈活地控制文本的顯示和樣式。在本篇博客中,我們將學(xué)習(xí)如何通過使用Node2D節(jié)點(diǎn)來創(chuàng)建一個(gè)自定義的Label,從而能夠更好地控制文本的

    2024年02月11日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包