Files
godot-website/article/dev-snapshot-godot-3-2-2-beta-2/index.html
2025-05-19 11:19:01 +00:00

13 lines
31 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html><html lang=en><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Godot Engine"><meta name=description content="After refining our Godot 3.2 release with bug fixes in 3.2.1, we're now looking at integrating some new features that didn't make it into the 3.2 merge window but have been further developed and backported since. We published a first beta a few weeks ago, and here's the next round with Godot 3.2.2 beta 2."><script defer data-domain=godotengine.org src=https://plausible.godot.foundation/js/script.file-downloads.outbound-links.js></script><meta property="og:site_name" content="Godot Engine"><meta property="og:url" content="https://godotengine.org/article/dev-snapshot-godot-3-2-2-beta-2/"><meta property="og:type" content="website"><meta property="og:description" content="After refining our Godot 3.2 release with bug fixes in 3.2.1, we're now looking at integrating some new features that didn't make it into the 3.2 merge window but have been further developed and backported since. We published a first beta a few weeks ago, and here's the next round with Godot 3.2.2 beta 2."><meta property="og:image" content="https://godotengine.org/storage/app/uploads/public/5eb/400/0dd/5eb4000ddf0d8512778590.png"><meta name=twitter:card content="summary_large_image"><meta property="twitter:domain" content="godotengine.org"><meta property="twitter:url" content="https://godotengine.org/article/dev-snapshot-godot-3-2-2-beta-2/"><meta property="og:title" content="Dev snapshot: Godot 3.2.2 beta 2 Godot Engine"><title>Dev snapshot: Godot 3.2.2 beta 2 Godot Engine</title>
<link rel=alternate type=application/rss+xml title="Godot News" href=/rss.xml><link rel=alternate type=application/json title="Godot News" href=/rss.json><link rel=alternate type=application/atom+xml title="Godot News" href=/atom.xml><link rel=icon href=/assets/favicon.png sizes=any><link rel=icon href=/assets/favicon.svg type=image/svg+xml><link rel=stylesheet href=/assets/css/main.css?121><link rel=stylesheet href=/assets/css/header.css?1><link rel=stylesheet href=/assets/css/tobii.min.css><link rel=preload as=font href=/assets/fonts/Montserrat-Italic-VariableFont_wght.woff2 crossorigin><link rel=preload as=font href=/assets/fonts/Montserrat-VariableFont_wght.woff2 crossorigin><link rel=me href=https://mastodon.gamedev.place/@godotengine><input type=checkbox id=nav_toggle_cb><header class="flex column"><div class="container flex align-center"><div id=nav_head><a href=/ id=logo-link><img class=nav-logo src=/assets/logo.svg width=136 height=48 alt="Godot Engine">
<img class="nav-logo dark-logo" src=/assets/logo_dark.svg width=136 height=48 alt="Godot Engine"></a><div class=mobile-links><span class="fund mobile"><a href=https://fund.godotengine.org><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:13px;fill:#fff;margin-right:4px"><path d="M47.6 300.4 228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6.0 115.2.0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"/></svg> Donate</a></span>
<label for=nav_toggle_cb id=nav_toggle_btn><img src=/assets/icons/hamburger.svg width=24 height=24 alt="Main menu"></label></div></div><nav id=nav><ul class=left><li><a href=/features/>Features</a><li><a href=/showcase/>Showcase</a><li><a href=/blog/>Blog</a><li><a href=/community/>Community</a><li><a href=https://godotengine.org/asset-library/asset>Assets</a></ul><ul class=right><li><a href=/download/windows/ class=set-os-download-url>Download</a><li><a href=https://docs.godotengine.org>Docs</a><li><a href=https://docs.godotengine.org/en/stable/contributing/how_to_contribute.html>Contribute</a><li class="fund desktop"><a href=https://fund.godotengine.org><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:13px;fill:#fff;margin-right:4px;top:1px;position:relative"><path d="M47.6 300.4 228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6.0 115.2.0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"/></svg> Donate</a></ul></nav></div></header><script>document.addEventListener("click",function(e){const t=document.querySelector(".language-selector");if(!t)return;t.contains(e.target)||t.classList.remove("open")});function setLanguagePreference(e,t){e.preventDefault();const s=t.getAttribute("data-lang-path"),o=t.getAttribute("data-lang"),n=new Date;n.setDate(n.getDate()+365),document.cookie=`preferred_language=${o}; expires=${n.toUTCString()}; path=/; SameSite=Lax`,window.location.href=s}</script><main><style>body{background-color:var(--background-color)}h1{margin-bottom:8px;margin-top:32px}:not(pre)>code{background:var(--code-background-color);padding:1px 4px;font-size:.95em;border-radius:3px}pre{background:var(--codeblock-background-color);color:var(--codeblock-color)}pre code{display:block;overflow-x:auto;padding:.5em}.date-big{line-height:2;margin-left:32px}article{background-color:var(--base-color);box-shadow:0 3px 2px rgba(0,0,0,.15)}figure{margin:0}figure img{margin:0}article img,article video{max-width:100%;height:auto;display:block;margin:auto;margin-top:16px;margin-bottom:16px}article h1{margin-top:64px}article h2,article h3,article h4{margin-top:42px}.article-info{display:flex;flex-direction:column;gap:8px}.article-metadata{display:flex;gap:24px;align-items:center;font-family:var(--header-font-family);margin-bottom:12px}@media(max-width:900px){.article-metadata{flex-direction:column;align-items:flex-start;gap:16px}}.article-author{color:var(--base-color-text-subtitle-date);font-weight:700;font-size:18px;flex-grow:1;display:flex;gap:12px;align-items:center}.article-author .avatar{border-radius:100%;margin:0;background:0 0}.article-author .by{color:var(--base-color-text-subtitle)}.article-metadata .date{color:var(--base-color-text-subtitle-date)}.article-metadata .date.post-recent-highlight{color:var(--post-recent-highlight-color);opacity:.8}.article-metadata .date.post-recent-highlight::after{font-size:80%;content:"NEW";border:2px solid var(--post-recent-highlight-color);padding:2px 3px;margin-left:8px}.tag.active{filter:saturate(.75)}@media screen and (min-width:900px){article .content{width:70%;margin:auto}}@media(max-width:900px){body{background-color:var(--base-color)}article{background-color:initial;box-shadow:none}article img:first-child,article video:first-child{max-width:100%}}.blog-navigation{display:grid;grid-template-columns:1fr 1fr;padding-top:30px;padding-bottom:60px}.blog-navigation .next{text-align:right}@media(max-width:900px){.blog-navigation{grid-template-columns:1fr;gap:20px;border-top:1px solid var(--code-background-color)}.blog-navigation .next{text-align:left}}.blog-navigation span{opacity:.6;font-weight:700;margin-bottom:5px;display:block}.blog-navigation a{display:inline-block;text-decoration:none;color:inherit;opacity:.6;transition:opacity .2s}.blog-navigation a:hover{opacity:1}</style><link rel=stylesheet href=/assets/css/highlight.obsidian.min.css><div class=container><article class=padded><div class="content article-container"><figure class=article-cover><img src=/storage/app/uploads/public/5eb/400/0dd/5eb4000ddf0d8512778590.png title alt=" " class=rounded-lg style=width:100%;height:auto;background-color:initial></figure><div class=article-info><h1>Dev snapshot: Godot 3.2.2 beta 2</h1><div class=article-metadata><div class=article-author><span>By: </span><img class=avatar width=25 height=25 src=/assets/images/authors/akien.webp alt="Rémi Verschelde" loading=lazy>
<span class=by>Rémi Verschelde</span></div><span class=date data-post-date="2020-05-07 14:08:24 +0000">7 May 2020</span></div><div class=tags><a href=/blog/pre-release><div class="tag active">Pre-release</div></a></div></div><div class=article-body><p>After refining our <a href=/article/here-comes-godot-3-2>Godot 3.2 release</a> with bug fixes in <a href=/article/maintenance-release-godot-3-2-1>3.2.1</a>, were now looking at integrating some new features that didnt make it into the 3.2 merge window but have been further developed and backported since. We published a <a href=/article/dev-snapshot-godot-3-2-2-beta-1>first beta</a> a few weeks ago, and heres the next round with Godot 3.2.2 beta 2.<p>Notably, Godot 3.2.2 is going to add 5 major features:<ul><li><a href=/article/csharp-ios-signals-events>C# support for the iOS platform</a>, courtesy of Ignacio (<a href=https://github.com/neikeq>neikeq</a>).<li><a href=/article/gles2-renderer-optimization-2d-batching>2D batching for the GLES2 renderer</a>, thanks to <a href=https://github.com/lawnjelly>lawnjelly</a> and Clay (<a href=https://github.com/clayjohn>clayjohn</a>).<ul><li>Several regressions and pre-existing GLES2 issues have additionally been fixed since 3.2.2 beta 1.</ul><li><a href=https://github.com/godotengine/godot/pull/36336>Re-architecture of the Android plugin system</a>, by Fredia (<a href=https://github.com/m4gr3d>m4gr3d</a>).<li><a href=/article/enet-dtls-encryption>DTLS support and ENET integration</a>, developed by Fabio (<a href=https://github.com/Faless>Faless</a>) (<em>added in 3.2.2 beta 2</em>).<li><a href=https://github.com/godotengine/godot/pull/38119>Fix for the dangling Variant bug</a>, kudos to Pedro (<a href=https://github.com/RandomShaper>RandomShaper</a>) (<em>added in 3.2.2 beta 2</em>).<ul><li>While this is not a feature per se, it fixes a major annoyance that users have had with pointers to freed objects unexpectedly being re-assigned to new objects, causing hard-to-debug issues.</ul></ul><p>We need your help to test and validate these changes before publishing 3.2.2-stable, which is why we publish this beta build now. If you find any new issue with this build, especially related to one of the listed big changes, please <a href=https://github.com/godotengine/godot/issues>report it on GitHub</a>, ideally including a minimal project that can be used to reproduce the issue.<h2 id=how-to-test>How to test</h2><p>It should be safe to test this build directly with pre-existing projects made with Godot 3.2.x. Its of course always advised to use a version control system or backups in case you want to go back to the previous version (but testing 3.2.2-beta2 shouldnt prevent you from doing so anyway).<p>Note: If using C#, the <code class="language-plaintext highlighter-rouge">.csproj</code> file will be converted with some bug fixes which makes it incompatible with earlier Godot 3.2 and 3.2.1. <a href=https://github.com/godotengine/godot/pull/38110>A backup of the file</a> will be generated upon conversion so that you can revert to older releases if need be.<h4 id=c-support-for-ios>C# support for iOS</h4><p>C# support for iOS should work similarly to <a href=http://docs.godotengine.org/en/3.2/getting_started/workflow/export/exporting_for_ios.html>exporting a GDScript project for iOS</a>. Note that the export needs to be done from a macOS system to use the included <abbr title="Ahead Of Time">AOT</abbr> compiler for iOS arm64. If you run into any issue with the export process, please also test the export of a simple GDScript project to verify if the issue relates to the new C# support or to the iOS export pipeline in general.<h4 id=gles2-2d-batching>GLES2 2D batching</h4><p>The new 2D batching is only implemented for the GLES2 renderer, so if you use GLES3 you will not be able to benefit from it. As the GLES3 renderer is being deprecated by Vulkan in Godot 4.0, we currently dont plan to port the 2D batching to it. GLES2 batching is enabled by default both in-game and in the editor. You can turn it off or configure advanced settings in the Project Settings. Please see <a href=https://github.com/godotengine/godot/issues/38004>this dedicated issue</a> for more details and to share your own testing results (were interested in all feedback, whether you gained a lot of performance, lost some or didnt notice any chance). Note that currently, only rects are batched (TileMaps, <code class="language-plaintext highlighter-rouge">draw_rect</code>, text rendering, etc.), but we plan to include more primitive types once this has been well tested.<h4 id=new-android-plugin-system>New Android plugin system</h4><p>Godot 3.2 came with a brand new Android plugin system already, and notably the possibility to build custom APKs from your project folder with any additional plugins/modules that your project needs.<p>Fredia had done a lot of work back then to improve Juans initial custom build system, which led him to notice many things that could be modernized to be better suited to the current Android ecosystem. Notably, he re-architectured the plugin system to leverage the <a href=https://developer.android.com/studio/projects/android-library#aar-contents>Android AAR library file format</a>.<p>This new plugin system is backward-incompatible with the 3.2/3.2.1 system, but both systems are kept functional in future releases of the 3.2.x branch. Since we previously did not version our Android plugin systems, this new one is now labelled <code class="language-plaintext highlighter-rouge">v1</code>, and is the starting point for the modern Godot Android ecosystem.<p>See <a href=https://github.com/godotengine/godot/pull/36336>this Pull Request</a> and <a href=https://docs.godotengine.org/en/3.2/tutorials/plugins/android/android_plugin.html>the updated documentation</a> for details. Fredia has already started helping some plugin authors to update theirs to the new <code class="language-plaintext highlighter-rouge">v1</code> system, feel free to ask if you need help too.<h4 id=dtls-support-and-enet-integration>DTLS support and ENet integration</h4><p><a href=/article/enet-dtls-encryption>Fabios work on DTLS support</a> was nearly done by the time 3.2 was released, but came too late to be thoroughly tested. Testing has happened since then both in the <code class="language-plaintext highlighter-rouge">master</code> branch and in the pending <code class="language-plaintext highlighter-rouge">3.2</code> Pull Request, so were now confident to include it in this beta build for further testing.<p>See the <a href=/article/enet-dtls-encryption>dedicated devblog</a> for usage examples.<h4 id=fix-for-the-dangling-variant-bug>Fix for the dangling Variant bug</h4><p>If you were running into this bug, it would typically be in situations where youd check <code class="language-plaintext highlighter-rouge">is_instance_valid()</code> on what you expect to be a freed instance (which should give <code class="language-plaintext highlighter-rouge">False</code>), and it would actually return <code class="language-plaintext highlighter-rouge">True</code> and lead you to access a method or a property of a different object (causing an error if the objects class does not include this method or property).<p>The fix made in the 3.2 is only done on <strong>debug</strong> builds for performance reasons, so make sure to fix any error reported by the editor or debug builds before shipping a release build to your players.
In the upcoming Godot 4.0, this bug was fixed with a more comprehensive approach which prevents dangling Variant pointers in both release and debug builds.<h2 id=other-changes>Other changes</h2><p>Apart from those major features, there are also over 350 cherry-picks (<a href=https://github.com/godotengine/godot/compare/3.2.1-stable...cb1366f006dfc9904083e8fc6fa23e271bc39e39>part 1</a>, <a href=https://github.com/godotengine/godot/compare/cb1366f006dfc9904083e8fc6fa23e271bc39e39...d09036992ca8a979716823ac852a5bb0c9afa0ec>part 2</a>) for bug fixes and enhancements which have been merged since Godot 3.2.1. Here are some highlights:<ul><li>2D: Expose the <code class="language-plaintext highlighter-rouge">cell_size</code> affecting <code class="language-plaintext highlighter-rouge">VisibilityNotifier2D</code> precision (<a href=https://github.com/godotengine/godot/pull/38286>GH-38286</a>).<li>2D: Add <code class="language-plaintext highlighter-rouge">MODULATE</code> builtin to canvas item shaders (<a href=https://github.com/godotengine/godot/pull/38432>GH-38432</a>).<li>2D: Implement skew in <code class="language-plaintext highlighter-rouge">Node2D</code> (<a href=https://github.com/godotengine/godot/pull/38394>GH-38394</a>).<li>Android: Re-architecture of the Godot Android plugin (<a href=https://github.com/godotengine/godot/pull/36336>GH-36336</a>).<li>Android: Add signal support to Godot Android plugins (<a href=https://github.com/godotengine/godot/pull/37305>GH-37305</a>).<li>AStar: Implements estimate/compute_cost for AStar2D (<a href=https://github.com/godotengine/godot/pull/37039>GH-37039</a>).<li>Audio: Fix volume interpolation in positional audio nodes (<a href=https://github.com/godotengine/godot/pull/37279>GH-37279</a>).<li>C#: Add iOS support (<a href=https://github.com/godotengine/godot/pull/36979>GH-36979</a>).<li>C#: Sync csproj when files are changed from the FileSystem dock (<a href=https://github.com/godotengine/godot/pull/37149>GH-37149</a>).<li>C#: Replace uses of old Configuration and update old csprojs (<a href=https://github.com/godotengine/godot/pull/36865>GH-36865</a>).<li>C#: Allow debugging exported games (<a href=https://github.com/godotengine/godot/pull/38115>GH-38115</a>).<li>C#: Revert marshalling of IDictionary/IEnumerable implementing types (<a href=https://github.com/godotengine/godot/pull/38141>GH-38141</a>).<li>Core: Ensure COWData does not always reallocate on resize (<a href=https://github.com/godotengine/godot/pull/37373>GH-37373</a>).<li>Core: Fix dangling Variants (<a href=https://github.com/godotengine/godot/pull/38119>GH-38119</a>).<li>Core: Fixed false positives in the culling system (<a href=https://github.com/godotengine/godot/pull/37863>GH-37863</a>).<li>CSG: Various bug fixes (<a href=https://github.com/godotengine/godot/pull/38011>GH-38011</a>).<li>Editor: Add rotation widget to 3D viewport (<a href=https://github.com/godotengine/godot/pull/33098>GH-33098</a>).<li>Editor: Add editor freelook navigation scheme settings (<a href=https://github.com/godotengine/godot/pull/37989>GH-37989</a>).<li>Files: Improve UX of drive letters (<a href=https://github.com/godotengine/godot/pull/36639>GH-36639</a>).<li>GDScript: Fix leaked objects when game ends with yields in progress (<a href=https://github.com/godotengine/godot/pull/38288>GH-38288</a>).<li>GLES2: Add 2D batch rendering across items (<a href=https://github.com/godotengine/godot/pull/37349>GH-37349</a>).<li>GLES2: Avoid unnecessary material rebind when using skeleton (<a href=https://github.com/godotengine/godot/pull/37667>GH-37667</a>).<li>GLES2/GLES3: Add support for OpenGL external textures (<a href=https://github.com/godotengine/godot/pull/36342>GH-36342</a>).<li>GLES2/GLES3: Reset texture flags after radiance map generation (<a href=https://github.com/godotengine/godot/pull/37815>GH-37815</a>).<li>Import: Fix changing the import type of multiple files at once (regression fix) (<a href=https://github.com/godotengine/godot/pull/37610>GH-37610</a>).<li>Input: Various fixes for touch pen input (<a href=https://github.com/godotengine/godot/pull/37756>GH-37756</a>, <a href=https://github.com/godotengine/godot/pull/38439>GH-38439</a>, <a href=https://github.com/godotengine/godot/pull/38484>GH-38484</a>).<li>Language Server: Switch the GDScript LSP from WebSocket to TCP, compatible with more external editors (<a href=https://github.com/godotengine/godot/pull/35864>GH-35864</a>).<li>macOS: Ignore process serial number argument passed by macOS Gatekeeper (<a href=https://github.com/godotengine/godot/pull/37719>GH-37719</a>).<li>Networking: DTLS support + optional ENet encryption (<a href=https://github.com/godotengine/godot/pull/35091>GH-35091</a>).<li>Object: Add <code class="language-plaintext highlighter-rouge">has_signal</code> method (<a href=https://github.com/godotengine/godot/pull/33508>GH-33508</a>).<li>Particles: Fix uninitialized memory in CPUParticles and CPUParticles2D (<a href=https://github.com/godotengine/godot/pull/38346>GH-38346</a>, <a href=https://github.com/godotengine/godot/pull/38378>GH-38378</a>).<li>Physics: Make soft body completely stiff to attachment point (<a href=https://github.com/godotengine/godot/pull/36048>GH-36048</a>).<li>Skeleton: Fix IK rotation issue (<a href=https://github.com/godotengine/godot/pull/37272>GH-37272</a>).<li>VR: Fix aspect ratio on HMD projection matrix (<a href=https://github.com/godotengine/godot/pull/37601>GH-37601</a>).<li>Windows: Make stack size on Windows match Linux and macOS (<a href=https://github.com/godotengine/godot/pull/37115>GH-37115</a>).<li>API documentation updates.<li>Editor translation updates.<li>And many more bug fixes and usability enhancements all around the engine!</ul><p>See the full changelog on GitHub (<a href=https://github.com/godotengine/godot/compare/3.2.1-stable...cb1366f006dfc9904083e8fc6fa23e271bc39e39>part 1</a>, <a href=https://github.com/godotengine/godot/compare/cb1366f006dfc9904083e8fc6fa23e271bc39e39...d09036992ca8a979716823ac852a5bb0c9afa0ec>part 2</a>) for details.<h2 id=downloads>Downloads</h2><p>The download links for dev snapshots are not featured on the <a href=/download>Download</a> page to avoid confusion for new users. Instead, browse our download repository and fetch the editor binary that matches your platform:<ul><li><a href=https://github.com/godotengine/godot-builds/releases/3.2.2-beta2>Classical build</a> (GDScript, GDNative, VisualScript).<li><a href=https://github.com/godotengine/godot-builds/releases/3.2.2-beta2>Mono build</a> (C# support + all the above). You need to have MSBuild (and on Windows .NET Framework 4.7) installed to use the Mono build. Relevant parts of Mono 6.6.0.166 are included in this build.</ul><h2 id=bug-reports>Bug reports</h2><p>As a tester, you are encouraged to <a href=https://github.com/godotengine/godot/issues>open bug reports</a> if you experience issues with 3.2.2 beta 2. Please check first the <a href=https://github.com/godotengine/godot/issues>existing issues on GitHub</a>, using the search function with relevant keywords, to ensure that the bug you experience is not known already.<p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in 3.2.1 no longer works in 3.2.2 beta 2).</div></div></article><div class=blog-navigation><div class=previous><span>Previous</span>
<a rel=prev href=/article/gdscript-progress-report-writing-tokenizer/>GDScript progress report: Writing a tokenizer</a></div><div class=next><span>Next</span>
<a rel=next href=/article/godot-40-will-get-new-modernized-lightmapper/>Godot 4.0 will get a new, modernized lightmapper</a></div></div></div><link rel=stylesheet href=/assets/css/anchor-link.css?1><link rel=stylesheet href=/assets/css/article-cards.css?3><script src=/assets/js/anchor-link.js></script><script>document.addEventListener("DOMContentLoaded",()=>{window.applyAnchorLinks(".article-body"),document.querySelectorAll(".article-cover img, .article-body img").forEach(e=>{if(e.classList.contains("lightbox-ignore"))return;const t=document.createElement("a");t.href=e.src,t.classList.add("lightbox"),t.dataset.group="article",e.parentNode.appendChild(t),t.appendChild(e)})})</script></main><footer class=footer-global><div class=wrapper><div class=columns><div class=col><h2>Godot Engine</h2><ul><li><a class=set-os-download-url href=/download>Download</a><li><a href=https://docs.godotengine.org>Documentation</a><li><a href=/features/>Features</a><li><a href=https://editor.godotengine.org/releases/latest/>Web editor</a><li><a href=/download/archive/>Release archive</a><li><a href=https://github.com/godotengine>Source code</a></ul></div><div class=col><h2>Project</h2><ul><li><a href=/blog/>Blog</a><li><a href=/code-of-conduct/>Code of conduct</a><li><a href=/governance/>Governance</a><li><a href=/teams/>Teams</a><li><a href=/priorities/>Priorities</a><li><a href=/community/>Communities</a></ul></div><div class=col><h2>Resources</h2><ul><li><a href=https://godotengine.org/asset-library/asset>Asset library</a><li><a href=/press/>Press kit</a><li><a href=/showcase/>Showcase</a><li><a href=/education/>Education</a></ul></div><div class=col><h2>Foundation</h2><ul><li><a href=https://godot.foundation/>About</a><li><a href=https://fund.godotengine.org>Donate</a><li><a href=/license/>License</a><li><a href=/privacy-policy/>Privacy policy</a><li><a href=/contact/>Contact us</a></ul></div></div><hr><div class=credits-and-socials><p>© 2007-2025 Juan Linietsky, Ariel Manzur and <a href=https://github.com/godotengine/godot/blob/master/AUTHORS.md target=_blank rel=noopener>contributors</a>. Hosted by the <a href=https://godot.foundation/ target=_blank rel=noopener>Godot Foundation</a>. Website <a href=https://github.com/godotengine/godot-website target=_blank rel=noopener>source code on GitHub</a>.<div class=social><a href=https://github.com/godotengine target=_blank rel=noopener title=GitHub><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6.0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6.0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3.0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1.0-6.2-.3-40.4-.3-61.4.0.0-70 15-84.7-29.8.0.0-11.4-29.1-27.8-36.6.0.0-22.9-15.7 1.6-15.4.0.0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5.0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9.0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4.0 33.7-.3 75.4-.3 83.6.0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6.0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9.0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a><a href=https://bsky.app/profile/godotengine.org target=_blank rel=noopener title=Bluesky><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M407.8 294.7c-3.3-.4-6.7-.8-10-1.3 3.4.4 6.7.9 10 1.3zM288 227.1C261.9 176.4 190.9 81.9 124.9 35.3 61.6-9.4 37.5-1.7 21.6 5.5 3.3 13.8.0 41.9.0 58.4S9.1 194 15 213.9c19.5 65.7 89.1 87.9 153.2 80.7 3.3-.5 6.6-.9 10-1.4-3.3.5-6.6 1-10 1.4-93.9 14-177.3 48.2-67.9 169.9C220.6 589.1 265.1 437.8 288 361.1c22.9 76.7 49.2 222.5 185.6 103.4 102.4-103.4 28.1-156-65.8-169.9-3.3-.4-6.7-.8-10-1.3 3.4.4 6.7.9 10 1.3 64.1 7.1 133.6-15.1 153.2-80.7C566.9 194 576 75 576 58.4s-3.3-44.7-21.6-52.9c-15.8-7.1-40-14.9-103.2 29.8C385.1 81.9 314.1 176.4 288 227.1z"/></svg>
</a><a href=https://mastodon.gamedev.place/@godotengine target=_blank rel=noopener title=Mastodon><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M433 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.6-28.4-290.5.0.0.0-63.7 28.5-63.7 125.7.0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54a102.5 102.5.0 01-.9-13.9c85.6 20.9 158.7 9.1 178.8 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.1 125.2h-46.6V190.1c0-49.7-64-51.6-64 6.9v62.5H201V197c0-58.5-64-56.6-64-6.9v114.2H90.2c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175z"/></svg>
</a><a href=https://discord.gg/godotengine target=_blank rel=noopener title=Discord><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M524.5 69.8a1.5 1.5.0 00-.8-.7A485.1 485.1.0 00404.1 32a1.8 1.8.0 00-1.9.9 337.5 337.5.0 00-14.9 30.6 447.8 447.8.0 00-134.4.0 309.5 309.5.0 00-15.1-30.6 1.9 1.9.0 00-1.9-.9A483.7 483.7.0 00116.1 69.1a1.7 1.7.0 00-.8.7C39.1 183.7 18.2 294.7 28.4 404.4a2 2 0 00.8 1.4A487.7 487.7.0 00176 479.9a1.9 1.9.0 002.1-.7 348.2 348.2.0 0030-48.8 1.9 1.9.0 00-1-2.6 321.2 321.2.0 01-45.9-21.9 1.9 1.9.0 01-.2-3.1c3.1-2.3 6.2-4.7 9.1-7.1a1.8 1.8.0 011.9-.3c96.2 43.9 200.4 43.9 295.5.0a1.8 1.8.0 011.9.2c2.9 2.4 6 4.9 9.1 7.2a1.9 1.9.0 01-.2 3.1 301.4 301.4.0 01-45.9 21.8 1.9 1.9.0 00-1 2.6 391.1 391.1.0 0030 48.8 1.9 1.9.0 002.1.7 486 486 0 00147.2-74.1 1.9 1.9.0 00.8-1.4c12.2-126.7-20.6-236.8-87-334.5zm-302 267.8c-29 0-52.8-26.6-52.8-59.2s23.4-59.3 52.8-59.3c29.7.0 53.3 26.8 52.8 59.2.0 32.7-23.4 59.3-52.8 59.3zm195.4.0c-29 0-52.8-26.6-52.8-59.2s23.3-59.3 52.8-59.3c29.7.0 53.3 26.8 52.8 59.2.0 32.7-23.2 59.3-52.8 59.3z"/></svg>
</a><a href=https://www.reddit.com/r/godot title=Reddit target=_blank rel=noopener><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M0 256C0 114.6 114.6.0 256 0S512 114.6 512 256 397.4 512 256 512H37.1c-13.7.0-20.5-16.5-10.9-26.2L75 437C28.7 390.7.0 326.7.0 256zM349.6 153.6c23.6.0 42.7-19.1 42.7-42.7s-19.1-42.7-42.7-42.7c-20.6.0-37.8 14.6-41.8 34-34.5 3.7-61.4 33-61.4 68.4v.2c-37.5 1.6-71.8 12.3-99 29.1-10.1-7.8-22.8-12.5-36.5-12.5-33 0-59.8 26.8-59.8 59.8.0 24 14.1 44.6 34.4 54.1 2 69.4 77.6 125.2 170.6 125.2s168.7-55.9 170.6-125.3c20.2-9.6 34.1-30.2 34.1-54 0-33-26.8-59.8-59.8-59.8-13.7.0-26.3 4.6-36.4 12.4-27.4-17-62.1-27.7-1e2-29.1v-.2c0-25.4 18.9-46.5 43.4-49.9 4.4 18.8 21.3 32.8 41.5 32.8zM177.1 246.9c16.7.0 29.5 17.6 28.5 39.3s-13.5 29.6-30.3 29.6-31.4-8.8-30.4-30.5S160.3 247 177 247zm190.1 38.3c1 21.7-13.7 30.5-30.4 30.5s-29.3-7.9-30.3-29.6c-1-21.7 11.8-39.3 28.5-39.3s31.2 16.6 32.1 38.3zm-48.1 56.7c-10.3 24.6-34.6 41.9-63 41.9s-52.7-17.3-63-41.9c-1.2-2.9.8-6.2 3.9-6.5 18.4-1.9 38.3-2.9 59.1-2.9s40.7 1 59.1 2.9c3.1.3 5.1 3.6 3.9 6.5z"/></svg>
</a><a href=/rss.xml title=RSS target=_blank rel=noopener><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M64 32C28.7 32 0 60.7.0 96V416c0 35.3 28.7 64 64 64h320c35.3.0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM96 136c0-13.3 10.7-24 24-24 137 0 248 111 248 248 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-110.5-89.5-2e2-2e2-2e2-13.3.0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24 83.9.0 152 68.1 152 152 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-57.4-46.6-104-104-104-13.3.0-24-10.7-24-24zm0 120a32 32 0 1164 0 32 32 0 11-64 0z"/></svg></a></div></div></div></footer><script defer src=/assets/js/localize.js?5></script><script defer src=/assets/js/tobii.min.js></script><script defer src=/assets/js/highlight.min.js?1></script><script defer src=/assets/js/highlight.gdscript.min.js?1></script><script>document.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll("pre code").forEach(e=>{hljs.highlightBlock(e)}),document.querySelectorAll("[data-post-date]").forEach(e=>{Date.parse(e.dataset.postDate)>Date.now()-1e3*60*60*48&&e.classList.add("post-recent-highlight")}),new Tobii({zoom:!1});const e=document.querySelectorAll(".set-os-download-url");for(let n=0;n<e.length;n++){const s=e[n];let o="download";"version"in s.dataset&&s.dataset.version==="3"&&(o="download/3.x");let t="windows";navigator.platform.indexOf("Mac")!==-1?t="macos":navigator.userAgent.indexOf("Android")!==-1?t="android":navigator.platform.indexOf("Linux")!==-1&&(t="linux"),s.href=`/${o}/${t}/`}})</script>