【Godot4自学手册】第二十九节使用Shader来实现敌人受伤的闪白效果

在Godot 4中,Shader是用来为材质提供自定义渲染效果的程序。材质可以应用于MeshInstance、CanvasItem和ParticleEmitter等节点。Shader可以影响顶点的变换、片段(像素)的颜色,以及光照与物体的交互。
在Godot中,Shader的编写和使用通常涉及以下步骤:
选择或创建一个材质节点。1. 在材质的Shader属性中,选择Custom(自定义)或者Add来创建一个新的Shader。2.切换到Godot的Shader编辑器,这是编写和测试Shader的地方。3. 使用Shader编辑器中的语言(通常是Cg或GLSL)编写你的Shader代码。4.保存并关闭Shader编辑器。5.将编写好的Shader应用到相应的材质上。6. 将材质应用到你想要渲染的节点上。
Shader的编写需要一定的图形编程知识,Godot的Shader编辑器提供了一些基本的模板和功能,这可以帮助初学者入门。你的第一个 2D 着色器 — Godot Engine (4.x) 简体中文文档这是godot的官方文档,感兴趣的朋友可以去研究研究。
今天,我们就学习使用Shader,用两种方法实现闪白效果。

一、利用可视化shader界面完成闪白效果

切换到Moster场景,选中Anima节点,在其“检查器”下的 CanvasItem 部分中,在“Material”旁点击并选择“新建 ShaderMaterial”。这会创建一个新的材质资源。
请添加图片描述

然后点击新出现的球体,在Shader旁点击并选择“新建 着色器”。
请添加图片描述

在弹出的对话框中类型选择VisualShader,这表示可视化Shader。模式选择Canvas Item。
请添加图片描述

这样就打开了着色器编辑器面板。在面板中单击右键,在弹出创建注射器节点找那个选择ColorParametr。
请添加图片描述

ColorParameter命名为Hint表示颜色,Default Value Enabled启用,color 连接输出的Color。
请添加图片描述

点击右键添加BooleanParameter到着色器,命名为Enable,Default Value Enabled启用。
请添加图片描述

点击右键创建if函数。
请添加图片描述

然后将BooleanParameter的输出连接到if函数的a点;if函数的比设置为1,然后将ColorParameter的输出链接到if函数的a=b输入点;if函数的输出点链接到输出的Color点。
请添加图片描述

保存shader,这是检查器中会出现ShaderParameters,包含2各参数,一个是bool参数Enable,一个是颜色参数Hint。当Enable不开启的时候,怪物变为黑色;当开启Enable的时候,怪物变为白色。
请添加图片描述

变为黑色不是我们想要的,我们在着色器编辑器上单击右键添加Color。
请添加图片描述

将color输出的点分别链接到if函数的a>b和a<b输入点。
请添加图片描述

这样当ShaderParameters的Enable不开启,怪物不会变色,如果开启,则怪物会变成白色。
请添加图片描述

当敌人受伤时我们会用代码控制这个Shader的启用,实现闪白效果。

二、编写shader代码完成闪白效果

编写代码的开始于第一种方法相同,但在创建着色器弹出框中类型选择Shader而不是VisualShader,这表示用代码完成shader。模式选择Canvas Item。
请添加图片描述

这时着色器编辑器面板如下:
请添加图片描述

我们在面板中输入如下代码:

shader_type canvas_item;
uniform bool Enable;//定义一个布尔变量void fragment() {vec4 color = texture(TEXTURE,UV);//获取图每没一点的颜色if(Enable){COLOR= color;//如果Enable开启显示图片原有颜色}else{//否则图片变为白色COLOR = vec4(1.0,1.0,1.0,1.0);COLOR.a = color.a;}	
}

这样我们也实现了同样的效果。
请添加图片描述

这样我学习用两种方法实现敌人的闪白效果。这里有个细节需要强调一下,那就是resource_local_to_scene属性打上勾,如果不打上勾,我们创建的敌人都会闪白,打上勾,只有受伤的怪物才有闪白效果。
请添加图片描述

这一节就倒这,下一节我们将利用代码控制敌人闪白效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/287147.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#_事件_多线程(基础)

文章目录 事件通过事件使用委托 多线程(基础)进程:线程: 多线程线程生命周期主线程Thread 类中的属性和方法创建线程管理线程销毁线程 昨天习题答案 事件 事件&#xff08;Event&#xff09;本质上来讲是一种特殊的多播委托&#xff0c;只能从声明它的类中进行调用,基本上说是…

【小沐学AI】智谱AI大模型的一点点学习(Python)

文章目录 1、简介1.1 大模型排行榜 2、智谱AI2.1 GLM2.1.1 模型简介2.1.2 开源代码2.1.2.1 GLM-130B 2.2 ChatGLM2.2.1 模型简介2.2.2 开源代码2.2.2.1 ChatGLM2.2.2.2 ChatGLM22.2.2.3 ChatGLM3 2.3 CodeGeeX2.3.1 模型简介2.3.2 开源代码 2.4 CogView2.4.1 模型简介2.4.2 开源…

在存在代理的主机上,为docker容器配置代理

1、配置Firefox的代理 (只配置域名或者ip&#xff0c;前面不加http://) 2、为容器中的Git配置代理 git config --global http.proxy http://qingteng:8080 3、Git下载时忽略证书校验 env GIT_SSL_NO_VERIFYtrue git clone https://github.com/nginx/nginx.git 4、docker的…

《剑指 Offer》专项突破版 - 面试题 93 : 最长斐波那契数列(C++ 实现)

题目链接&#xff1a;最长斐波那契数列 题目&#xff1a; 输入一个没有重复数字的单调递增的数组&#xff0c;数组中至少有 3 个数字&#xff0c;请问数组中最长的斐波那契数列的长度是多少&#xff1f;例如&#xff0c;如果输入的数组是 [1, 2, 3, 4, 5, 6, 7, 8]&#xff0…

Redission 分布式锁原理分析

一、前言 我们先来说说分布式锁&#xff0c;为啥要有分布式锁呢? 像 JDK 提供的 synchronized、Lock 等实现锁不香吗&#xff1f;这是因为在单进程情况下&#xff0c;多个线程访问同一资源&#xff0c;可以使用 synchronized 和 Lock 实现&#xff1b;在多进程情况下&#xff…

MATLAB 公共区域的点云合并(46)

MATLAB 公共区域的点云合并(46) 一、算法介绍二、算法实现1.代码2.效果一、算法介绍 点云配准后,或者公共区域存在多片点云对场景进行冗余过量表达时,我们需要将点云进行合并,Matlab点云工具中提供了这样的合并函数,通过指定网格步长,对初始点云进行过滤。 函数主要实…

ReactNative项目构建分析与思考之RN组件化

传统RN项目对比 ReactNative项目构建分析与思考之react-native-gradle-plugin ReactNative项目构建分析与思考之native_modules.gradle ReactNative项目构建分析与思考之 cli-config 在之前的文章中&#xff0c;已经对RN的默认项目有了一个详细的分析&#xff0c;下面我们来…

Linux之文件系统与软硬链接

前言 我们之前阐述的内容都是在文件打开的前提下, 但是事实上不是所有文件都是被打开的, 且大部分文件都不是被打开的(也就是文件当前并不需要被访问), 都在磁盘中进行保存. 那这些没有被(进程)打开的文件, 也是需要被管理的! 对于这部分文件核心工作之一是能够快速定位文件…

P1135 奇怪的电梯 (双向bfs)

输入输出样例 输入 5 1 5 3 3 1 2 5输出 3说明/提示 对于 100%100% 的数据&#xff0c;1≤N≤200&#xff0c;1≤A,B≤N&#xff0c;0≤Ki​≤N。 本题共 1616 个测试点&#xff0c;前 1515 个每个测试点 66 分&#xff0c;最后一个测试点 10 分。 重写AC代码&#xff1…

UVa1483/LA5075 Intersection of Two Prisms

题目链接 本题是2010年ICPC亚洲区域赛东京赛区的I题 题意 求两个无限高棱柱的交。其中一个棱柱是把xy平面上的凸多边形沿z轴无限拉长得到&#xff0c;另外一个棱柱是把xz平面上的凸多边形沿y轴无限拉长得到。输入给出第一个棱柱在xy平面的凸多边形坐标和另外一个棱柱在xz平面的…

voxelize_cuda安装教程 python+windows环境

import voxelize_cuda报错 安装步骤&#xff1a; 克隆voxelize项目 官网&#xff1a;https://github.com/YuliangXiu/neural_voxelization_layer.git git clone https://github.com/YuliangXiu/neural_voxelization_layer.git下载一些必备的解析c文件的依赖 官网&#xff1a…

鸿蒙应用开发-录音保存并播放音频

功能介绍&#xff1a; 录音并保存为m4a格式的音频&#xff0c;然后播放该音频&#xff0c;参考文档使用AVRecorder开发音频录制功能(ArkTS)&#xff0c;更详细接口信息请查看接口文档&#xff1a;ohos.multimedia.media (媒体服务)。 知识点&#xff1a; 熟悉使用AVRecorder…

007 日期类型相关工具类

推荐一篇文章 http://t.csdnimg.cn/72F7Jhttp://t.csdnimg.cn/72F7J

agent利用知识来做规划:《KnowAgent: Knowledge-Augmented Planning for LLM-Based Agents》笔记

文章目录 简介KnowAgent思路准备知识Action Knowledge的定义Planning Path Generation with Action KnowledgePlanning Path Refinement via Knowledgeable Self-LearningKnowAgent的实验结果 总结参考资料 简介 《KnowAgent: Knowledge-Augmented Planning for LLM-Based Age…

盛⽔最多的容器【双指针】

首先我们设该容器的两边为左右两边界。 这道题中的&#xff1a;盛⽔最大容量 底 * 高 左右两边界距离 * 左右两边界的较短板。 这道题如果用暴力求解&#xff0c;是个人都能想到怎么做&#xff0c;遍历所有的情况即可。 有没有更好的办法呢&#xff1f;我是搜了资料了解的。我…

Covalent Network(CQT)的以太坊时光机:在 Rollup 时代确保长期数据可用性

以太坊正在经历一场向 “Rollup 时代” 的转型之旅&#xff0c;这一转型由以太坊改进提案 EIP-4844 推动。这标志着区块链技术的一个关键转折&#xff0c;采用了一种被称为“数据块&#xff08;blobs&#xff09;”的新型数据结构。为了与以太坊的扩容努力保持一致&#xff0c;…

MATLAB 自定义生成平面点云(可指定方向,添加噪声)(48)

MATLAB 自定义生成平面点云(可指定方向,添加噪声)(48) 一、算法介绍二、算法步骤三、算法实现1.代码2.效果一、算法介绍 通过这里的平面生成方法,可以生成模拟平面的点云数据,并可以人为设置平面方向,平面大小,并添加噪声来探索不同类型的平面数据。这种方法可以用于…

mysql刨根问底

索引&#xff1a;排好序的数据结构 二叉树&#xff1a; 红黑树 hash表&#xff1a; b-tree&#xff1a; 叶子相同深度&#xff0c;叶节点指针空&#xff0c;索引元素不重复&#xff0c;从左到右递增排序 节点带data btree&#xff1a; 非叶子节点只存储索引&#xff0c;可…

Java_15 删除排序数组中的重复项

删除排序数组中的重复项 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的…

影视作品一键转成动漫,自媒体作者用DomoAI赢麻了

前言 众所周知&#xff0c;在自媒体爆火的那段时间&#xff0c;影视号是最容易起量的&#xff0c;借助高质量的影视&#xff0c;进行剪辑&#xff0c;解说&#xff0c;等二次创作&#xff0c;最终制作成高质量的作品&#xff0c;但是随着自媒体的发展&#xff0c;影视号越来越…