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

这篇具有很好参考价值的文章主要介绍了Godot 4.0 遮罩一个2D物体,使其部分显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文针对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,都可以将自己设置为"蒙版"或是"本体"。

效果如下

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

我想到的一点窍门

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

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

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

1. 强制跟随

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

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

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

2. 使用shader

经验证,按我目前了解的知识,shader似乎无法只对蒙版起作用,渲染结果会影响整个物体的最终效果而不是遮罩本身。

若有能只影响蒙版的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文章来源地址https://www.toymoban.com/news/detail-476724.html

到了这里,关于Godot 4.0 遮罩一个2D物体,使其部分显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Godot引擎 4.0 文档 - 循序渐进教程 - 使用信号

    Using signals — Godot Engine (stable) documentation in English 在本课中,我们将研究信号。它们是节点在发生特定事件时发出的消息,例如按下按钮。其他节点可以连接到该信号并在事件发生时调用函数。 信号是 Godot 中内置的一种委托机制,它允许一个游戏对象对另一个游戏对象的变化

    2024年02月06日
    浏览(67)
  • Godot引擎 4.0 文档 - 循序渐进教程 - 节点和场景

    Nodes and Scenes — Godot Engine (stable) documentation in English 在Godot 关键概念概述中,我们看到 Godot 游戏是一棵场景树,每个场景都是一棵节点树。在本课中,我们将对它们进行更多解释。您还将创建您的第一个场景。 节点是游戏的基本构建块 。它们就像食谱中的配料。Godot中有几十

    2024年02月05日
    浏览(84)
  • Godot 4.0 加载为占位符(InstancePlaceholder)的用法和特点

    加载为占位符 的功能设计上是用来辅助选择性加载场景的。比如一个很庞大的3D世界,玩家一时之间只会处在世界一小部分区域内,同时让整个地图驻留于内存是不现实的,此时需要选择性地灵活加载地图,使用Godot的\\\"加载为占位符\\\"功能可辅助这项工作的进行。 本人以开发2D游戏

    2024年02月03日
    浏览(32)
  • Unity中实现2D遮罩

    一:前言 可以使用SpriteMask用作控制图形显示区域,SpriteRenderer用作显示图形,在SpriteRenderer中选择MaskInteraction遮罩类型 二:基础使用 创建一个空物体,添加SpriteMask组件,设置遮罩图片。创建一个空物体,添加SpriteRenderer组件用作显示图,设置SpriteRenderer的MaskInteraction遮罩类型

    2024年02月16日
    浏览(66)
  • Godot 官方2D C#重构(4):TileMap进阶使用

    Godot 官方 教程 Godot 2d 官方案例C#重构 专栏 Godot 2d 重构 github地址 我们有时候需要翻转图片,比如这个门,我们想要左右对称的一组 如何绘制自行摸索 Y Sort Enable是干什么的? 因为这两个物体有前后关系,所以不能通过简单的判断Z轴来设置遮挡关系(因为Z轴上下关系唯一,

    2024年02月08日
    浏览(48)
  • Godot 4 源码分析 - Path2D与PathFollow2D

    学习演示项目dodge_the_creeps,发现里面多了一个Path2D与PathFollow2D  研究GDScript代码发现,它主要用于随机生成Mob 这个有这么大的作用,不明觉厉 但不知道如何下手 查看源码,有编辑器及类源码 先从应用角度,到B站上找找有没有视频,结果发现这个 Godot塔防游戏 - 01 -核心路径

    2024年02月14日
    浏览(33)
  • Unity UGUI的RectMask2D(2D遮罩)组件的介绍及使用

    RectMask2D是Unity UGUI中的一个组件,用于实现2D遮罩效果。它可以限制子对象在指定的矩形区域内显示,超出区域的部分将被遮罩隐藏。 RectMask2D组件通过裁剪子对象的渲染区域来实现遮罩效果。它使用一个矩形区域作为遮罩范围,只有在该范围内的子对象才会被显示出来。 Sh

    2024年02月16日
    浏览(53)
  • Unity中UI Shader遮罩RectMask2D

    Unity中UI Shader遮罩RectMask2D 当父级物体有Rect Mask 2D组件时激活. 需要先手动定义此变体#pragma multi_compile _ UNITY_UI_CLIP_RECT 同时需要声明:_ClipRect(一个四维向量,四个分量分别表示RectMask2D的左下角点的xy坐标与右上角点的xy坐标.) UnityGet2DClipping (float2 position, float4 clipRect)即可实现遮

    2024年02月07日
    浏览(49)
  • 【Unity源码学习】遮罩:Mask 和 RectMask2D 学习

    UGUI的裁切分为Mask和Mask2D两种 Mask原理分析 RectMask2D原理分析 RectMask2D和Mask的性能区分 Mask:IMaskable,IMaterialModifier 我们先来看Mask。它可以给Mask指定一张裁切图裁切子元素。我们给Mask指定了一张圆形图片,那么子节点下的元素都会被裁切在这个圆形区域中。 Mask的实现原理:

    2024年02月12日
    浏览(61)
  • 标题:在Godot中使用Node2D创建自定义的Label

    在Godot游戏引擎中,我们经常需要在游戏中显示文本信息。通常,我们可以使用Label节点来实现这一点。但是,在某些情况下,你可能希望更灵活地控制文本的显示和样式。在本篇博客中,我们将学习如何通过使用Node2D节点来创建一个自定义的Label,从而能够更好地控制文本的

    2024年02月11日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包