开发快照:Godot 4.7 beta 1

2026-04-26

源地址:https://godotengine.org/article/dev-snapshot-godot-4-7-beta-1/

4.7的发布周期终于达到了一个重要的里程碑:它的第一个测试版快照!上周,我们的用户在功能冻结初期就很好地解决了bug,我们将进一步鼓励那些还没有将注意力完全转移到回归修复上的用户。

对于那些有兴趣帮助我们解决这段时间出现的任何bug的人,我们再次鼓励您加入我们的bug狩猎冲刺。任何有兴趣的人都应该阅读Bug分类介绍以获取更多信息,并加入我们的开发人员RocketChat上的#bugsquat#bugsquad sprints频道参与。

如果您有能力,请考虑为该项目提供财务支持。Godot由志愿者和小型付费贡献者团队共同维护。您的捐款将用于赞助他们的工作,并确保他们能够全身心投入到满足项目需求的工作中。

跳转到下载部分,立即尝试一下,或者继续阅读以了解有关此版本中改进的更多信息。您还可以尝试此版本的网页编辑器XR编辑器安卓编辑器。如果您对后者感兴趣,请申请加入我们的测试组,以获取预发布版本的访问权限。

封面插图来自灰烬偶像,这是一款恐怖攀岩游戏,你可以在数千米深的黑暗而古老的地方探险;你的存在是众所周知的,不受欢迎。你可以在Steamitch.io上购买游戏,并在BlueskyYouTubeitch-io上关注开发者。

亮点

对于那些一直密切关注我们的开发快照的人来说,您可能熟悉这篇文章中的一些亮点,这些亮点在之前的文章中已经介绍过(dev 1dev 2dev 3dev 4dev 5)。

因为我们已经处于功能冻结状态,与dev 5相比,没有新的功能可以覆盖。相反,我们将重点对Godot 4.7的整体预期进行总体总结,并扩展一些我们在之前的快照中没有机会强调的补充内容。

不兼容更改

我们尽量减少不兼容更改,但有时为了解决高优先级问题,这些更改是必要的。如果我们破坏了兼容性,我们会尽最大努力确保更改最小,并且只需要对用户项目进行少量更改。

您可以通过使用breaks-compat标签过滤4.7里程碑中的合并PR来找到此类问题的列表。

  • 动画:显示并允许设置BlendSpace点的名称/索引 (GH-110369).
  • 音频:修复频谱分析仪返回抖动值的效果 (GH-114355).
  • 核心:更改新的重载以使用标记而不是指针 (GH-112035).
    • 应该只与依赖非常规初始化方法的模块相关。
  • GDExtension: 绑定对象::ConnectFlags作为位字段,而不是枚举 (GH-109892).
  • GDScript: 使用数组/字典改进常量表达式的求值 (GH-113228).
  • GUI: 添加选项以相对于字体大小缩放RichTextLabel中的图像 (GH-112617).
  • Input: 将设备ID添加到键盘和鼠标输入事件中 (GH-116274).
  • Jolt Physics: 增加Area3D检测/影响SoftBody3D的能力 (GH-114198).
    • 使用Jolt Physics时,Area3D现在将报告与SoftBody3D的重叠,因此如果不需要,可能需要重新调整碰撞层/掩码。
  • Jolt Physics: 将SoftBody3D设置为默认质量1kg并固定刚度转换 (GH-116041).
    • 修复了许多问题,并使其与Godot物理更加一致,但需要重新调整所有SoftBody3D实例的参数。
  • Particles: 固定角速度 (GH-117861).
    • 使功能与一直记录的方式保持一致。
  • Platforms: Android:删除已弃用的Google Play OBB支持 (GH-118283).
  • Shaders: 限制着色器预处理器中的条件解析 (GH-117173).

动画

Tomasz Chabora以一个我们在dev 2博客文章中忽略的功能开始了我们的展示:AwaitTweenerGH-79712是一款经过近三年研发的PR,补间现在可以等待特定的信号来执行他们想要的动作:

extends RigidBody2D

func _ready() -> void:
  var tween := create_tween().set_process_mode(Tween.TWEEN_PROCESS_PHYSICS)
  tween.tween_property(self, ^"modulate", Color.RED, 1.0)
  tween.tween_property(self, ^"freeze", false, 0)
  tween.tween_await($"../Area2D".body_entered).set_unbinds(1)
  tween.tween_callback(queue_free)

Malcolm AndersonGH-113479中给了动画曲目编辑器一些爱,使用户能够折叠组。这个简单的改变应该会立即引起用户的共鸣,他们需要处理动画树可以达到的荒谬大小,尽管在所有大小上都能感受到好处。

更多:

  • 动画:优化动画资源、库、混音器和播放器(GH-116394)。
  • 动画:优化动画树,改进内部结构和编辑器及节点::process_thread_group安全(GH-117277)。

核心和构建系统

已经采取了集体努力来减少整个代码库的编译时间。在Lukas Tenbrink带领下,构建完成的速度大大提高了!特别感谢Rémi VerscheldeThaddeus CrewsEnzo Novoselic不仅为这一事业做出了贡献,还帮助改进了我们的工具和检测方法。虽然这种事情很难在博客文章中展示,但我们希望任何直接编译引擎的人都能直接享受到这些好处。

更多:

  • 构建系统:SCons:在web构建上启用wasm64支持(GH-102378)。
  • 提高Object信号的线程安全性(GH-117511)。
  • PCKPacker:从缓冲区添加文件的Add方法(GH-108830)。
  • TRACY集成(GH-117583)默认使用TRACY_ON_DEMAND。
  • 音频:改造音频总线UI(GH-118266)。

编辑器

Gustavo Jaruga-CruzPath3D对撞机拍摄GH-102085的形式给了3D编辑器一些爱。现在,在创建和编辑路径时,您可以选择将这些路径捕捉到鼠标悬停的任何对撞机,而不是简单地在空间中任意放置一个点。如下面的片段所示,此行为可以在Path3D选项菜单中切换。

Robert YevdokimovGH-117235中继续使用顶点捕捉支持的3D编辑器。这允许您将选择捕捉到附近节点的顶点,这对于标高设计和确保所有内容在视觉上都连接到相邻节点非常有用。

要使用顶点捕捉,请按住B并将鼠标移动到选择的顶点附近。看到黄色圆圈后,按住鼠标按钮并将鼠标移动到所需位置(此时可以释放B)。一旦在鼠标光标附近检测到要捕捉的顶点,圆圈就会变为绿色。为了获得更好的深度感知,如果黄色/绿色圆圈被另一个曲面遮挡,则其不透明度会降低。

顶点捕捉的工作方式因选定节点是否具有基于网格的表示而不同。例如,MeshInstance3D和CSG节点具有基于网格的表示,而Label3D和Marker3D等其他节点则没有。当按住B并单击另一个节点的顶点时,没有基于网格的表示的节点将传送到突出显示的顶点。得益于GH-117380的后续贡献,您也可以选择对具有基于网格表示的节点采用这种行为。

Raphaël DaubelcourGH-111469中的工作为编辑带来了一个非常受欢迎的功能:能够复制和粘贴整个部分和类别的数据。现在,这个过程不再是从给定属性的各个段复制数据并逐段粘贴,而是通过一个单一的动作来处理。

Malcolm以等宽代码名(GH-112219)的形式提供了另一个备受期待的功能。当类似代码的数据(方法、信号、属性等)以表示其上下文的字体表示时,尤其是当与所有其他信息的标准字体结合使用时,UI的可读性会有多大提高,你会感到惊讶。

通过在编辑器设置中切换 界面>主题>对编辑器符号使用单空格字体,可以恢复之前的行为。

Jayden Sipe通过在GH-115738中添加类名改进了远程场景树视图。这意味着,用户现在可以直接查看对象,而不是匿名的对象ID。

修改前

修改后

Michael Alexsander一直致力于在GH-112992中为我们的资产商店带来更新的视觉效果和API。不仅可以更容易地解析资产项目本身,而且可以很容易地看到更多的元数据和当前评级。

当单独访问资产时,您可以立即访问当前描述和所有现有变更日志。更重要的是,现在只需单击一下即可更改资产版本。

Michael的工作并没有止步于此,因为MeshLibrary在GH-112992中以全新的底部编辑器的形式收到了类似的QOL更新。项目现在显示在具有搜索和缩放功能的网格上,旁边还有一个单独的检查器,可以定制单个项目。对所有操作的完全撤消/重做支持,以及在未指定任何内容的情况下回退到项目网格的预览,使其成为一个完整的软件包。

长期以来,Godot一直缺乏在2D场景中轻松放置对象的方法。虽然TileMap中存在场景图块,但它们有许多局限性,最突出的是无法更改所放置场景的属性。

DexterGH-109360推出了新的场景绘制工具,可以轻松绘制场景。您可以快速绘制和擦除场景实例,并支持网格捕捉。实例也可以在检查器中预先配置,因此很容易放置旋转实例和其他类似复杂的配置。

Tomasz为这个庞大的部分画上了句号,并带来了两个最后的生活质量好东西。第一个是对GH-118008在检查器中显示数组的方式的简单但明显的改进,确保了空白不会被浪费。

第二个是改进了编辑器中接收导出模板的方式,因为必须批量下载这些模板是一个长期存在的痛点。Alex2782发现了一个巧妙的解决方法——通过检索批量包本身的切片,然后由Tomasz在GH-117072中移植到C++。这样,唯一下载的导出模板就是开发人员明确要求的模板。

更多:

  • 2D:添加场景绘制工具(GH-109360)。
  • 2D:重写TileSet编辑器代理对象(GH-117574)。
  • 3D:在3D编辑器中使用“中心选择”两次添加“跟随选择”(GH-99499)。
  • 3D:为CSG节点添加自动平滑(GH-116749)。
  • 3D:将矢量分量添加到3D标尺工具(GH-106785)。
  • 添加View3DController用于编辑器三维视图操作(GH-115957)。
  • 添加三维顶点捕捉基础设置(顶点/原点)(GH-117380)。
  • 添加一个脚本编辑器键盘快捷键,以显示插入符号所在单词的文档工具提示(GH-115767)。
  • 将折叠添加到Visual Profiler树(GH-118120)。
  • 添加类型过滤器以创建对话框(GH-111518)。
  • 为子轴点添加顶点捕捉支持(GH-117922)。
  • 描述项目经理(GH-111528)中的版本差异。
  • 为PropertyListHelper(GH-115253)生成的属性生成和显示文档。
  • 隐藏主编辑器窗口中的渲染器选择器并添加编辑器设置(GH-117754)。
  • 改善内置帮助(GH-107597)的外观。
  • 改进远程/本地SceneTreeDock按钮的外观(GH-118192)。
  • 使右键单击未聚焦的场景选项卡成为可能(GH-112919)。
  • 优化树大小计算和场景树停靠过滤器(GH-110759)。
  • 重组输出坞(GH-112690)。
  • 改造自动加载创建(GH-91124)。
  • 在远程检查器(GH-108208)中显示自定义类名。
  • 默认情况下停止自动补全单词(GH-117464)。
  • 支持远程场景检查器(GH-117357)中的折叠、分组和子组。
  • 支持导航到列表中的脚本(GH-112796)。
  • 在放置onready变量时考虑自定义类型的父脚本(GH-115158)。

GDExtension

现在可以直接在编辑器中查看GDextensions。感谢GH-118063中的Aaron Franke,用户现在可以在新的项目设置选项卡中查看他们安装的任何GDExtensions。为了增加便利性,用户可以直接从此窗口重新加载扩展,这将进一步简化工作流程。

更多:

  • 将变量:get_type_by_name添加到GDExtension接口(GH-117160)。

GDScript

Danil Alexeev解决了在远程播放会话期间非导出枚举恢复为整数的长期困扰。得益于GH-115705,元数据现在完全保留了所有声明的变量,无论其导出状态如何。

更多:

  • GDScript:LSP:在服务器端计算简单的字符串插入(GH-117710)。

GUI

Godot GUI系统中最期待已久的功能之一是能够平移、旋转或缩放Control节点,而不会影响容器的其他部分。以前,Godot的各种容器节点将位置、旋转和缩放应用于它们的子节点,这意味着当容器再次排序时(当在场景树中添加、删除或移动子节点时),将丢失对子节点变换所做的任何更改。Timo SchwarzerGH-87081中实现的新变换偏移属性旨在以一种自包含的方式解决这一限制,类似于CSS中的变换属性。

您可以选择变换偏移是否影响鼠标输入。默认情况下,转换偏移是纯视觉的,这意味着按钮在转换后不会失去悬停状态。应用了变换偏移的控件将显示其原始边界框,并显示一个灰色虚线矩形:

另一个长期存在的可用性怪癖是弹出窗口有几十个选项可供选择,除了缺乏视觉反馈的基本增量搜索外,还缺乏任何适当的过滤。Alexander StrengGH-114236中为PopupMenu添加了搜索栏,使在大量列表中搜索变得更加不稳定,从而提高了可用性。此功能在任何PopupMenu节点中都可用,这意味着它也可以在非游戏应用程序项目中使用。

为了提高Tree拖放功能的整体可用性和直观性,vaner设计了GH-112993。现在,在执行拖放操作时,将有一个始终存在的垂直指示器显示潜在的父链,利用独立的CanvasItem来防止StyleBox遮挡。

更重要的是,此操作现在将考虑光标的x位置,同时在缩进空间(最左侧的空白空间)中确定a为父项,而项空间在很大程度上保留了当前行为。这种实现反映了矢量设计软件中常见的情况。

Malcolm用GH-112617结束了这一部分,启用了RichTextLabel图像,允许宽度高度指定其em缩放比例。这将导致以下文本…

Do you have any [img height=1em]coin.png[/img] coins?
...I said, [font_size=50]DO YOU HAVE ANY [img height=1em]coin.png[/img] COINS??[/font_size]

…显示如下:

更多:

  • 将custom_maximum_size属性添加到控件(GH-116640)。
  • 为地标导航添加可访问性区域角色(GH-114449)。
  • 将二次曲线渐变添加到渐变纹理2D(GH-115394)。
  • 添加脚本编辑器join_lines键绑定(GH-111547)。
  • 在RichTextLabel(GH-116868)中添加三次点击段落选择。
  • 改进RichTextLabel(GH-116277)中的表格。
  • 支持在TextureRect(GH-113808)中平铺AtlasTexture。

输入

4.7开发周期的最早补充之一来自GH-110933中的Kazox61,它提供了一种内置解决方案,用于使用VirtualJoystick处理触摸屏“操纵杆”输入。

操纵杆固定:操纵杆不动。

JOYSTIC_DYNAMIC:只要在操纵杆的范围内,操纵杆就会移动到初始触摸位置。释放后,它会移回原来的位置。

操纵杆跟随:只要在操纵杆的范围内,操纵杆就会移动到初始触摸位置。如果触摸输入超出操纵杆的范围,它将跟随触摸输入。释放后,它会移回原来的位置。

更多:

  • 将设备方向更改信号添加到DisplayServer(GH-115434)。
  • 在编辑器中添加长按右键单击的触觉反馈(GH-117198)。
  • 添加项目设置,以便在应用程序未聚焦时忽略游戏手柄事件(GH-115119)。
  • 添加对操纵板运动传感器(GH-111679)的支持。
  • 添加对iOS版SDL3操纵杆输入驱动程序的支持(GH-114316)。
  • Wayland:实施触摸支持(GH-113886)。

物理

SzuamiGH-104736给予了2D一些喜爱,为CollisionShape2D添加了单向碰撞方向。虽然它们在技术上一直支持单向碰撞,但它们被硬编码为“up”。现在已经改变了这一点,以解决所有方向的问题,确保更复杂的逻辑,如旋转平台,得到适当的考虑。

单向碰撞:旧行为

单向碰撞:新行为

平台

Android

得益于Fredia Huya KouadioGH-114505中的工作,Godot现在能够运行项目并将其移动到固定在屏幕角落之一的小窗口中。这依赖于Android对画中画(PiP)显示的原生支持。例如,Android上的YouTube使用此功能在屏幕的一角显示当前播放的视频。

在画中画模式下无法与应用程序交互,因此此功能对于具有不需要实时输入的部分的应用程序和游戏(空闲游戏、自动转换器等)最有用。

GH-117109中的Anish Kumar带来了在Android设备上的脚本编辑器中切换到肖像模式的能力。这使得在虚拟键盘上打字时更容易查看代码。请注意,必须启用无分心模式才能实现这一点(可以切换)。这个限制必须到位,因为侧坞占用了大量的水平空间,而纵向模式下的脚本编辑器在侧坞可见的情况下是不切实际的。

Anish继续使用GH-118417,为Android带来了调整嵌入式游戏窗口大小和重新定位的支持。默认情况下,宽高比是锁定的,但可以使用屏幕上的复选框(如下所示)切换到“自由”模式。

更多:

  • 添加对插件gradle平台依赖关系的支持(GH-115888)。
  • 允许从GDScript(GH-115498)实现java接口。
  • 在所有设备上启用本机文件选择器支持(GH-115257)。
  • 导出:添加导出选项以自定义启动画面(GH-114671)。

Windows

我们即将进入HDR的杂草,所以我们需要强调我们在bruvzg的努力下躲过的子弹。简单地说,除非我们设法集成对C++/WinRT接口的支持,否则Windows上HDR输出的成本将是巨大的。然而,这种集成只有在C++20中才可行,而在撰写本文时,Godot代码库使用的是C++17。与我们为Metal渲染器所做的类似,bruvzg创建了GH-116349,将相关的Windows代码隔离到C++20,同时保持代码库的其余部分不变。长话短说:它很有魅力!

更多:

  • 如果可用,请使用OneCore/WinRT表情符号选取器(GH-116351)。

渲染和着色器

也许是4.7的后继者:HDR支持。这不是一个单一的发展快照中强调的事情;相反,在迄今为止的每一篇4.7的博客文章中,除了一篇之外,其余都展示了对HDR的增量支持!Josh JonesAlvin WongAllen PestalukiGH-94496中的Windows支持;Stuart CarnieGH-106814中的苹果支持;ArchercatNEOGH-102987中支持Linux和BSD。

事实上,要报道的内容太多了,需要一篇专门的博客文章。因此,如果您错过了,我们强烈建议您查看昨天强调HDR输出的文章。以下比较截图直接摘自该文章。

这些HDR图像最好在亮度设置为50%的HDR兼容设备和浏览器上查看。截至撰写本文时,Firefox不支持HDR图像。

标准动态范围(SDR)

高动态范围(HDR)

Antonio CaggianoGH-99119中的Vulkan射线追踪奠定了基础。将其变为现实所涉及的复杂性远远超出了这篇博客文章的范围(而且很好地衡量了我的能力),但所有技能水平的用户都可以在他的演示项目中直接看到通过GDScript展示这一新功能的好处。

Colin O'RourkeGH-105701中实现了期待已久的DrawableTexture实现。有了这个新类,用户现在有了一个简单的API层,可以抽象掉所有的技术噪音,并为所有技能级别的用户提供一种直接绘制纹理的方便方式。

上述视频片段取自Bastiaan Olij的演示项目。

Hugo Locurcio在近三年的时间里一直在改进GH-79731,为我们的渲染系统带来了最受期待的集成之一:3D视口的最近邻缩放。这将确保具有像素艺术美学或较低分辨率缩放的3D标题仍然看起来清晰,而不会对性能产生任何影响:

双线性

最近(新行为)

Emil DobetsbergerGH-108219中的工作提供了矩形区域光源。通过利用新的AreaLight3D,现在可以在3D空间中渲染矩形的实时光。

Yuri RubinskyGH-117726中的作品为我们带来了一个着色器亮点,带来了内联预览。这是Godot Shader Previewer的C++实现和改进,Godot Shader Preview是Cashew OldDew用GDScript编写的一个流行插件。与之前的插件非常相似,这旨在减少构造文本着色器时的猜测量,因为现在人们可以在文本编辑器本身中很容易地看到由此产生的效果:

更多:

  • 更改嵌入式窗口选项以使用三个堆叠点并添加HDR信息(GH-118079)。
  • 重构光线追踪管道(GH-118044)。
  • 渲染:清漆改进和修复(GH-111464)。
  • 渲染:为每一次通过提供自己独特的环境统一缓冲区(GH-115177)。
  • 渲染:金属:重构;固定动态制服;非循环渲染图支持(GH-114484)。
  • 渲染:Vulkan:将所有组件更新到Vulkan SDK 1.4.335.0(GH-114075)。
  • 渲染:为MipMaps和rd_textures添加编辑器(GH-109004)。
  • 渲染:为多边形2D(GH-117334)添加快速路径。
  • 渲染:在粒子过程中添加缩放3D和旋转3D(GH-112447)。
  • 粒子:固定时间刻度为0时移动的粒子(GH-109911)。

更新日志

自4.6-stable发布以来,309名贡献者提交了1265个修复程序。有关更改的完整列表,请参阅我们的交互式更改日志。您还可以查看自4.7-dev5快照以来的更改,以获取来自47名贡献者的85个修复程序的更精心的选择。

此版本基于commit 1c8cc9e7e构建。

下载

下载 Godot 4.7 beta1

Linux

macOS

Windows

导出模板及其他下载内容 捐献

标准构建包括对GDScript和GDExtension的支持。

.NET构建(标记为mono)支持C#以及GDScript和GDExtension。

尽管引擎维护人员会尽最大努力确保每个预览快照和候选版本都是稳定的,但这些版本从定义上来说都是预发布软件。请务必经常备份,或使用Git等版本控制系统,以防止项目损坏或数据丢失。

已知问题

每次发布时,我们都承认会出现各种问题,这些问题虽然已被报告,但尚未得到解决。有关已知错误的完整列表,请参阅GitHub问题跟踪器。

此版本目前未引入任何已知问题。

报告问题

在测试阶段,我们专注于解决回归问题(即以前版本中有效的东西现在被破坏了)和新功能引入的重大新错误。您可以查看我们当前的回归列表和重要问题,我们的目标是在发布4.7之前解决这些问题。此列表是动态的,如果我们在更多用户开始测试测试版快照后发现新的显示停止问题,则会更新此列表。

每次发布,我们都承认会有各种问题已经报告,但尚未得到解决。有关已知错误的完整列表,请参阅GitHub问题跟踪器。

  • 如果缓存了不正确的url(GH-118755),则New AssetStore API无法加载。
  • 当使用Vulkan作为渲染器打开项目时,系统会自动冻结(GH-116414)。
  • 安卓系统:当VisualShader启用vertex_lighting时,启动时崩溃(GH-116990)。

支持

Godot是一款非盈利的开源游戏引擎,由数百名贡献者在业余时间开发,同时,得益于Godot社区的慷慨捐赠,还聘请了少数兼职和全职开发人员。衷心感谢每一位为该项目贡献时间资金支持的人!

如果您想在经济上支持该项目,并帮助我们确保未来的招聘工作,您可以通过Godot发展基金来实现这一目标。

如果您想为该项目提供财务支持,并帮助我们确保未来的人才招聘,您可以通过Godot基金会管理的Godot发展基金平台进行捐赠。此外,您还可以选择其他更适合您的捐赠方式

现在捐赠