![](https://img-blog.csdnimg.cn/20191019203558674.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Godot 实践
Godot游戏引擎的杂文集,包括BUG排除等
开发游戏的老王
技术专栏作者
独立游戏开发者
高校教师
Unreal Open Day 2022演讲嘉宾
Unreal Cirle2023苏州站演讲嘉宾
Unreal Cirle2024成都站演讲嘉宾
展开
-
程序员用12小时复刻《羊了个羊》,代码已开源!
原文交由CSDN并由CSDN官方公众号和CSDN资讯首发,所以这里附个链接(见下方)。原创 2022-09-20 17:02:52 · 1824 阅读 · 11 评论 -
Godot Engine:用着色器实现通过开关隐藏部分模型
使用情景代码很简单。这个着色器可以用在动画的开发流程中,比如游戏角色要持各种枪,在Blender中作动画时,可以给手上添加一个临时的简模(一个Cube)当作枪,这样比较方便做动画,这个简模上使用下面的着色器材质。在游戏运行时,将它隐藏掉,真正的枪则通过BoneAttachment动态添加上去。这样就非常灵活了。着色器shader_type spatial;uniform bool is_hide = false;void fragment(){ if(is_hide){ ALPHA =原创 2020-11-09 20:26:37 · 788 阅读 · 0 评论 -
Godot Engine:街霸隆的动画(Idle/波动拳/升龙拳)导入步骤以及运行时的简单动画切换
文章目录效果展示0. 动画准备Idle动画波动拳升龙拳1. 导出模型与动画1.1. 隐藏不必要的集合1.2. 以glTF格式导出2. 导入Godot Engine3. 模型提取以及动画数据的提取与加载3.1. 模型提取3.2. 动画提取及加载3.3. 动画加载3.4. 动画设置设置默认动画设置循环动画4. 场景搭建5. 简单的动画切换效果展示0. 动画准备Idle动画波动拳升龙拳1. 导出模型与动画这三个动画全是用的同一个绑定,下载地址见Blender Rigify版街霸角色隆(Ry原创 2020-10-25 11:26:15 · 1664 阅读 · 0 评论 -
Godot Engine:格斗游戏中的必杀技(大招/绝招/特殊技/Special Move )输入系统实现
前言必杀技系统是格斗游戏中必不可少的元素,要触发角色的必杀技,必须在一个很短的时间内,准确无误地输入一个按键序列,比如下表中街霸角色隆的部分必杀技:波动拳 下,前,拳升龙拳前,下,前,拳在上表中不难发现波动拳的下,前,拳是升龙拳前,下,前,拳的子序列原创 2020-10-24 18:11:23 · 2765 阅读 · 9 评论 -
Godot Engine:布娃娃系统(Ragdoll System)及物理骨骼(PhysicalBone)的工作流程
文章目录0. 模型准备1. 配置物理骨骼2. 编写脚本3. 测试运行0. 模型准备在Blender完成建模及蒙皮,以glTF格式导出模型(Boy.glTF)1. 配置物理骨骼Boy的默认场景结构如下选择Skeleton并创建物理骨架Godot会在Skeleton为我们生成和模型骨骼对应的Physical Bone子节点2. 编写脚本在Boy节点上添加一个脚本#Boy.gdextends Spatialfunc _process(delta): if Input.is_k原创 2020-09-09 22:11:12 · 2593 阅读 · 0 评论 -
Godot Engine:用BoneAttachment节点为骨骼附加物
BoneAttachment是一个非常重要的节点,使用它可以在游戏运行时,动态地为骨骼添加附加物体,比如可以动态拾取场景中的物件(从地上捡个武器呀道具呀什么的),并使其成为骨架中某根骨头的子物体。本文将用一个小案例来介绍它的使用方法原创 2020-09-07 12:23:08 · 1054 阅读 · 4 评论 -
Godot Engine:gitignore设置
Godot项目目录比较简单.import是默认产生的文件夹,Godot导入外部文件产生的文件都存在这里local_only是自建的文件夹,不打算放到git管理中的所有文件都放到这里原创 2020-08-12 16:54:35 · 806 阅读 · 0 评论 -
Godot Engine:属性面板(检视面板)插件(Inspector plugins)
参考官方文档《Inspector plugins》在Godot中属性面板(检视面板)插件(Inspector plugins)是一种特殊编辑器插件创建步骤1. 创建plugin.cfg2. EditorPlugin脚本3. EditorInspectorPlugin脚本4. EditorProperty脚本1. 创建plugin.cfg这一步和普通的编辑器插件一样,请见《Godot Engine:编辑器插件(Editor Plugin)开发 之 Hello World》2. EditorPlu.原创 2020-08-03 21:11:53 · 1136 阅读 · 0 评论 -
Godot Engine:编辑器插件(Editor Plugin)开发 之 添加一个编辑器按钮
文章目录新建按钮EditorPlugin脚本效果新建按钮编辑器按钮的创建方式和普通按钮完全一致按钮的脚本,注意一定要加上 tool,这样才可以在编辑器中执行toolextends Buttonfunc _enter_tree(): connect("pressed",self,"_on_btn_click") func _exit_tree(): disconnect("pressed",self,"_on_btn_click")func _on_btn_click(): pr原创 2020-07-31 17:56:03 · 1026 阅读 · 0 评论 -
Godot Engine:用Sprite3D在3D场景中的实现一个简易的头顶血条(Shader版)
在《Godot Engine:用Sprite3D在3D场景中的实现一个简易的头顶血条(Animation)》介绍了一种使用Sprite3D来实现头顶血条的方法,实际上该方法的关键是使用AnimationPlayer来控制Sprite3D的大小。本文再介绍一种基于Shader的。步骤1. 血条的图片2. 节点结构注意:启用Sprite3D的Billboard这样无论Player如何转向,血条永远朝向摄像机。3. 编写Shader为Sprite3D新建ShaderMaterial并编写其Shad原创 2020-07-29 21:26:25 · 884 阅读 · 3 评论 -
Godot Engine:编辑器插件(Editor Plugin)开发 之 Hello World
Godot Engine 3.2.3.rc1文章目录步骤1. 创建插件框架2. 创建UI3. HelloWorld脚本演示之前写过一篇博文《GDScript:使用EditorScript开发简单的编辑器脚本》,编辑器脚本(EditorScript)只提供了一个run方法,它的访问能力也很有限,所以只能实现一些非常简单的功能,编辑器插件(Editor Plugin)就强大太多了,可以访问场景树,访问编辑器UI,甚至可以直接使用Godot的UI系统创建插件的UI步骤1. 创建插件框架在项目设置(P.原创 2020-07-28 21:34:57 · 1510 阅读 · 0 评论 -
手把手教你从源代码构建Godot Engine(三)编译引擎
终于到了激动人心的编译阶段了!Godot的编译还是非常方便快捷的,大家可以自己试一试!原创 2020-07-22 20:02:33 · 3635 阅读 · 2 评论 -
手把手教你从源代码构建Godot Engine(二)接入第三方模块Steam SDK,Spine Runtime等
概述第二部分将介绍如何接入自定义模块或第三方模块,其中Steam SDK和Spine Runtime是我项目中要使用的模块。如果你不需要它们,可以直接跳过此部分。如果你要接入其它模块,它们的原理大体相同。细节上按照模块的说明操作即可。原创 2020-07-22 16:29:34 · 3170 阅读 · 0 评论 -
手把手教你从源代码构建Godot Engine(一)构建工具安装
为什么要通过源代码构建Godot Engine?如果只是在Godot编辑器做些Demo玩玩或者用官方提供的模板导出一个Windows或者安卓项目,完全没必要自己构建Godot。但是如果有下面的情况基本上躲不开这一步了: 需要修改Godot的源代码或者自定义模块需要接入一些第三方模块,比如Steam或者Spine等第三方模块原创 2020-07-22 14:09:51 · 3078 阅读 · 0 评论 -
Godot Engine:使用DragonBones骨骼动画
在Godot使用DragonBones(以及Spine),一种方式是使用它们导出的图集atlas,第二种方式就是导出动画文件通过运行时库直接在游戏运行时解析。两种方式各有利弊,前者比较傻瓜,但是需要重新编辑,并且如果动画较多,也会比较占用空间;后者非常高效,但是需要运行时库的支持。原创 2020-07-20 19:09:29 · 3298 阅读 · 3 评论 -
Godot Engine:多重采样抗锯齿(MultiSampling Anti-Aliasing)设置
Godot Engine 3.2.2默认状态下Godot渲染的锯齿很严重解决办法:开启MSAAMSAA是MultiSampling Anti-Aliasing的英文缩写,指多重采样抗锯齿,原理是寻找出物体边缘部分的像素,然后再把画缩放到当前的显示器上。数值越大抗锯齿效果越好,当然系统压力也越大开启后的效果...原创 2020-07-19 18:35:13 · 2682 阅读 · 0 评论 -
UE4、Unity以及Godot的一些参数对比(更新中)
比较UE4、Unity以及Godot的一些参数原创 2020-06-09 16:37:47 · 7201 阅读 · 0 评论 -
Godot Engine:用Shader实现旗帜飘飘的效果
本文是《【手把手带你Godot游戏开发 第二弹】名场面临摹》的一部分。老王将手把手教大家如何使用Godot引擎的Shader,实现一个游戏中常见的旗帜飘飘的效果。原创 2020-05-01 20:59:51 · 2942 阅读 · 1 评论 -
Godot Engine:4.0版的Shader即将支持全局和实例uniform类型,更多玩法即将解锁!
在Godot Shader中uniform类型是逻辑代码(GDScript等)与着色器代码(Shader)传递数据的必经之路。截至目前Godot Shader中的uniform都隶属于每个独立的材质实例,也就是说,即使你的很多2D节点或3D节点都是用相同的材质,你用uniform传一个参数,也...原创 2020-04-18 11:51:10 · 2002 阅读 · 0 评论 -
Godot Engine:如何把你游戏中的Sprite、UI以及3D模型变成灰色
本文介绍了如何使用Godot的Shader将游戏的Sprite、UI以及3D模型变成灰色原创 2020-04-04 13:32:18 · 1324 阅读 · 0 评论 -
Q&A:Godot Shader中的uniform和varying有什么关系和区别?
刚有朋友问我一个问题,在此解答一下,希望能够帮助更多人,如有错误敬请指正!Q&A问:“Godot Shader中的uniform和varying有什么关系和区别?”答:相同的地方是:它们都是用来传递数据的。不同的地方是:uniform用于逻辑语言(GDScript/C#等)和着色器之间传递数据。注意:这个传递是单向的,即只能由逻辑语言传给着色器,反之不行。范例:《[手把手...原创 2020-03-31 20:56:58 · 1585 阅读 · 0 评论 -
【手把手带你Godot游戏开发】FlappyBird:4.3无限地面之文艺青年(shader)版
本章节效果图原理这种方法是通过Shader的UV动画实现的步骤重新导入素材shader_type canvas_item;render_mode unshaded;uniform float speed : hint_range(0.00,1.00) = 0.0;void vertex(){ UV.x += speed*TIME;}...原创 2020-03-06 21:13:59 · 2978 阅读 · 11 评论 -
Godot Shader :在一个面片上让鼠标滑过的地方凸起
今天一个朋友问的Unity问题,我试着用 Godot的 Shader实现一下。用Unity实现的话,原理是相同的效果展示如果要凸起更圆润的话,增加面片的细分就可以,代码部分应该可以优化,坐标运算搞得自己头晕了GDScript部分extends Cameraconst ray_length : int = 1000func _input(event): if event is InputEventMouse:...原创 2019-12-24 21:46:41 · 1209 阅读 · 0 评论 -
Godot特效:纯Shader实现3D手绘风火焰
效果图火焰颜色可以可以自定义原理这个效果的核心实现来自Gonkee的Github,原版是2D的,我把它改成了3D版的,注意下面几点:将render_mode设置为unshaded,目前这个火焰只是装饰性的,不能自发光实现billboard还要再添加一个灯光用作实际照明...原创 2019-12-13 16:23:56 · 1475 阅读 · 2 评论 -
Godot Shader:在3D中实现BillBoard效果
让模型的正方向永远朝向摄像机在顶点着色器中加入下面的矩阵运算即可void vertex(){ MODELVIEW_MATRIX = INV_CAMERA_MATRIX * mat4(CAMERA_MATRIX[0],CAMERA_MATRIX[1],CAMERA_MATRIX[2],WORLD_MATRIX[3]);}...原创 2019-12-13 16:12:34 · 1241 阅读 · 0 评论 -
Godot Shader:无需建模用一张图片在Godot中生成一座山
原理类似置换贴图,只不过还想借助生成的高度区分出海面山体以及山顶的树木但效果不理想。没有办法像Blender那样在材质层次混合,要实现PBR效果只能靠引入大量的材质贴图。下面简述一下制作的思路效果图1. 在Godot中新建一个Plane的MeshInstance增加细分2.贴图制作一张Perlin Noise一张遮罩把噪声和遮罩以类似相乘的方式叠加一下3.着色器代码shader_type spatial;uniform sam.原创 2019-12-10 20:00:16 · 2102 阅读 · 0 评论 -
用Godot制作冲击波特效
Godot Engine 3.1.2在油管上看到讲述该特效的教程,我自己写的Shader效果图1. 建模2. 展UV3. 特效贴图4. 着色器代码shader_type spatial;render_mode cull_back,unshaded;uniform float speed = 1.0;uniform sampler2D tex : hint_albedo;void vertex(){ UV +=原创 2019-12-08 12:33:50 · 1101 阅读 · 0 评论 -
粒子着色器
原文地址:Docs » Shading » Shading reference » Particle shaders粒子着色器(Particle shaders)粒子着色器是一种在物体被绘制之前就执行的特殊顶点着色器。它们被用于计算材质的属性,例如颜色,位置,旋转等。它们可以使用各种(2D,3D)标准着色器进行绘制,这依赖于它们自身是2D还是3D。粒子着色器是独一无二的,因为它们并非用于...翻译 2019-09-01 12:08:14 · 790 阅读 · 0 评论 -
画布项目着色器(CanvasItem shaders):Godot的2D着色器
译者注:直译为***画布元素着色器***下文中将意译成2D着色器2D着色器(CanvasItem shaders)2D着色器用于绘制Godot中的所有的2D元素,包括所有继承于CanvasItem的节点以及所有的GUI元素。相对于3D着色器,2D着色器要简单一些,内置函数也比较少,但是2D和3D着色器的基础结构是相同的,都包顶点函数(vertex),片元函数(fragment)及光(li...翻译 2019-09-01 11:28:41 · 1317 阅读 · 0 评论 -
Godot着色器语言
引言Godot 使用的了一种非常接近GLSL ES 3.0的着色器语言,并且支持其绝大多数的数据类型和函数,尚未完全支持的部分也会逐渐增加进去。如果你对GLSL熟悉的话,可以直接阅读 《Godot Shader Migration Guide》 以帮助你从标准GLSL过渡到Godot Shader。数据类型支持绝大多数GLSL ES 3.0数据类型:类型描述void...翻译 2019-09-01 11:25:29 · 2009 阅读 · 0 评论 -
Godot着色器基础
原文地址:Docs>Shading>Shading reference>Shaders简介着色器是一种运行在GPU上的独特程序。它们会决定如何拾取网格模型的数据(诸如顶点位置,颜色,法线等)以及如何将它们绘制到屏幕上。着色器的工作原理与普通的程序区别很大,因为着色器是按照进行GPU的工作原理优化过的。一个直接的影响就是:当着色器执行完毕后不会保留任何数据;它们将最终颜色输...翻译 2019-09-01 10:16:15 · 1688 阅读 · 0 评论 -
Godot Shader特效:自定义Shader实现3D描边(outline)效果
上篇笔记《Godot Shader特效:3D描边(outline)效果 原理篇》介绍了Godot实现3D描边的原理,该文中是用Godot自带的SpatialShader通过调整参数实现的,由于这个效果在3D游戏中还是很常用的,所以干脆自己写了一个专用Shader,非常简单。把它添加到材质上并作为一个Next Pass,就可以实现描边了。shader_type spatial;render_...原创 2019-09-01 10:08:45 · 1984 阅读 · 1 评论 -
Godot Shader特效:3D描边(outline)效果 原理篇
本教程参考了油管上Dave the Dev的教程How to outline a 3D object in Godot _ Game Dev Tutorial 4,感谢大神们无私的奉献!先看效果图注:这次实现全部使用Godot自带的材质和Shader原理Godot的材质系统为每一个材质提供了一个**Next Pass属性,该属性的作用就是给材质提供一个次级材质,通过Next Pass...原创 2019-09-01 10:07:21 · 2777 阅读 · 3 评论 -
Godot Shader特效:用SCREE_TEXTURE实现简单的屏幕滤镜
用SCREEN_TEXUTE实现一个简单的屏幕滤镜。效果图代码如下shader_type canvas_item;void fragment(){ vec4 pixel = textureLod(SCREEN_TEXTURE,SCREEN_UV,0); COLOR.rgb = vec3((pixel.r + pixel.g + pixel.b) /3.0);}获取屏幕截...原创 2019-09-01 10:05:38 · 1403 阅读 · 0 评论 -
Godot Shader特效:UV旋转动画
实现这个效果,用GDScript的话只要一行代码就可以解决;用Shader做的话需要一些线性代数知识,扩展性相对差一些,不过如果像逻辑和表现解耦合或者减少CPU运算的话可以考虑这个实现方式效果图代码如下shader_type canvas_item;render_mode unshaded;uniform float pivot_x : hint_range(0.01,0.99) ...原创 2019-09-01 10:04:37 · 1197 阅读 · 0 评论 -
Godot Shader特效:用Shader实现循环滚动背景
循环滚动背景是游戏中常用的效果,实现方式有很多,比较传统的方式是用2个Sprite同步运动来实现;Godot还提供了一个ParallaxBackground节点也可以实现这个效果;实际上用Shader也可以很简单地实现这个效果,并且还可以简化场景节点结构以及表现和逻辑的结耦合。效果图实现方式首先要对用作背景的图片启用repeat模式代码如下shader_type canvas_i...原创 2019-09-01 10:02:37 · 1910 阅读 · 0 评论 -
内置卡通风格着色器
Godot内置了一种卡通风格的着色器,确切地说是着色器的卡通渲染模式,可以很方便地将渲染效果设置为卡通风所谓卡通风格其实主要是针对光线而言的:漫反射光色彩更加扁平化镜面反射光亮部和暗部的衔接处更加硬设置非常简单,把SpatialShader的Diffuse Mode和Specular Mode都设置为Toon就可以了...原创 2019-09-01 08:12:18 · 619 阅读 · 0 评论 -
为uniform变量添加hint类型提示
Godot官方对于hint的介绍非常简单:"Additionally, Godot provides optional shader hints to make the compiler understand for what the uniform is used"然后给出了简单的范例和可用hint列表。按照官方文档的说法Godot Shader的hint主要是针对编译器(Compile...原创 2019-09-01 08:08:17 · 635 阅读 · 0 评论 -
Godot Engine:马里奥食人花三部曲(三)用SkeletonIK实现食人花捕食目标
书接上文《Blender图解教程:马里奥食人花三部曲(二)骨骼绑定和动画》,这一回我们将进入Godot游戏引擎,完成最关键的部分,当目标(马里奥)接近食人花,食人花可以根据目标的位置进行捕食效果图文章目录效果图步骤1. 模型导入Godot Engine2. 构造场景3. 设置SkeletonIK4. 测试5. 运行时实现步骤1. 模型导入Godot Engine将从blender导...原创 2020-04-30 16:31:38 · 2652 阅读 · 0 评论 -
Godot Engine:用call_deferred线程安全地调用一个方法
目录BUG版本:修复版本:在我的[手把手带你Godo游戏开发]第一弹FlappyBird教程中,有这样一段代码BUG版本:# Bird.gdextends RigidBody2Dfunc _ready(): connect("body_entered",self,"on_body_entered")func _physics_process(delta): if Input.i...原创 2020-04-03 16:47:49 · 3786 阅读 · 2 评论