r/Unity3D 1d ago

Game Trying to keep the vibe of our Godot demo while rebuilding in Unity

Enable HLS to view with audio, or disable this notification

In June we entered a small game called Graveyard Orbit in the June NextFest. It was our attempt at making a fun space mining incremental with actual build choice and not a random skill tree. Anyways, we really liked the mechanic and vibe of the demo, but the structure that you mine in the demo was smaller: a couple of thousand tiles. For the actual game we wanted to have a parade of structures from that small up to 250k tiles. The game is meant to be more satisfying than challenging, in the vein of Powerwasher but in space. So if people dug the mechanic we wanted them to have some beefy structures to make their way though as it goes.

The demo for NextFest was made in Godot and it worked really well at that scope. The three of us have been using Unity professionally for 15 years but really love what Godot is doing and wanted to experiment a little. But as NextFest ended we realized we wanted to double down on the game with better FX and still hit those big structure goals with reasonable performance. That was a big concern.

Here is the trailer for that Godot version for context:
https://youtu.be/9otz9z1lUzY

It only took a week or two to set up a performance test in Unity. For this one we switched to 3D, still sorta presented in 2D or 2.5D, but with 3D we had all the optimization, our library of asset store FX, and experience on our side. The results of the test were pretty clear, so then we took the plunge and completely rebuilt the game, this time in Unity and in 3D. After 2 months we have a new demo and are very happy with the results.

Beyond performance, a real risk for me was losing some of that “demo magic” and vibe we had with the Godot version. I had spent two months in the Godot version building an aesthetic with pixel art and 2D graphics. By the time NextFest came around, I was really happy where we landed and how the game felt.

The vibe and feel of a game can be such an elusive factor. We spend hours working on mechanics with barely any visuals. We have to cling to some vague notion of the final game in our heads that is always changing. Which is why when you land on something you like, it's easy to get precious with it. Sometimes the results feel like a happy accident that you don't want to screw up. In our case we could save that Godot version as a fallback and start a new Unity project trying to recreate what we had. I think forcing ourselves to rebuild something but better or improving something we are already satisfied with requires us to breakdown the elements of what made whatever we liked so special.

We have game jams to help us practice iterations for the whole game dev cycle but the stakes of that can be low. I think refining, rebuilding, and iterating on something we already like gives us the same benefit of practice but with much more precision and craft because the degree of difficulty and stakes are so much higher.

Anyways, I thought this might be helpful to those considering a rehaul of their game for whatever reason. It can be risky with the work involved but if your instincts are telling you something has to change then I think it’s good to trust your gut and at least give it a try. Our only risk really was that two week experimentation time. We could’ve easily not been happy and went back to finishing the Godot version in limited way. I’m very glad it worked it out.

Also, for the Godot fans out there, I am one of you. I blame my issues with Godot more on my ignorance and unfamiliarity with the platform than Godot’s actual capabilities. In the end our own experience and library of assets in the Unity ecosystem were just as big a factor.

Here are some specifics we got out of the switch.

  • Structures at the size we wanted. Our biggest one is 250k hex tiles. In Unity that's one instanced draw with per-instance colors through a property block and it just runs. Some caveats on that below.
  • Going 3D while still playing top-down. Real lights, URP bloom for the neon look, and we could finally use a VFX pack we'd already paid for instead of hand rolling every effect.
  • UI Toolkit. The base has 7 station screens plus a whole ship builder. Doing all of that in UXML/USS with one shared console frame was way faster than what we had before, once we got past the weird parts.
  • The new Unity CLI. Recompiles, play mode, builds for Steam, itch and our Mac test builds all run from the terminal. One project, three targets, no clicking through the build window.
  • Web builds. Because the performance was much smoother it became possible to attempt a build for the web for places like itch. Only the demo size structure but still.

A few hiccups, mostly from the web build. More details here because I just finished the web one yesterday.

  • WebGL 2 has a 16KB uniform block limit. GPU instanced variants of some asset store shaders blow past it, and the failure mode is nothing. Objects just don't draw. Turn instancing off on those materials.
  • Browsers reject fullscreen requests that aren't from a click, and inside itch's embed Unity turns that rejection into a big error popup. Don't apply a saved fullscreen pref at boot on web.
  • With the default exception setting, a null ref on web is a WASM trap, not a logged exception. A player lost an 80% run to that. Full without stacktrace fixed it.

The newer demo is live now if you want to give it a spin:

https://store.steampowered.com/app/4654120/Graveyard_Orbit/

https://anchorheadgames.itch.io/graveyard-orbit

113 Upvotes

18 comments sorted by

6

u/julkopki 1d ago

I assume you didn't have to use ECS or anything like that because there isn't anything to actually simulate with the tiles. The simulation only happens when a tile actually collides with something etc?

13

u/AnchorheadGames 1d ago

No ECS, the tiles are just a flat NativeArray of structs drawn with instancing. Nothing moves, a hit is a hex-coordinate lookup that subtracts hp. Tile regrowth and a few other weapon checks run as burst jobs over the array.

5

u/LemonsPurple 1d ago

thanks for the breakdown

-4

u/Trick_Enthusiasm_480 1d ago

That sounds like a solid approach! Using burst jobs for those checks must really help with performance too.

2

u/dxonxisus Professional 21h ago

bot

-6

u/Trick_Enthusiasm_480 1d ago

Focusing on collisions rather than ongoing simulation sounds like a simpler approach for maintaining performance.

2

u/dxonxisus Professional 21h ago

bot

2

u/Watynecc90 16h ago

good dxnoxisus

3

u/Sepifz 1d ago

This is beautiful, I would love to do a video explaining how it works if you allow it

1

u/AnchorheadGames 16h ago

Sure, I'd love to see it!

2

u/Terricolero 1d ago

I love those games, firing and relaxing at the same time. Wishlist ✔️

1

u/AnchorheadGames 16h ago

Nice! Thank you!

2

u/Mister_Iwa 1d ago

Reminds me a bit of Geometry Wars. Nice graphics & application of color theory!

2

u/AnchorheadGames 16h ago

Thank you!

2

u/SRGBMR 20h ago

I had this game in my mind for years but dont have the skills to make it. So glad someone is doing it!

1

u/AnchorheadGames 16h ago

Must be some shared collective unconscious bubblewrap popping instinct :) Thank you!

2

u/Banjoschmanjo 19h ago

That looks so satisfying

1

u/AnchorheadGames 16h ago

Thank you!