6.GodotCanvasItem、Node2D及自定义节点

Godot4节点树右键菜单添加自定义选项 至此原理就讲完了,浪费了两天时间,提高了查看源码的能力。 阅读详情
AI摘要

本文详细介绍了Godot游戏引擎中的CanvasItem节点,它继承了Node的功能,用于2D图形绘制。讲解了节点的可视性、Modulate和self_modulate、LightMask与Light2D配合、Material和Shader等概念,以及如何通过自定义节点和脚本来扩展和重写节点功能。,

CanvasItem节点

![[Pasted image 20240415213917.png]]

  • CanvasItem节点,CanvasItem -> Node,所以CanvasItem继承了Node的所有功能
  • Canvas是画布的意思,所以CanvasItem代表了就是可以被绘制的节点,可以设置可视化界面和材质的颜色
  • 所有的2D节点和GUI节点都继承于CanvasItem节点
  • CanvasItem是按树的树的深度优先遍历顺序绘制的
  • 可以通过设置CanvasItem的Show Behind Parent来改变最终渲染到屏幕上的画面顺序
    ![[Pasted image 20240415214232.png]]
Visible

设置精灵节点的可视化
![[Pasted image 20240415214419.png]]

目前有两个精灵节点
子节点在父节点的上方
![[Pasted image 20240415214503.png]]

选中子节点,打开Show_behind_parent
![[Pasted image 20240415214526.png]]

modulate

附加在CanvasItem上的一个贴图
![[Pasted image 20240415214606.png]]

![[Pasted image 20240415214840.png]]

modulate改变颜色,就相当于给物体额外添加了一个颜色,相当于光线,额外的颜色附加在物体表面
![[Pasted image 20240415214855.png]]

self_modulate

仅仅给自己改变物体的颜色贴图
![[Pasted image 20240415215103.png]]

如果是Modulate,给父节点改变颜色,子节点也会跟着改变颜色
如果使用self_modulate,给父节点改变颜色,仅仅是父节点会改变颜色

light_mask

![[Pasted image 20240415215415.png]]

和Light2D节点配合使用
![[Pasted image 20240415215759.png]]

添加一个Light2D节点,PointLight2D
导入一张png图片添加到Texture里
![[Pasted image 20240415215912.png]]

![[Pasted image 20240415215956.png]]

可以看到添加到PointLight2D的图片被投影到Sprite节点里
![[Pasted image 20240415220708.png]]

在Light2D属性Range里可以改变层级
![[Pasted image 20240415220937.png]]

切换到2的话,就发现光线投影不到物体上了
![[Pasted image 20240415221434.png]]

material

![[Pasted image 20240415222133.png]]

Material 材质,物体的质地,指色彩,纹理,光滑度,透明度,反射率,折射率,发光度。实际就是Shader
Texture 贴图,附加到物体表面的贴图
Shader 着色器,使用代码来渲染图形的技术,可以控制GPU运算图像效果的一段代码

![[Pasted image 20240415222436.png]]

新建一个material
通过改变模式,图片也会发生改变
material材质,改变物体表面的属性的一种贴图,和modulate有点类似
material是一种更复杂的材质

use_parent_material

![[Pasted image 20240415222644.png]]

如果勾选,所有子节点都是使用这个材质,让子节点也使用父节点的material,是一种继承

Ordering

z_index
![[Pasted image 20240415223252.png]]

z_index更大的话,显示会在更前面
![[Pasted image 20240415223745.png]]

原本在底下的精灵节点,将index改为1,比另一张0的大,变为显示i在上面
这个z_index是三维方向的,场景对于屏幕方向有一个z轴,z越大往屏幕越近,显示在最上面

当这两个节点称为父子关系时
![[Pasted image 20240415224049.png]]

这个z_as_relative是默认启用的
如果父节点的z_index值是1
那么子节点z_index虽然显示是0
但是因为z_as_relative是勾选上的,就相当于是0+1,其实也是1,和平常的父子节点显示没有区别,子节点在父节点上面,因为就是相对的一个关系
如果不想弄成相对位置,就把z_as_relative勾掉,这样父节点就到了子节点上面了

Node2D节点

  • Node2D节点,Node2d -> CanvasItem -> Node
    ![[Pasted image 20240415222926.png]]

Node2D节点继承于CanvasItem节点,CanvasItem节点继承于Node节点,所以Node2D节点包括了CanvasItem节点和Node节点的所有功能

![[Pasted image 20240415223145.png]]

Transform ,Node2d节点的基本属性,在后面的脚本编程中,Transform属性是最常用的
表示:

  • Position 位置
  • Rotation 旋转
  • Scale 缩放

自定义节点

  • 当发现现有的节点无法支持新的需求的时候,有两种方法去解决,自定义节点或者自定义脚本,核心都是脚本
  • 创建GdScrip脚本,叫MyNode,继承Node2D节点,并自定义节点的icon
@icon("res://icon.svg")

extends Node2D

class_name MyNode

func _ready():
	print("my custom node")
	pass
  • 编写脚本,定义变量,编写代码
@export var a: int = 1
@export var b: String
  • 保存,如果不保存无法看到我们创建到的节点,这一点需要特别注意
  • 添加刚刚创建的自定义节点
    ![[Pasted image 20240415224824.png]]

![[Pasted image 20240415224831.png]]

有两个变量a和b就是刚才脚本里定义的变量
![[Pasted image 20240415224950.png]]

输出my custom node

![[Pasted image 20240415225103.png]]

  • class_name 表示自定义节点的名称
  • @icon 表示使用的icon
  • 7、8行是定义的两个变量,并让这两个变量导出,可以在外部编辑器使用
  • 11行代码,输出变量
  • 3行,继承Node2D节点

节点继承

  • 通过继承现有节点,来改变已有节点的功能
  • 无论是自定义节点还是节点继承,核心都通过脚本控制达到自己想要的效果
    MyNode节点继承自Node2D节点,项目中看到就是这个节点多了两个变量,Node2D的某些功能被拓展了
    ![[Pasted image 20240415225717.png]]

将MyNode脚本修改
![[Pasted image 20240415225844.png]]

改为继承Sprite2D节点,让region_enabled默认等于true
region_enabled是在Sprite节点中定义的
继承了Sprite过后,就可以重写Sprite的功能

如何通过脚本去改变节点的功能

新建一个my_script节点
![[Pasted image 20240415230219.png]]

同样修改脚本
![[Pasted image 20240415230248.png]]

然后将这个脚本挂载到Sprite节点的脚本属性上
就改变了Script的现有功能

Godot后期处理概述:一组着色器和一个自定义相机节点,可轻松将后期处理轮廓集成到您的游戏中。 适用于2D和3D游戏 Godot发布流程大纲 这是Godot Engine的附加组件,其中包括两个着色器和一个自定义相机节点,可轻松在2D和3D游戏中使用基于后处理的轮廓(尽管它们通常在3D游戏中使用较多)。 这些是我用来在我自己的Godot游戏中获得大部分轮廓的相同着色器和相同方法: Windward Rush ,您可以在下面看到(并在Twitter上进行更新: : )。 为什么要使用后处理轮廓? 我经常看到的建议在Godot中绘制轮廓的方法通常是以下方式的一种变化:在材质上添加额外的绘制通道,以纯色的正面剔除来绘制对象的稍大版本。 这在很多情况下都有效,并且在Godot中非常容易实现,但是有一些限制。 首先,这取决于所使用的模型及其法线的设置方式,可能会导致伪影,例如下图中所示的伪影,其中轮廓线不接触。 有时,可以通过使用MeshInstance节点中的“ Create Outline Mesh.. 立即下载

相关推荐

Linux 隐藏进程

这种方式属于DKoM(Direct Kernel Object Manipulation)攻击方式了,即直接内核对象操作技术。关于第一种hook方式可以参考上一篇文章。最后推荐一个rootkit工具。

chi's blog 2051

【Godot4.2】自定义简单的参数化2D网格节点

在某些情况下我们可能需要在Godot中自定义2D网格,因为此时可能用TileMap会显得太“重”,因为我们可能只需要其作为网格的功能却不需要它的其他功能,比如绘制瓦片地图。而且我们可能需要在网格功能的基础上,添加更多自定义的内容。本篇就介绍如何通过几个简单的参数定义2D网格,以及用CanvasItem的绘图函数来在Control或Node2D上显示网格。最后,我们可以将其抽象为一个简单的自定义节点Grid2D,以便于在多个场景或多个项目中重复使用。定义一个2D网格,只需要2个参数,grid_size和。

巽的博客 3348

Windows系统下LaTeX环境搭建与编辑器配置全攻略

本文详细介绍了在Windows系统下搭建LaTeX环境的完整流程,包括TeX Live的安装、TeXStudio编辑器的配置优化以及常见问题排查。特别针对中文用户推荐使用清华镜像源加速下载,并提供了XeLaTeX编译器配置、中文支持等实用技巧,帮助用户快速上手LaTeX文档编写。

weixin_42554408的博客 449

【Godot4.2】文件系统自定义控件 - FileSystemTree

在Godot设计编辑器插件或应用程序时,可能需要涉及文件系统的显示,比如文件夹或文件的树形列表。我们可以用Godot的Tree控件快速书写相应的功能,但是为了复用到不同的项目,最好是设计为自定义节点。FileSystemTree就是一个专门显示文件夹结构的树控件,扩展自Godot的Tree控件。基于Godot4.2版本实现。

巽的博客 1259

从零开始VCS+Verdi 安装过程

从零开始VCS+Verdi 安装及破解过程 主要参考:VCS+Verdi 安装及破解过程(CentOS7)-----FPGA开发 1. 安装文件结构 –vcs-mx_vL-2016.06 –verdi_vL-2016.06-1 –scl_v11.9 #此程序统一管理license等破解文件 –SynopsysInstaller.rar #此程序用于安装以上3个程序 –sc...

Ztrans的博客 2万+

pwscf与wannier90 Hands-On实战训练(一)——费米面计算为例

系列文章目录 Quantum Espresso Hands-On实战训练(三)——DOS计算 文章目录系列文章目录计算过程pwscf直接得到等能面pwscf和wannier90得到等能面pwscf直接得到等能面1. scf2. nscf3. 后处理pwscf和wannier90得到等能面1. Kpoints2. scf3. nscf4. pw2wan及wannier90.x5. XCrySDen可视化 计算过程 pwscf直接得到等能面 pwscf和wannier90得到等能面 pwscf直接得到等能面

weixin_45973682的博客 5070

Godot扩展开发:自定义节点与工具脚本编写指南

在Godot游戏引擎中,扩展开发是提升开发效率的关键技能。通过自定义节点(Custom Nodes)和工具脚本(Tool Scripts),开发者可以创建可重用的组件、编辑器扩展和自动化工具。本文将深入探讨Godot扩展开发的核心概念和实践技巧。 ## 自定义节点开发 ### 基础自定义节点 Godot中的自定义节点通过继承现有节点类来实现。以下是一个基础的自定义玩家节点示例: ```gd...

gitblog_01152的博客 1222

【推荐100个unity插件】基于节点的程序化无限地图生成器 —— MapMagic 2

MapMagic 2是一款基于节点的程序化地形生成工具,可快速创建无限地图。主要功能包括:通过图形化节点编辑器构建地形逻辑;支持四个核心模块(对象、样条线、生物群落和笔刷);提供完整的操作指南,包括创建资产、使用编辑器窗口、节点操作等。工具具有直观的UI界面,支持节点连接、参数调整、图层管理等功能,并能实时生成地形。适合游戏开发者快速构建高质量的可玩地形环境。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3121

Godot 动态获取子节点的属性导出到父节点的面板上,并可以同步修改

Godot 3.2.3 GDScript 1.0 可以动态获取子节点的自定义的导出到面板中的变量,显示到当前的属性面板中,并可以同步修改,就是修改导出到这个节点的属性,也会修改对应子节点的这个属性 代码如下: """===================================================================== PropertyList ===========================================================.

qq_37280924的博客 2943

【阿里AgentScope框架】多框架组合:AgentScope加LangChain,让你的开发效率直线上升

本文以一个例子来看下AgentScope框架和LangChain如何实现融合使用,真的超级简单,一看就懂。这是一种思路,为多种框架的融合使用提供借鉴。

同学小张的博客 3471

Autosar Dcm配置-App到Boot的跳转及1002回复配置及实现-基于ETAS软件

在软件刷写流程中,上位机(诊断仪)发送1002后,APP检查允许跳转boot后,在特定的ram(软复位不清除)写入指定置后通过触发软件复位来跳转到boot的。在APP跳转到Bootloader时,1002的回复有两种方式,一种是APP直接回复,然后跳转,另一种是APP回复NRC78,然后跳转,在Boot中回复。本文介绍这两种方式的实现。如果是在APP中回复,可以少发一个0x78,整体跳转时间可能会少一些。但是如果诊断在收到5002之后立马请求其他的服务,可能出现boot正在初始化而未正常接收到报文。

赞的博客 1556

【Godot4.2】CanvasItem绘图函数全解析 - 7.自定义节点TextBoard

之前发布的几篇文章几乎阐述了CanvasItem绘图函数最基础的内容。本篇结合和类,自定义了一个可以自适应宽高显示多行文本,且带有一个样式盒作为背景的文字板节点TextBoard。

巽的博客 799

扣子Coze工作流教程:采集公众号爆文,一键仿写自动发布

通过本教程,你学会了如何利用扣子(Coze)平台构建一个完整的公众号文章自动处理工作流。这个系统不仅能够大幅提升内容产出效率,还能通过AI二创保持内容新鲜度和原创性。最佳实践建议:初次使用时,建议先保存为草稿而不是直接发布,以便人工审核;从简单的工作流开始,逐步增加复杂度;定期检查工作流运行日志,优化节点配置。自动化内容创作是新媒体运营的未来趋势,掌握这项技能将使你在数字内容领域占据显著优势。

互联网架构师笔记 1238

Godot引擎 4.0 文档 - 循序渐进教程 - 节点和场景

节点和场景在中,我们看到 Godot 游戏是一棵场景树,每个场景都是一棵节点树。在本课中,我们将对它们进行更多解释。您还将创建您的第一个场景。

drgraph的博客 3414

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Godot4.3】自定义简易菜单栏节点ETDMenuBar

Godot中的菜单创建是一个复杂的灾难性工作,往往无从下手,我也是不止一次尝试简化菜单的创建。从自己去年的发明“简易树形数据”用于简化Tree控件获得灵感,于是尝试编写了用于表示菜单数据的类,以及对应的纯文本数据格式和对应的MenuBar控件扩展ETDMenuBar。于是乎,你只需要在创建菜单栏时,添加一个ETDMenuBar控件,并为其data属性指定符合规定的简易数据,以及图标集。便可以轻松设计和获得复杂层次的菜单,以用于你创建的Godot桌面程序。其实对应的是单个PopupMenu。

巽的博客 1141

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【Godot4.2】CanvasItem绘图函数全解析 - 1.绘制简单图形

本节通过实例来简单讲解CanvasItem绘图函数中用于图形绘制的一些函数。其他内容可以查看系列相关文章。

巽的博客 2776

Node2D

Node2D 节点介绍。

m0_52880224的博客 2109

Godot Orchestrator高级进阶:自定义节点开发与插件扩展全攻略

Godot Orchestrator作为Godot Engine 4.x的可视化脚本解决方案,为开发者提供了强大的节点编辑与逻辑编排能力。本文将带你深入探索自定义节点开发与插件扩展的完整流程,从基础原理到实战案例,助你打造专属的可视化编程工具链。 ## 一、自定义节点开发基础 ### 1.1 节点开发核心架构 自定义节点是扩展Orchestrator功能的基础,所有节点都基于`OScriptN

gitblog_00337的博客 766

【Godot4.2】CanvasItem绘图函数全解析 - 5.绘制字符和字符串

到这一节为止,我们已经学习了如何在CanvasItem中绘制简单几何图形、图片以及样式盒。但是对于很重要的文字一直没有涉及。本节就来讲一下字符和字符串绘制函数,以及替换它们的两个类。本节简要讲述了CanvasItem内置的字符和字符串绘制函数及其缺点然后讲述了更好用的TextLine和,用于绘制单行和多行文本。实际上TextLine和好有很多特性和功能,可以让我们轻松实现很多东西。但是篇幅所限,留到下节。对于文本绘制的综合使用,也会专门留几个案例,也是相当有趣。

巽的博客 2017

godot所有2D节点介绍

50个Godot Node2D节点介绍

watch361的博客 6549

画布项目着色器(CanvasItem shaders):Godot的2D着色器

译者注:直译为***画布项目着色器***下文中将意译成2D着色器 画布项目着色器(CanvasItem shaders) 2D着色器用于绘制Godot中的所有的2D元素,包括所有继承于CanvasItem的节点以及所有的GUI元素。 相对于3D着色器,2D着色器要简单一些,内置函数也比较少,但是2D和3D着色器的基础结构是相同的,都包顶点函数(vertex),片元函数(fragment)及光(light)函数 渲染模式画布元素 渲染模式 描述 blend_mix Mix blend mode (alpha

开发游戏的老王 2287

Godot导出Windows版本图标未更换的问题

用Godot Editor导出项目的Windows版本,虽然设置了rcedit工具和自制的Windows程序图标,但是导出的项目可执行文件的图标并没有被更换。

feiyunw的专栏 1481

【Godot4.2】CanvasItem绘图函数全解析 - 2.设定绘图变换

上一节我们讲了如何使用绘图函数绘制常见的几何图形。在末尾绘制椭圆部分,我们简单涉及到了也就是变换的内容。关于变换的内容可以参考我即将发布的文章。这里我暂时认为你已经比较了解线性变换的本质以及如何构造、使用旋转缩放和平移变换。对2D几何图形,施加2D变换,是一个非常基础的内容,但是也很重要。通过构造几何中心在原点的图形,比如单位圆单位矩形,我们就可以通过对其施加旋转、缩放以及平移变换来获得任意的圆、椭圆以及矩形通过设定绘图变换,可以简化图形的绘制操作。

巽的博客 1296

【Godot4.2】CanvasItem绘图函数全解析 - 3.绘制纹理

前两节我们讲述了常见几何图形绘制以及对几何图形应用变换的基础知识。本节我们来讲如何在CanvasItem中绘制纹理。我们通过设定一个名叫texture的导出变量来接收从文件系统和监视器面板设定的图片。然后在_draw()中使用原样绘制出来。@toolset(val):# 绘制texture参数指定的纹理本节内容比较简单,主要涉及绘制纹理相关的3个函数。通过这3个函数,能实现很多自定义节点或绘图时的功能需要。

巽的博客 2004

Godot引擎 4.0 文档 - 手册 - 2D

¶这是对节点从本地绘制内容到绘制到屏幕上进行的 2D 变换的概述。本概述讨论了引擎的非常底层的细节。¶通常需要将自定义输入事件提供给场景树。有了以上知识,要正确地做到这一点,必须按照以下方式进行:GD脚本C#varvar二维灯光和阴影¶¶默认情况下,Godot 中的 2D 场景是无阴影的,没有可见的灯光和阴影。虽然渲染速度很快,但未着色的场景可能看起来很平淡。Godot 提供了使用实时 2D 光照和阴影的能力,这可以极大地增强项目的深度感。没有 2D 灯光或阴影,场景没有阴影¶启用 2D 灯(无阴影)

drgraph的博客 7163

【Godot】CanvasItem

绘制一个红色矩形CanvasItem是 Godot 2D 系统的核心类,提供了 2D 渲染、变换、绘制和输入处理等功能。它是Node2D和Control等类的基类,广泛应用于 2D 游戏和 UI 开发中。通过CanvasItem,开发者可以实现复杂的 2D 图形和交互效果。

Octopus2077的博客 1514
上一篇: 3.MMD快捷键操作及人物绑定配饰
下一篇: 9.Hexo通过partial文件传值和改变CSS属性
ChoSeitaku
博客等级 码龄5年 3452粉丝 557原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值