Unfinished 3D version of Hoppy Days

godot
#1

I decided to try translating the Hoppy Days lesson to 3D. It’s not finished, but it seems to work.

I’ve done stuff with 3D Areas before, so I feel completely satisfied that the coins and enemies from Hoppy Days could be made with minimal changes. I don’t know if I will actually try to finish it. I’m not a big fan of platformer games in the first place, I just wanted to get a taste of 2D-to-3D translation.

Some thoughts:

Godot’s Gridmap, the 3D equivalent of Tilemap, didn’t work very well. The Gridmap pieces lost their materials on being converted to Gridmap. You can assign materials after the Gridmap already exists, but then your preview images are not updated. There’s probably a solution in how you export them from Blender, but I think my dream of just exporting a single cube and assigning it different materials would not work.

For the jump animation, I used some math and the seek() function to make it play a stage of animation based on the current air speed. Another way to do it might be to play a Jump animation when the jump button is pressed and then queue a falling loop animation.

I was hoping I could just slap the same parallax background onto the 3D scene, but alas, no, it is not so simple. I managed to basically get a GUI image to be the background, but it does not move. The ideal thing would probably be to put actual 3D things off in the distance.

I chose to rotate the character 180 degrees when facing the other way. I think using a negative scale might be better. Of course, I could also make an extra animation for walking the other direction, but that seemed like a pain. It would be nice to have a smoother transition when turning.

3D physics values are WAY different from the 2D ones. Everything needed to be less than a tenth of the 2D game values. The first time, my character moved so fast, she actually started melting, which was a thing I didn’t know could happen.

1 Like
#2

Nice work! Thanks for the insight!
I especially like the idea of using seek() to play the animations differently depending speed :+1: