I’ve started a FaceBook Group for the development (if possible) of a slow game with communal interaction for seniors. It’s 3D MMO retro. The group is for crowd-designing it, so any advice or contribution welcome. It’s aimed at the over-70s in the UK. Go see “Retirement is a Game UK”
very slowly digesting the Godot manual. It looks like GD script will do everything I need. The FB page is expanding with my ideas but there’s absolutely no interest in this concept from anyone else. Well, I can wait …
still reading and slowly digesting. What I want to do isn’t covered, so I have to ask this community for basic help.
A man walks down a street … My naive assumption is that the street sides and the pavement are all 2D canvas layers with canvas items drawn over them. Like scenery flats on a stage. A character3D humanoid traverses the street using autonav for the X-Z path and “bump and slide” for Y to negotiate the slope of the pavers up/down hills. Looking along the street, the end view is another canvaslayer2D at right angle across this street? Or am I getting this completely wrong?
You would use a Characterbody2D and only navigate on the x-y plane.
You could also look into a 2.5D game. That’s where you have a 3D environment and a 2D character. Here’s an example of a 2.5D game I did for a game jam to give you an idea of what that looks like: Dash and His Ghost Girlfriend by Dragonforge Development
Coming from this post
You could stick a 3d character into a 2d world using a sprite2d and a subviewport set to transparent background. The viewport will have a 3d camera viewing a 3d character. The sprite2d would be a child of a character2d and will move the character around the screen.
The alternative is just do it all 3d with an orthogonal orthographic camera to remove perspective distortion for 2d elements. This is how unity does things.
At the end of the day its all 2d on your screen.
Cool, I didn’t know that.
Thanks. So Dash is a 2D character? I’d rather a 3D. Sounds like I have to go all 3D then.
That sounds good. I expected a sub-viewport to be needed somewhere. Character2D > Sprite2D > subviewport > Char3d > skeleton3D. I suppose all the background street scene and paving is behind the viewport? Sprite2D would do all the navigation? Skeleton and 3D viewport just follow the sprite? Do I get that right?
Or is it just easier to do all-3D. Flat basic mesh for walls and floor.
The reasoning behind 3D-over-2D is to save GPU work. This simulation is likely to be played on ancient technology, given the target player age of 70+
Last i saw a youtube image about placing characters in a 3d world.
You can use a big image where each pixel stands for a spot in the world
Each pixel color tells what’s going on there like who’s standing where or what type of action is happening
You use the R G B A channels to store data like player ID direction health or if it’s moving
The GPU can read and write to this image super fast
So instead of checking every player with the CPU the game just looks at the pixelmap
The pixel at 240 133 might mean player 24 is walking north with 88 health
This way you can handle hundreds or thousands of players by letting the GPU do the tracking
Just a nod!
Dash appears 2D. He and all the zombies (and ghost girlfriend) are actually 3D.
I had to use Sprite3D. The Sprite2D won’t take a photo as a texture. It’s not a resource format.
Im not sure i understand. Most images will be converted into a resource under the hood. You can select the image file, in the editors explorer window, and check its import settings. (The image needs to be in the project folder). Sprite 2d and 3d share the same base resource type as input. So if 3d works so should 2d.
I think you’re right. I managed to load a Sprite2D with a .png Texture as a sub-resource today. Material = empty. Maybe that’s what I was doing wrong? Or maybe I had a parent node that was blocking? IDK. Struggling to learn Godot
Grrr. I lost it again. “The selected resource (CompressedTexture2DArray) does not match any type expected for this property (Texture2D).” That’s on a Sprite3D node.
OK was import problem. Needs CompressedTexture2D - not the Array type. Wonder what happens if I import as Texture3D ? Anyone guess?
Design decisions so far (if Godot allows). All-3D project using Sprite3D and photo-textures. Only global coordinates, no local. All movement pre-plotted so no physics, no auto-navigation, no collision logic except with other players. All outdoor cameras first-person eyes view. Three basic scenes: workshop, street, (+ lobby later as not part of active play). Street scenes modular of 1 building length with universal connecting edges. One humanoid skeleton for all players and walking NPCs. Multiple static animated NPCs. Camera views from all NPCs selectable by player.
A 3d texture, can also be called an array texture, is only special in that you can layer many images into one memory object. One example ise case is having a matrix of terrain textures that can be blended depending on an algorithm looking at the slope of a surface or height of a vertices.
My guess is that the png will import as a 1 element 3d texture, which would be the similar as any 2d texture types.
Another example are volumetric effects.
I see, thanks. Not useful for me though, I’ll stick to the 2D on Sprite3D I think.
I’m wondering if I need ANY collision shapes at all. All collision is avoided in this project. It’s multi-player, so the server knows where all players and NPCs are placed and cam report proximity to each. If I use lane discipline for directions, the characters only need to adjust speed to avoid overtaking. There will be parking spaces for NPCs.
Well, I’ve given up with Godot, for now. Learning Blender instead. Also I’m thinking of re-naming this project to “Retirement is NOT a game UK” because it’s a task-driven interactive animated video. Not really a game as you people know it.