Hacker News new | past | comments | ask | show | jobs | submit login
What's new in C# for Godot 4.0 (godotengine.org)
151 points by __natty__ on Feb 26, 2023 | hide | past | favorite | 105 comments



Any godot programmers here. How is godot's support of games in the browser?

4 years ago I was deciding on a game engine to use. I considered it to unreal, Unity, and godot. I want to be able to build games that can be played on the web. I have many fond memories of the Flash game days. Distributing games over the web allows me to share games with people without the friction of installers, or App Store gate keepers, which I think is super cool. At the time, only Unity supported web. I decided to go full in on Unity.


We made https://rocketbotroyale.winterpixel.io in godot 3.5. ~ 20MB wasm binary, ~20MB game assets. We did however, have to do a ** ton of engine modifications to get the performance characteristics we needed on web, so mileage may vary depending on what you are actually building. But overall, 3.5 supports web very well. 4.0 is too unstable for us to use it yet, so jury still out on that one.

But the absolute, most amazing thing ( coming from the anxiety of app 'submissions', going through 'reviews', etc ), is the ability to update/fix/hotpatch everything instantly. Like within seconds. We have a simple CI/CD workflow that builds, updates & deploys a new godot site ( with dedicated gameserver backends) within seconds. The ability to just do this however you want, whenever you want, without going through some kind of platform distribution interface is great. With the exception of WGSL being such a dumpster fire of a spec, I'm pretty bullish on web for gamedev & distribution. There's some really great stuff being built right now, see: wasm+webtransport+wgpu


I want to say I'm a big fan of this game, simple and really fun! Good job!


Do you see any use cases to include WASI into your godot gaming support? Maybe midi music too.


That question interests me too, because I would imagine it would do quite well. Godot's failings seem to be ones of omission, as a rule, and having less built in might help in browser-based games, because there would be less to download to get started, while still allowing for the basics in many classes of game. I know it's strong on 2D.

I don't know for a fact it's lighter than say Unity, it just seems like it would be. Anyone with more direct experience here?


I have written a few games in Godot, which also work in the browser for Ludum Dare. [1] Works great, 2D and 3D, with small differences, but I can only speak for GDscript. I'm not sure if C# exports are working.

First and foremost: Build time for all export targets together (windows. linux and web) takes less than 10 seconds and usually just work.

Some things like GPU particles had to be replaced with CPU particles and I remember that some texture compressions were not properly supported. But other than that, it mostly works out of the box. Can only recommend.

[1] https://ldjam.com/users/zubspace/games


The binaries produced just for the engine itself (so exluding the game code and assets) is already several MB large when compressed with brotly or gzip [1]. So it works, but it's too large to be competitive enough on web games portals. Most players will just go play another game if it takes too long to load (download). Only JS based game engines and to some extend Defold are good enough in this regard.

[1] https://github.com/godotengine/godot/issues/68647


Note that the article mentions ahead-of-time compilation and binary size trimming as one of the explicit goals of this version.


Specifically if you're using .NET, that wouldn't apply to GDScript the same way.


It has been excellent, best browser game engine imo - however as of Godot 4, the web export is completely broken, unfortunately. Godot with C# straight up has no web export and no mobile export atm, just desktop.


> best browser game engine

> web export is completely broken

> Godot with C# straight up has no web export

Hmm, something is amiss here... They're already on RC5 and web export not working doesn't sound like the web platform is a focus of theirs. AFAIK, the web export being broken is not mentioned in "Known Issues" about V4 either.


Web Export for 4 is fine, just not with C#. That may be the same thing to some people, but there is a distinction.


No, it's not fine. It's broken on Chrome for macOS and freezes on startup for about 10-20 seconds. Has nothing to do with C#, this happens with GDScript, too. It's a known issue, has been discussed at length on Github (by myself as well) and there is no fix in sight at the moment.

I would consider that broken.


In the Runtime Changes Section: "Mobile and web platforms are not supported at the moment, and will be worked on for a future Godot 4 release." / "For the mobile platform specifically we are going to use the Mono runtime."


> AFAIK, the web export being broken is not mentioned in "Known Issues" about V4 either.

It may be outdated since the reason it no longer works is because of these C# changes, as mentioned in the article.


Regarding Godot 3.x and HTML5 export. Users reported crashes with GLES3. It seems stable rendering is based on GLES2 (WebGL v1.0). Some features don't work in HTML5 (e.g. "Some features are also not supported in WebGL 2.0 specifically."[1]; "built-in antialiasing will not look correct for translucent lines and may not work on certain platforms" [2])

[1] https://docs.godotengine.org/en/stable/tutorials/export/expo...

[2] https://docs.godotengine.org/en/stable/classes/class_canvasi...


Does anyone actually play games in the browser? I mean, there is no technical reason not to, but I kinda find it strange.


Yes, lots of people do. Not as much long story based games, but more arcadey/casual games. This is especially common for kids using computers at school. Just think about all the old Flash games, that style of game is still popular.


Sorry if my question was worded badly. Obviously, some people are playing games in the browser - perhaps I should have asked more specifically what the appeal is, e.g. is it mostly small casual games like what Flash used to be used for, or do people actually play more invested games?

And sorry again if the answer to these questions is so obvious to some of you that the question itself sounds dumb, but I'm simply not experienced with this topic.


Browser based games are huge (often with kids). A lot of of popular games cluster on .io domain names. Shell Shockers has been a big FPS:

https://shellshock.io/

And there is a whole genre of multiplayer things eating things to get bigger:

https://agar.io/

http://slither.io/


Running games in the browser provides a bit of convenience of not having to download and run a platform-specific executable. There might be some security benefits too.

Depends on the nature of the game though. It works best for games that are lightweight and stateless.


Sure, this was clear to me too. My question was not so much about the advantages of browser games but rather if they actually have a market.

And speaking of that: what are the main monetization schemes? Are browser games sold like other games? Or are they mostly ad-based like other web content?


As one data point: https://itch.io/games currently lists 729397 games, 844 of which are tagged HTML5. It's nonzero but I guess it's not that big. But https://itch.io/games/html5 lists 301816, I am not sure how to reconcile these numbers.

Some of those are accepting donations, but I can't tell if they are profitable.


Lots of indies like to make their games available and easily playable (e.g. no download) during development on itch so for that use case, yes, it's important.


That sounds cool and interesting - so, the idea is to eventually sell the final product as a stand-alone game, but target the browser for development versions from the same source code?


„ we now use the .NET SDK to embed the .NET runtime. This means we use the CoreCLR runtime for desktop platforms”

Wow this is huge! Seems like Unity is lagging behind and their journey for CoreCLR just started.


Hobbyist unity dev here. Can anyone explain the mono/coreCLR commentary in this comment thread?

I recently learned that mono works kinda like an interpreted language. This makes sense I think because the internals of unity run C++ code; the C# code is just an interface into the C++ parts of the engine.

I haven't done a deep dive into .net ecosystem ever. I probably should at some point. Since I only work in unity and since unity doesn't really play well with the .net ecosystem (e.g. one installs nuget pkgs by downloading the nuget file directly from the website, renaming the file extension to "zip" to then extract the files, and then copy DLLs into an "editor" folder in your project files), I haven't had as much of an incentive.

Today I work as a cloud engineer largely focusing on infrastructure set up, and writing GO/bash code for various bits of automation. Before I worked in scala/Java, and before that node.


Mono and coreCLR are two alternative implementations for .Net runtime. Just like Firefox and Chrome are two implementations for various web formats, or CPython and PyPy for python language and many other examples.

Note in this comment I might be slightly imprecise with the use of naming since the specification, standard library, runtime can be separate projects each with its own name. But often multiple of those parts are made by same people so it can be a bit confusing especially with the way Microsoft names them with various capitalization.

Mono started as open source implementation of .Net and means to run C# on Linux when the Microsoft implementation of .Net was fully closed source and worked only on Windows. At that point it made sense for Unity to use whatever open source implementation of .Net they had access to which was mono. Years have passed and a lot of things have changed. At some point Microsoft bought Xamarin(the company that is main contributor/maintainer for mono project).

On the other side coreCLR is latest implementation of .Net from Microsoft. Unlike earlier versions of .Net from Microsoft it is open source and compatible with Linux and macOS.

As with many languages one of the implementations (the one made by inventor in this case Microsoft) is the leader, while others are playing catch up both in terms of new language feature support and also quality and tooling. Such situation is hard to avoid because developers of one implementation are making whatever they want while being sponsored by big company. While the others are trying to implement something that's more or less compatible with leader while having much smaller budget.

In the early days mono at least had the benefits of being open source and crossplatform compatible. Now they have lost this advantage. Even worse, the main contributor of mono is owned by Microsoft so there is high chance that they will slowly kill it in favor of their own implementation. Since the coreCLR is the primary implementation made by Microsoft it will more likely have much better integration and compatiblity with all the developer tooling made by Microsoft (Visual Studio, debugger) , better compatiblity with various third party .Net libraries, better support for new language features.


FYI, Mono was largely folded into CoreCLR a couple releases ago, and is currently used when deploying to certain targets - for example WebAssembly.

[disclosure: I work on Mono at Microsoft.]


This is helpful. I didn't realize Xamarian was a company!


Unity is still using Mono?

The CoreCLR should easily perform twice as good as Mono in many cases.


Yes and no, Unity uses its own fork of Mono. When .NET evolved it keeps on using the forked mono and apparently CoreCLR is one of their priorities accordingly to blogpost here https://blog.unity.com/engine-platform/unity-and-net-whats-n...


They use their own heavily optimized Mono runtime that is .Net Standard 2.1 compliant and supports all C# 8 and many C# 9 features.

As a C#/.Net developer I'm satisfied with the C# and .Net support in Unity. The pain points are elsewhere.

https://docs.unity3d.com/Manual/dotnetProfileSupport.html

https://docs.unity3d.com/Manual/CSharpCompiler.html


> The pain points are elsewhere.

Not sure if this is what you mean but one huge pain point for almost every dev is that code changes necessitate a project reload, which, even with domain reload can be extremely slow and gets worse the larger the project becomes.... which is why I'm extremely exuberant about the new hot-reload plugins which allow editing code while a project is running and changes will be patched in real time! For me it's comparable to when SSDs first came out, finally we were able to ditch slow spinning rust. I've been using it for a couple days now and I've probably already saved a few hours.

I've been using HotReload.net which is free for Unity Personal Edition but there's also an asset on the store for ~40€ but i haven't looked at it yet.


As a developer on one of larger Unity games - yes, there are paint points elsewhere. There are many pain points. The poor performance of Mono/IL2CPP is a significant one for us. We have a different game built on .NET (Core) and performance is significantly better.

I also wouldn't call Unity's Mono 'heavily optimized' because they definitely trail behind standard Mono. Unity doesn't even support Mono's generational garbage collector but it has been the default in Mono since 2016.


Out of curiosity what engine are you using that leverages .NET (core) ? Stride?


It's an engine written in C++ (not Unreal) that we've added C# scripting to. So it's in the same kind of situation as Unity where their engine calls from C# land need to be marshaled into calls to native code and back, which of course has overhead.


> Unity is still using Mono?

https://docs.unity3d.com/Manual/Mono.html

Seems so. In fact, not just Mono but their own fork of Mono.


They have to use Mono. New .NET Core Runtime does not yet support all platforms that Mono used to support, and won't for a while.


You can use mono for targets that need it and .NET 6 for those that don't


Keeping two implementations side by side would be expensive to maintain and not a good user experience: you start writing nice, "modern" .NET6 code and then need to rewrite things to run on top of .NET4-ish (and the older BCL and C#).

And I think .NET6 supports mobile now?


Mono was largely folded into CoreCLR a couple releases ago and part of that infrastructure is used to support some targets like mobile and WebAssembly.

[disclosure: I work on Mono at Microsoft.]


Yet Godot manages it, with a volunteer team and a better overall user experience.


CoreCLR is not built for game, the fork from Unity is so there is little chance that CoreCLR is faster.


Sorry but that makes no sense. Here are quotes from the C#/.NET group director at unity about how the migration to CoreCLR should bring a large perf boost: "One thing that should help in the future is the migration to CoreCLR that should provide a great boost in terms of performance."[1] "What we have seen, outside of Unity, is that performance with CoreCLR compared to Mono should range from 2x to 10x faster." [2]

[1] https://forum.unity.com/threads/performance-optimizations-fo... [2] https://forum.unity.com/threads/expected-performance-of-new-...


"outside of Unity"


Because unity is not yet on CoreCLR. But unity shouldn‘t be much different to other applications. Jetbrains moved Rider only a few years ago to .NET Core, and everything became much snappier (it was on on .NET 4.x on windows and on mono for Linux/Mac before, which was even slower than the windows only full framework)


This claim would make more sense if the Mono was heavily optimized specifically for games, which is not the case. CoreCLR is heavily optimized period


Exactly. For ASP.NET they also optimized latency heavily.


What are the specific requirements for games? C++ is also not built for games. It’s built for anything, including games.


Consistent low latency, perhaps.


I don't see a lot of options how you should optimize that, besides using allocation free code. .NET (Core) did a lot of work into this direction for Kestrel HTTP server already (Span, ref structs). It's still a managed platform with a garbage collector, but I don't think games have such low-latency requirements, that can't be handled with the standard garbage collector. A few milliseconds are usually fine for games, even with 120Hz the time between two frames is still 8ms. And garbage collection can be suspended during critical phases.


Is it also webscale? /s


This is not correct, as can be readily proven to yourself by measuring.


Unity has a full toolchain with AOT compilation for many more platforms than Godot supports, plus HPC#, DOTS, rendering jobs and pluggable rendering pipelines.


I started learning Godot 3 a while back, however Godot 4 seems very promising, especially because of the built in LOD support, which feels ahead of even what Unity provides (since these would be automatically generated, a bit like in Unreal): https://docs.godotengine.org/en/latest/tutorials/3d/mesh_lod...

Now, Godot 3 still had a plugin for similar functionality, except for the automatic generation (so close to being on par with Unity in that regard), I even ported it over to C# in private: https://blog.kronis.dev/articles/porting-the-godot-lod-plugi...

However, while the older version might be more stable for now, such as having mobile and web export, it's also pretty clear that migrating to the newer one once it comes out will actually be a good idea, also because of the new improved 3D rendering in general.


It’s surprising to me that javascript wasn’t chosen as the scripting language for all these gaming engines. Though I do see the benefit of C# being typed and compiled.


I, for one, am very glad Javascript wasn't chosen as a scripting language.


JavaScript doesn't have value types or operator overloading (also applies to Java) - this makes writing vector math pretty shitty imo - and you're working with vectors all over the place in games.


How does it help with vector math?


I would imagine operator overloading helps with vectors so you can do things like:

    public static Vector operator -(Vector a, Vector b)
    {
        Vector v = new Vector();
        v.X = a.X - b.X;
        v.Y = a.Y - b.Y;

        return v;
    }
So then you can just write:

    Vector result = myVector1 - myVector2;


Also if you wrote the JS equivalent of that, each vector would be 3-4 individually heap-allocated doubles in v8, because they aren't able to allocate floating-point values inline. There would also be a new heap allocation for the result vector itself when performing each operation. The overhead really adds up. :/

At one point Mozilla had a prototype implementation of strongly-typed value types in JavaScript, but it fell by the wayside once WebAssembly became a thing.


You can use an array to keep the doubles together. V8 has something like half a dozen different array types, depending on what is inside and how it's used.


Why not implement a method?

var result = myvector1.sub(myvector2)


Operator overloading makes simple math cleaner, but that's just a nice to have.

The real kicker is value type semantics. You have two options with reference types : you can either do math in-place or allocate on each operation. First option is a huge foot gun because the ownership is unclear it's super easy to share references to something and update something unintentionally. And it can be hard to track down. Second option is super taxing on GC. And the overhead of going through reference for simple 3 float tuple (and object type info, etc.) is large - but for large arrays you can sort of work around it by primitive arrays. But that's like hand rolling assembly and you're supposedly using a high level language.

C# with structs and operator overloading is an ideal high level language for gamedev - most of the time it's really ergonomic and high level, but it has the tools to get down to memory layout control without it looking like disassembled code.


It's mostly a historical accident, like Python ending up as the data science language.

Microsoft XNA used to be a popular indie game framework that used C#. Stardew Valley, Celeste and Terraria run on XNA.

Mono used C#. Xamarin used Mono to create a cross-platform application framework that worked on mobile. Unity leveraged Xamarin to create a cross-platform game engine that worked on mobile, ending up using C#.

Thus, two generations of indie gamedevs ended up learning C# to create games. Then Unity grew a whole lot, so more and more people ended up associating C# with game engines, so as soon as Godot was released people started asking for C# support.

But C# being the language of choice doesn't really depend on specific C# features. It could've just as easily been Lua or JavaScript instead. For example, RPG Maker moved from Ruby to JavaScript when they upgraded to a new engine, again, because their new rendering engine was nw.js, and getting it to run almost anywhere was easy.


I'd argue that the availability of value types in C# gives it a leg up over languages like JavaScript for performance-sensitive games work. These days v8 and spidermonkey have incredible garbage collectors capable of incremental/parallel collection so people have been able to ship JS-based games on PC+Console, but when it comes to game scripting it's either languages with value types like C#/C++ or languages with more predictable garbage collection behavior and performance like Lua and Ruby (Ruby especially is popular with Japanese developers, likely because the language originated over there.)

C# being possible to mostly AOT compile (some exceptions) is also an advantage over JS for scripting since JS is not particularly efficient to run in an interpreter and many deployment targets don't allow you to JIT code at runtime. Languages like Lua have much better characteristics for those targets since they have high performance interpreters and cleaner language semantics.


I'm completely uninformed about lua, but why isn't it being used more to build games then? I know it's a popular scripting language for games, but are there any engines that mainly use lua (in the same way Unity uses C#)?


Lua very much hit a sweet spot in terms of performance and flexibility for proprietary codebases over the last twenty years. One or two programmers can embed it into an application and expose bindings for designers rather quickly. It’s kind of a min/max of flexibility and engineering work.

As engines became larger products, companies often have the resources to make something bigger for game teams. Unreal’s Blueprints, or Godot’s GDScript integrate much more tightly with the engine’s runtime.


Lua is very widely used despite the fact that Unity and Unreal don't support it.


I don't see this at all. game devs on average want to be closer to the hardware and JS is even farther from it than c# (and c# has added more ways to do things like traditional pointers when you need to squeeze even more performance out). Lua you can certainly make an argument for because LuaJIT is insanely fast.


I don't think game devs on average want to be closer to hardware. Game engine devs, sure; but the average game dev would like to use a higher level language that interfaces to the c/c++ stuff that game engine devs are pushing out.


aseo is right, of course, but even with game engines it depends on the game. Modern hardware is fast enough that you can get away with a lot. Minecraft used to be written in Java, 2D games that aren't Dwarf Fortress can be written in practically anything.

If you're an indie dev you usually don't want to strain the hardware with extremely complex models and textures and rendering pipelines, because you don't have the money to produce or source these models and textures.


Everyone who uses javascript has to write it in a superset language that has sane types, a (poorly implemented) standard library, and other features javascript lacks, and treat it like a batch of volatile chemicals because outside of its specific niche of scripting the DOM, javascript is a terrible, unstable language at best adequate for purpose, a necessary evil because the web doesn't support anything else (barring WASM.) Gamedev isn't (necessarily) tied to the browser, so why not use a better language to start with?

That said, there are forks of Godot that support JS/TS but I don't know how up to date or ready they are.


> so why not use a better language to start with?

Perhaps consider that for many programmers, TypeScript is JavaScript, and TypeScript is that better language. I've put a decent amount of thought into using TypeScript for games because it allows for a flexible, expressive data model in a way that few other languages do. The performance might be a problem for some flavors of games, but I'm interested in discrete simulations almost exclusively, where it doesn't matter at all. But TypeScript allows effectively encoding intent into data structures and into code in a really ergonomic and pleasant way, while also running on virtually every gaming platform on the planet.

(Rust, etc. are fine. If that's your bag, that's great. I'll write Rust if I need to, but I don't enjoy it, and don't seek out opportunities to write it.)


In don't know what you mean by discrete simulations but I would expect simulation games to be more performance intensive because of unbounded complexity vs say an FPS game.


"Discrete simulations" are things like turn-based strategy games, roguelikes, and so on. You can think of it as "automated board games" in a lot of ways.

https://en.wikipedia.org/wiki/Discrete-event_simulation

In truth, I think V8 is almost certainly more than fast enough for real-time games (real-time in the gaming sense, not in the OS sense); Mono is fast enough for Unity, even, and Mono is creaky and slow, with a really poor garbage collector, on its best day. But for the stuff I'm interested in, I just don't care at all.


Typescript as its own thing, with real types, not compiling to JS or being limited to its semantics, I could get behind as a language for game scripting.


Is there a use case for WASM here and rust for example to run games in the browser?

There are game engines written in rust Bevy for example


C# has :

- easy interop with native programs/libraries

- modern language features (pattern matching, async, and many more)

- Strongly typed


i'm glad javascript isn't the scripting language chosen, as C# is very much superior, and would run faster!


Not really surprising. JavaScript-the-language is missing lots of features that could be useful, like operator overloading. Or any overloading, really.

Nothing is stopping you from compiling JavaScript though, browsers do it. The lack of static types makes this harder, of course.


Suppose you could use typescript and compile that?


Yes and no. Yes that's possible but no, this is no longer (full) TypeScript. Check AssemblyScript on that topic, it's TS to WASM. Most of the dynamic code stuff isn’t allowed and, of course, there’s a different standard library underneath.


Unity used to have a JS interface, where one could either write their game object components in JS or C#. They deprecated the JS interface.

I imagine it was too much work to support two languages? As a dev reading docs, I used to have to deconflict the parts of the docs talking about JS from C# (not difficult as an experienced dev -- I wonder how the first timers fared). I'd also have to translate advice from JS Unity programmers into C# when researching how to do certain game things. I'm sure JS Unity devs had to do the same with C# advice.

I'm happy they aligned on one language. If JS had an optional type system baked into the language, I think it would be a better choice. However; it doesn't.


I think it was more that Unity's "JS" was actually their own language that was just very similar to real Javascript. They were forced to support the language itself as well as the integration. It was a lot easier to just support C#, which is maintained by others.


Hmm. Cocos Creator manages JavaScript/TypeScript ontop of their bespoke (ios:Obj-C++, Android: Java) + C++ native stack and they don't have that many engineering resources. Granted, they did have multiple breaking non-backwards compatible re-architecturings of their engine(s), along the way.


Cocos is likely using actual JavaScript. When I used Unity's JS dialect (a very long time ago, to be fair) it was very much not traditional JS and was its own beast, so Unity likely was having to do a lot of work on it.


UnityScript wasn't actually JavaScript, but a custom .NET language with a JS-like syntax, largely incompatible of course. Naturally people wanted to use C# instead.


All I really want is a decently performant 2D immediate mode rendering library with a decent console supported JavaScript/Typescript runtime. I’d love to see something like this pop up in the Deno ecosystem.


"The main change for C# support is that we moved away from the Mono SDK and we now use the .NET SDK to embed the .NET runtime"

And .NET 6. Terrific work. Unity still isn't taking industry seriously so it's terrific to see viable alternatives.


>>> Unity still isn't taking industry seriously

What does this mean?


They laid off 300 developers including some of the most experienced ones.


They are still recruiting, at least in Montréal. A friend of mine just got a SWE position there, so I think the layoffs were more due to a strategic shift away from side ventures than actually cutting from their core product.


So Google, Microsoft, etc. are taking the industry even less seriously?


I guess Microsoft and a couple of AAA studios aren't either than .


An easy example would be to look at moving to a multi csproj structure. The desire is to have business logic and unit tests in their own projects, for example. Unity forces you to have them jammed in the monolithic singular project with everything else. I don't want to ship tests to production, and I don't want to have to build everything just to run some tests, particularly automated tests done on a build server.

Unity marches on with little to no interest in enterprise development and quality processes, which is a shame.


Maybe I'm misunderstanding what you're looking to do, but you don't need to ship tests? Just use assembly definition files (asmdef)


Unity has supported multiple csproj solutions since 2017, through asmdef.


Does this impact the required code? I remember checking out the samples and much preferring the syntax of the native script given the C# is full of GetNode<Button>().op() as opposed to Button.op() in the native.


According to the article, yes:

> In the past, Godot has used reflection to communicate with the engine. This has worked great so far but it comes with some limitations. We now use source generators, which have the following benefits...

It doesn't show what the code looks like but mentions the code has a different syntax and is more performant.


I don’t know about Gondot, but with C# source generators it should be easy to generate a typesafe and clean way to access


Godot is increasingly becoming really interesting to me. It seems to be working its way towards the engine for developers who design (as opposed to other engines which seem to be for designers who develop).


[elf/linux] vulkan and guidelines/build container to workaround (modules/version)&(symbol/version)s based aggressive planned obsolescence from glibc libs and the static libstdc++ (-static-libstdc++).


Really impressive changes here. Godot's C# support has been one of its weaknesses compared to Unity.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: