首页 > 其他分享 >Godot 4.0 遮罩一个2D物体,使其部分显示

Godot 4.0 遮罩一个2D物体,使其部分显示

时间:2023-06-09 10:45:13浏览次数:110  
标签:遮罩 Godot 4.0 蒙版 本体 CanvasItem 节点

本文针对Godot 4.0。
我也查到了Godot 3.5如何实现遮罩,见这个链接 https://ask.godotengine.org/3031/how-do-i-mask-a-sprite

由于查到的大部分教程均针对3.5版本,特此提供4.0版本的教程。

CanvasItem的遮罩功能

Godot4.0的遮罩不是一个单独的节点,这个功能被包含在了一个常见的基类CanvasItem内。

若要遮罩一个物体,可以这样做:

  1. 建立精灵(或是其他继承自CanvasItem的节点),贴图为希望作为 "蒙版" 的图。接下来简称这个物体为蒙版
  2. 把你希望被遮罩的物体称作本体,建立它或是拿出来它,把它作为 "蒙版" 的子物体,可以先摆一个你认为方便查看的位置,等一下就要开启遮罩了。
  3. 这一步是重点。在检查器中设置 "蒙版" 的属性。设置CanvasItem->Visibility栏目->ClipChildrenClipOnly

这样就成功实现了遮罩的效果,即,本体显示时,透明度会根据蒙版的透明度进行调整。

因为遮罩功能被内置在CanvasItem内,所以不论是继承自Node2DSprite2D,还是继承自ControlLabel,都可以将自己设置为"蒙版"或是"本体"。

效果如下

image
image

我想到的一点窍门

很多时候,我们希望遮罩的运作模式类似于一些游戏中的"拿手电筒照射黑暗区域",场景是固定的,光照区域是运动的。

而为了使用蒙版,不得不把场景设置成光照区域的子物体,这样不就是场景随着光照运动了吗?

我想到了几个解决方案分享一下:

1. 强制跟随

使用RemoteTransform2D节点,将目标设置为"本体",使节点跟随RemoteTransform2D节点而不是"蒙版"节点。

或为本体节点绑定脚本,在_Process()中不断重设自己的GlobalPosition
注:Godot中有多个会不断轮询的函数,如果你的蒙版位移不是在_Process()中处理的,比如是在_Input()函数中处理,那么本体也应该在_Input()中重设位置,若是被物理组件控制,本体应该在_PhysicsProcess()中重设位置。不这样做容易产生明显的画面晃动。

我推测使用上述方法可能会增加无谓的DrawCall,说不定还会引起轻微的画面晃动。

2. 使用shader

如果会简单的shader编程,那么使用shader控制蒙版的形状应该是最恰当的选择。

为了方便操作,可以设置一个充满屏幕的ColorRect作为父节点,设置ClipChildren使其变成蒙版,而后在工具栏中选择"锁定",避免操作子物体时误操作蒙版

然后用shader控制蒙版的透明度以构成希望的形状。简单的圆、矩形是比较容易实现的。

可参考GodotShaders网站中的示例,特别是这一系列:
https://godotshaders.com/snippet/useful-code-snippets/

参考

https://godotforums.org/d/33826-where-is-the-mask-mode-for-light2ds-in-godot-4

标签:遮罩,Godot,4.0,蒙版,本体,CanvasItem,节点
From: https://www.cnblogs.com/qiiimiu/p/17468482.html

相关文章

  • Monica: 您的又一个免费ChatGPT 4.0
    最近ChatGPT又开始封号了,主要原因如下:违反使用条款:如果用户违反了平台或应用的使用条款,例如发布违法、恶意或滥用行为的内容,侵犯他人的权利,或者从事垃圾信息传播等,管理员可能会采取封号措施。滥用行为:如果用户进行恶意攻击、骚扰、欺诈、诈骗或其他违法行为,管理员可能会对......
  • 检测到包降级: System.Diagnostics.Debug 从 4.3.0 降级到 4.0.11。直接从项目引用包
    .net 项目在发版的时候报包的版本不一致严重性代码说明项目文件行禁止显示状态错误错误形式的警告:检测到包降级:System.Diagnostics.Debug从4.3.0降级到4.0.11。直接从项目引用包以选择不同版本。ProjectName->Microsoft.AspNetCore.Mvc.Core2.2.5->Micros......
  • OpenHarmony 4.0 Beta1发布,邀您体验
     初夏之际,OpenAtom OpenHarmony(简称“OpenHarmony”) 4.0 Beta1版本如期而至。4.0 Beta1版本在3.2 Release版本基础上,继续提升标准系统的ArkUI、应用框架、图形媒体等子系统能力,并提供首批API Level 10接口。作为OpenHarmony 4.0的首个Beta版本,推出了系列新特性。......
  • Web.xml 4.0
    Web.xml4.0<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoc......
  • JupyterLab 4.0 发布了
    JupyterLab是JupyterNotebook的下一代版本,它提供了更强大的功能和更灵活的用户界面,6月6日,官方发布了JupyterLab4.0的说明,并且说该版本是下一个主要的版本。JupyterLab的主要改进是:用户界面:JupyterNotebook使用单个文档界面,以逐个标签的方式显示打开的笔记本。每个标签......
  • 在线免费CHAΤ智能问答,GΡT4.0国内镜像
    CHAΤ智能语言大模型.真正像人类一样对话,是百科全书,甚至帮你写文案,写脚..名称:chatAI智能聊天特色:GPT-4官方接口详情:https://service-ht6dwx8s-1256721724.gz.apigw.tencentcs.com/release/品牌:国内镜像产品......
  • 一文教你玩转 TDengine 3.0.4.0 重要特性 Python UDF
    TDengine3.0.4.0发布了一个重要特性:支持用Python语言编写的自定义函数(UDF)。这个特性极大节省了UDF开发的时间成本。作为时序大数据处理平台,不支持PythonUDF显然是不完整的。UDF在实现自己业务中特有的逻辑时非常有用,比如量化交易场景计算自研的交易信号。本文内容由浅入......
  • Godot的几个附加脚本和进行继承时比较特别的特性
    注:这是在Godot4.0中总结出的内容,并且语言是C#。特别的,下面有的特性和C#关系比较大。基本特性在Godot中,为某个节点编写特别的代码时,需要为节点新建脚本,或引用已有脚本。引用脚本时,填入脚本路径即可,相当于是复用代码了。新建脚本时,一般做法是新建一个自定义类型,并且......
  • Multisim14.0软件安装教程Multisim14.0软件安装包下载
    [名称]:Multisim14.0[大小]:685.23MB[语言]:中/英文 [适用系统]:win7,win8,win10,win11[简介]:Multisim是一款以win系统为基础的电路仿真工具,该软件功能非常强大,具有丰富的仿真分析能力,可以有效帮助用户完成实验工作,是一款非常不错的电路图设计软件。[64位下载地址]:https://pan.baidu.c......
  • iOS蓝牙BLE4.0通信功能
    概述iOS蓝牙BLE4.0通信功能,最近刚学的苹果,为了实现蓝牙门锁的项目,找了一天学习了下蓝牙的原理,亲手测试了一次蓝牙的通信功能,结果成功了,那么就把我学习的东西分享一下。详细一、蓝牙常见名称和缩写BLE:(Bluetoothlowenergy)蓝牙4.0设备因为低耗电BLE:(Bluetoothlow......