One of the games that inspires me most and influences all my projects in some way is Outer Wilds [2019] by Mobius Digital. One of the coolest aspects of the game is how an entire miniature solar system is simulated with Newtonian physics. Everything in the world is moving and "up" no longer exists.
I wanted to test this out on my own, first utilizing a few YouTube videos on Newtonian equations. After that, I wanted to start customizing it and see if I could get the player to walk around celestial bodies like you can in Outer Wilds. The weird problems I ran into was something I wouldn't have predicted.
As Unity [and I'm sure many other engines] stands, rigidbody physics simulations are only accurate on a vague, often macro scale. Rigidbodies were designed for small objects with a "center of mass." If you simply wanted to make a solar system in Unity with the vague orbits of planets, that's perfectly possible. If you want smaller objects to then interact with those big objects on a micro scale, rigidbodies on their own cannot do that. This is because gravity does not form in one isolated "center of mass," it's actually a combination of all the mass in an object. The center of the Earth is not the only thing pulling on you, every part of it is at different intensities.
To resolve this, I thought it would be more accurate to describe the mass of an object with many different points within it rather than one. To test, I started out with a sphere and wrote a script that would make a point [white spheres as seen in image] at each vertex which each have a certain fraction of the overall mass. I then scaled these points down into the object so that the gravity is roughly coming from within the object and not just the surface.
This approach is going in the right direction, but it is still quite flawed. Gravitational pull is still inaccurate, which I tested by walking around and jumping on two celestial objects with different masses. Unfortunately, when having such small distances the closer you are to the center of the celestial object significantly affects gravitational pull. Basically you would feel more pull on a smaller celestial object because you would be walking closer to its gravity points.
Going forward, I would implement a more accurate system that doesn't just place gravity points at vertices, but creates a grid of points isolated to the inside of the object, and have the grid distances be universal no matter what size object you are on.
Inspired by Legend of Zelda: Link's Awakening [2019] by Nintendo & Tunic [2022] by Isometricorp Games, I wanted to create a movement perspective that made the player feel small. The isometric camera helps to make the scene look miniature as well.
This is the first prototype testing area for basic mechanics I wanted to have for an original IP. The world I wanted to create was meant to be impressionistic--a smaller representation of a real place. An example of this would be the Minecraft Dungeons map UI or the small world of Link's Awakening that looks almost like a big board game set. For this game, I wanted each area to be a circle that bounds the player. The camera would be looking down onto the player from the side or from above. It's almost like controlling a smaller person inside of snow globe, except there's no glass...and the snow will be ash from a nuclear winter.
To smoothly transition the camera to different angles I utilized the amazing Cinemachine plugin in the Unity registry. For the rotation of the camera, I simply attached the camera to a large disk that can pivot.
In the scripting, a lot went into this specific movement set up. Firstly, the player doesn't just move horizontally on a global axis, they move along the circumference of the circle. The top view camera is not in a fixed position, but has to be moved depending on wherever the player leaves the inner circle collider.
By far the hardest part was the vector math involved with the shooting mechanics. Shooting in 3rd person often requires a central crosshair or else the player can't tell where they are aiming. I wanted to break this convention by having the player freely aim in the scene. This means casting a ray from the camera to the exactly point in the world the mouse is pointing at, then precisely aiming the gun and player to the direction of that ray.