Godot 基础
文章平均质量分 57
Godot游戏引擎的一些基础知识
开发游戏的老王
技术专栏作者
独立游戏开发者
高校教师
Unreal Open Day 2022演讲嘉宾
Unreal Cirle2023苏州站演讲嘉宾
Unreal Cirle2024成都站演讲嘉宾
展开
-
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 · 2518 阅读 · 0 评论 -
你的第一个2D Shader(CanvasItem Shader)
原文地址:Docs » Shading » Your first shader » Your first CanvasItem shader导论本教程将从实践的角度手把手教你写一个包含vertex函数和fragment函数的Shader。本教程完全面向初学者。注意:如果你有编写Shader的经验或者仅仅是想Godot Shader的工作概要,请阅读《Shader手册》准备工作2D Shader(CanvasItem Shader)被用于绘制Godot中的所有2D对象,3D Shader(S.翻译 2020-09-03 21:36:27 · 848 阅读 · 0 评论 -
Godot Engine:选择Skeleton节点时出现不停输出“object was deleted while awaiting a callback”并死机问题
Blender 2.83.4Godot Engine 3.2.3 rc3问题描述在Blender中使用Rigify绑定了一个角色模型并做了简单的测试动画,以glTF格式导入到Godot中。运行动画倒是没有问题。只不过一选择编辑器中的Skeleton节点必死机这是死机时后台的输出情况产生原因这是Godot自己的BUG,主要是由于骨骼过多造成的,GitHub上相关问题有很多,目前还没有解决。解决办法老王转念一想,我的角色很简单,那用得了这么多骨骼,一检查才发现,导出时把所有骨骼都导出来.原创 2020-08-11 16:57:41 · 683 阅读 · 2 评论 -
Godot Engine:动画资源导入/导出
文章目录概述导出导入概述老王一般是使用Blender来制作游戏动画,Blender很强大但是在动画片段管理这方面有点迷(也可能是我没研究明白的原因),就是动画片段和片段之间经常出现莫名其妙的“干扰”。所以在Blender-> Godot工作流中,可以采取另外的办法,就是:每个Blender文件只做一个动画,然后将模型以 glTF格式导入Godot中,然后再用Godot的动画导入导出功能来管理它们。导出这样我们就得到了独立的动画资源,动画资源是可以在相同的骨架之间复用的导入...原创 2020-08-11 10:10:57 · 2071 阅读 · 0 评论 -
Godot Engine:GDScript 4.X中语法的变化(2020年8月4日 更新)
文章目录4.X版 GDScript范例支持注解属性(Properties)的定义格式await关键字代替yield加入super关键字去除了多级调用问题小结4.X版 GDScript范例支持注解从4.x开始,GDScript将支持类似JAVA一样的注解机制,同时一些3.X时期存在的关键字将改用注解的方式。比如比较常用的export关键字,它会由一系列的注解来代替,比如用上面范例中的@export_range实现限定变量范围。并且,从4.x彻底不需要用类似export(int)的形式声明类型了,系统会原创 2020-08-05 17:18:56 · 5044 阅读 · 1 评论 -
Godot Engine:那些从其它引擎(工具)中借来的设计
从Blender中借来的导航操作平移Shift + 中键缩放鼠标滚轮旋转视图中键从Unreal中借来的飞行模式: 按住鼠标右键 + A/S/D/W放置到地面:选中对象然后按PAGEDOWN从Unity中借来的Camera的Aligin With View...原创 2020-08-02 20:12:11 · 690 阅读 · 0 评论 -
Godot Engine:资源加载(load)VS 资源预加载(preload)
文章目录原型官方文档的解释总结原型load方法的原型Resource load(path: String)preload方法的原型Resource preload(path: String)官方文档的解释loadpreload执行时间程序执行到该语句时加载代码解析(编译)阶段加载参数要求常量和变量只允许常量总结preload是godot为自研语言GDScript设计的一种“作弊”手段,所以只要你能提供一个常量地址,就直接用preload好了,其原创 2020-08-01 19:41:53 · 3171 阅读 · 0 评论 -
Godot Engine:KinematicBody中move_and_slide的返回值不是闹着玩的
文章目录方法概述缘起一个BUG解决办法方法概述KinematicBody中move_and_slide方法,它的原型是下面这样的Vector3 move_and_slide(linear_velocity: Vector3, up_direction: Vector3 = Vector3( 0, 0, 0 ), stop_on_slope: bool = false, max_slides: int = 4, floor_max_angle: float = 0.785398, infinite_in原创 2020-07-30 19:25:29 · 1353 阅读 · 0 评论 -
Godot Engine:使用GridMap创建三维TileMap
又一个Godot内置的好东西,Godot不仅内置工具齐全,而且工具都非常好用步骤1. 创建瓦块2. 创建MeshLibrary2.1 导入模型2.2 新建一个场景重来生成MeshLibrary2.3 将场景转换成MeshLibrary3. 创建GridMap3.1 设置GridMap3.2 绘制GridMap1. 创建瓦块本文使用Blender建模。无论使用什么建模工具,必须要注意以下几点:原创 2020-07-27 16:56:30 · 1968 阅读 · 1 评论 -
Godot Engine:多重采样抗锯齿(MultiSampling Anti-Aliasing)设置
Godot Engine 3.2.2默认状态下Godot渲染的锯齿很严重解决办法:开启MSAAMSAA是MultiSampling Anti-Aliasing的英文缩写,指多重采样抗锯齿,原理是寻找出物体边缘部分的像素,然后再把画缩放到当前的显示器上。数值越大抗锯齿效果越好,当然系统压力也越大开启后的效果...原创 2020-07-19 18:35:13 · 2560 阅读 · 0 评论 -
Q&A:通过一个情景理解GDScript中的继承机制(Godot游戏引擎萌新向)
很多萌新在学习Godot Engine和GDScript之前并没有接触过面向对象编程,所以看《手把手带你Godot游戏开发 第一弹》时遇到“继承”这个概念,感到很困惑,为什么要用继承呢?而且有小伙伴反映,翻了教科书和网络上的一些文章,反而有越看越迷糊的趋势。老王也是从萌新一路走来,所以对这种困惑很理解,问题并不在于教科书和网文,而是由于萌新缺乏编程的实践,导致阅读一些抽象的叙述时,脑原创 2020-04-10 21:25:42 · 2107 阅读 · 4 评论 -
Godot Engine:如何在_input(event)方法中判断某个输入事件“刚刚”发生
func _input(event)中传入的参数event是一个InputEvent类型,这个类型没有直接判断“刚刚”发生的方法,所以要如下判断:原创 2020-04-05 16:16:05 · 2010 阅读 · 0 评论 -
GDScript:UIFramework V1.0
比较简单粗暴的方法,没有缓存,即用即加载。先把 UI的tscn 都放到一个文件夹中,也可以指定子文件夹extends Nodeexport(String, DIR) var ui_dir:Stringfunc open(ui_name:String,msg:Dictionary = {},sub_dir:String= "/",suffix:String = ".tscn")->...原创 2020-01-19 08:59:21 · 869 阅读 · 0 评论 -
SpringArm类
继承关系 Spatial < Node < ObjectSpringArm是一个辅助类,常用于第三人称摄像机属性类型属性名默认值说明intcollision_mask1floatmargin0.01Shapeshapefloatspring_length1.0方法属性名默认值说明v...翻译 2020-01-13 21:00:22 · 1710 阅读 · 0 评论 -
Resource类
继承于Reference < Object,是所有资源类型的基类常用属性类型属性名说明boolresource_local_to_scene默认false,如果是true则意味着,每个场景都包含这个资源的一个独立拷贝Stringresource_name资源名称Stringresource_path资源路径常用方法类型方...原创 2019-12-25 19:28:25 · 1184 阅读 · 0 评论 -
WeakRef和weakref
Godot Engine 3.2BetaWeakRef APIWeakRef是Godot的一个类,继承于Reference<ObjectWeakRef weakref(obj:Object)是一个全局函数,对于参数,返回其弱引用对象WeakRef有一个成员函数get_ref()用于获取其引用的实际对象所谓弱引用即它能够指向一个引用但是该引用不会触发垃圾回收的计数器,若引用非...原创 2019-11-13 14:59:02 · 651 阅读 · 0 评论 -
Mesh类
Godot Engine 3.2Alpha继承于Resource < Reference < Object,是一种资源类型,作用是把各种网格格式解析成一种Godot的中间格式常用属性类型属性名说明Vector2lightmap_size_hint常用方法类型方法名说明Shapecreate_convex_shape...原创 2019-10-24 16:45:19 · 886 阅读 · 0 评论 -
MeshInstance类
Godot Engine 3.2Alpha继承于GeometryInstance < VisualInstance < Spatial < Node < Object,用于显示网格模型常用属性类型属性名说明Meshmesh网格模型NodePathskeleton骨骼,默认是其父节点,详见Skeleton类Skinsk...原创 2019-10-24 15:27:07 · 802 阅读 · 0 评论 -
Array类型
Godot Engine 3.2 Alpha2Array是Godot的内置类型之一,它非常灵活,已经内置了很多方法,可直接充当队列,栈,链表等数据结构常用方法类型方法名说明ArrayArray ( PoolColorArray from )ArrayArray ( PoolVector3Array from )ArrayArray ( Po...原创 2019-10-23 09:17:31 · 878 阅读 · 1 评论 -
Dictionary类型
Godot Engine 3.2 Alpha2Dictionary是Godot的内置类型之一常用方法类型方法名说明voidclear ( )清空字典Dictionaryduplicate ( bool deep=False )复制,可以选择深浅拷贝boolempty ( )是否为空boolerase ( Variant key ...原创 2019-10-22 20:43:05 · 1308 阅读 · 0 评论 -
AnimationTree类
Godot Engine 3.2 Alpha2AnimationTree继承于Node常用方法类型方法名说明原创 2019-10-22 16:15:19 · 763 阅读 · 0 评论 -
Input类
Godot Engine 3.2 Alpha2Input继承于Object,是一个单例类,用于处理输入事件常用方法类型方法名说明voidaction_press ( String action, float strength=1.0 )用于模拟按键按下事件,注:不会触发_inputvoidaction_release ( String action ...原创 2019-10-22 15:31:16 · 724 阅读 · 0 评论 -
SceneTree类
Godot Engine 3.2 Alpha2SceneTree继承于MainLoop,注意:SceneTree本身并不是Node常用属性类型属性名说明Nodecurrent_scenebooldebug_collisions_hintbooldebug_navigation_hintNodeedited_scene_root...原创 2019-10-21 10:05:11 · 780 阅读 · 0 评论 -
AnimationPlayer类
Godot Engine 3.2 Alpha2AnimationPlayer继承自Node这就意味着它在2D/3D以及UI上都可以使用,而且AnimationPlayer可以放在节点树的不同层级上,用于管理一个或多个物体上的动画,因此衍生出很多高级的玩法。而且它还自带一个非常直观好用的可视化编辑器。AnimationPlayer可以说是Godot的一大亮点。常用属性类型属性...原创 2019-10-19 21:25:29 · 1211 阅读 · 0 评论 -
Spatial类
Godot Engine 3.2 AlphaSpatial类继承于Node类,是所有3D节点类的基类常用属性类型属性名说明SpatialGizmogizmoTransformglobal_transform世界坐标系中的变换Vector3rotation局部坐标系旋转(弧度制)Vector3rotation_degrees局部坐...原创 2019-10-18 16:45:44 · 554 阅读 · 0 评论 -
for语句
Godot Engine 3.2Alpha2for语句遍历一个数组for x in [5, 7, 11]: print(x) # 遍历3次,结果分别是5,7,11输出结果5711遍历一个字典var dict = {"a": 0, "b": 1, "c": 2}for i in dict: print(dict[i])输出结果01...原创 2019-10-14 16:14:19 · 1420 阅读 · 0 评论 -
match语句
Godot Engine 3.2Alpha2关于match关键字的官方文档基本用法match x: 1: print("We are number one!") 2: print("Two are better than one!") "test": print("Oh snap! It's a string!")match的...原创 2019-10-13 10:28:41 · 2403 阅读 · 0 评论 -
用Array.shuffle生成随机值
Godot Engine 3.2Alpha2Godot内置了很多游戏开发常用的功能函数数组对象内置了一个shuffle()函数,顾名思义就是打乱数组的顺序,常用于构造枚举类型以及其它离散有限数据的随机,非常好用Shuffles the array such that the items will have a random order. This method uses the global rand...原创 2019-10-12 21:01:40 · 839 阅读 · 1 评论 -
Godot Engine:用Call Method Track(方法回调轨道)实现动画回调
所谓动画回调就是当动画播放到某一帧,自动调用一个回调函数假设有一段名为"Move"的帧动画,我们希望:1. 当它播放到K~1~帧时,调用一个名为"turn_green"的方法2. 当它播放到K~2~帧时,再调用一个名为"turn_red"的方法如果让你用Godot实现这个情景,你该怎么办?原创 2020-04-01 16:22:02 · 2079 阅读 · 71 评论 -
Godot Engine:如何使用外部字体和Label节点制作一个计时器
文章目录1. 导入字体文件2. 搭建场景3. 设置Label的基本参数4. 创建`DynamicFont`5. 设置Timer6. 计时器脚本7. 测试运行1. 导入字体文件先导入字体文件,Godot支持TTF和OTF两种常用的字体格式。2. 搭建场景3. 设置Label的基本参数4. 创建DynamicFont5. 设置Timer6. 计时器脚本#Counte...原创 2020-03-24 17:08:50 · 4435 阅读 · 70 评论 -
Godot Engine:用自动加载(AutoLoad)实现单例模式(Singleton Pattern)
自动加载(AutoLoad)是Godot Engine一个特有的并且设计非常巧妙的机制。原创 2020-03-23 22:47:45 · 4140 阅读 · 67 评论 -
Godot Engine:忽略"UNUSED_ARGUMENT"警告的第二种方法
在《Godot Engine:如何屏蔽一些无用的警告信息》一文中,介绍了如何屏蔽各种警告,其中也包括"UNUSED_ARGUMENT"警告,但是这种方式是针对所有GDScript脚本的,如果我们只是想忽略某些特定函数的"UNUSED_ARGUMENT"警告,有更加简便的方法:直接给你的参数加一个下划线"_"就可以了。范例:extends Nodefunc _process(delta):...原创 2020-03-19 12:00:10 · 5069 阅读 · 71 评论 -
Godot Engine:Timer节点使用范例
Timer顾名思义,它就是个计时器原创 2020-03-16 19:50:09 · 5474 阅读 · 73 评论 -
Godot Engine:碰撞和碰撞检测的简单实例(RigidBody2D与Area2D碰撞)
按照下图场景树所示构造一个场景:节点的名称即为节点类型红色方框分别对应着每个CollisionShape2D中Shape(都是RectangleShape2D)的范围注意:为了避免不必要的性能消耗,RigidBody以及RigidBody2D默认是不开启碰撞检测的,所以需要碰撞检测的话必须做两件事:将Contact Monitor设为true(开启碰撞检测)将Contact R...原创 2020-03-12 18:38:25 · 6749 阅读 · 59 评论 -
Godot Engine:5种碰撞体以及RigidBody的4种模式
Rigid模式默认模式,也就是正常的刚体行为模式,刚体的移动受物理引擎控制和用户代码二者影响。Static模式这种模式中刚体的行为会和StaticBody一样,无法被物理引擎移动,只能被代码移动。注意:StaticBody本身是无法发出碰撞信号的,如果想让StaticBody发出碰撞信号,可以使用RigidBody的Static模式Character模式这种模式和Rigid模式差不多,...原创 2020-03-12 17:01:21 · 7617 阅读 · 69 评论 -
Godot Engine:碰撞和碰撞检测的简单实例(RigidBody2D与StaticBody2D碰撞)
按照下图场景树所示构造一个场景:节点的名称即为节点类型红色方框分别对应着每个CollisionShape2D中Shape(都是RectangleShape2D)的范围原创 2020-03-11 20:06:33 · 6697 阅读 · 62 评论 -
Godot Engine:离线文档和在线文档
离线文档真不敢想象Godot几十兆的体积中除了包含2D/3D引擎,场景编辑器,脚本编辑器意外,竟然还自带了一个简装版英文离线文档(之所以说是简装版,因为Godot Engine的文档也是开源并实时更新的,因此离线版本可能会不完整)使用方法在代码编辑器中按住Ctrl鼠标滑过代码,出现下划线以后左键单击就会进入相应的文档在线文档英文在线文档中文在线文档语言切换...原创 2020-03-05 16:49:33 · 4265 阅读 · 64 评论 -
Godot Engine:实用小功能之确保对象子项不可选择
问题描述假设我有这样的一个节点树我想移动"Rigidbody2D",但是当我鼠标在场景编辑窗口拖动时,总是错误地拖动了"Sprite" ,而其它部分依旧留在原地。解决方法Godot的超实用小功能确保对象子项不可选择就可以避免这种错误这样在场景编辑窗口,无论如何点选都不会误选了...原创 2020-03-02 20:26:28 · 1116 阅读 · 75 评论 -
Godot Engine:如何设置Sprite的前后遮挡关系
本文也是《[手把手带你Godot游戏开发]案例一:1.Hello World》中问题的答案原创 2020-02-28 18:54:59 · 3449 阅读 · 4 评论 -
【手把手带你Godot游戏开发】FlappyBird:1.Hello World
进度效果步骤1. 导入资源把资源文件夹整个拖拽到 Godot的文件系统下面2. 添加一个“Game”节点用Godot开发游戏很重要的一部分工作就是添加和编辑各种“节点”,(参看官方文档《场景与节点》),节点有类型还有名字,下文中为了便于区分,节点的类型名用代码标记表示,名字用双引号表示。例如:“Game”节点的类型是Node其实Godot的节点组织方式非常灵活,这只是我在做...原创 2020-02-27 16:58:33 · 9706 阅读 · 83 评论