# 'Super Mario Galaxy' style gravity simulation

'lo all, new Unity 3D convert here. I’m relatively new to games design, I’m currently studying traditional comp-sci and multimedia.

What I’d like to do is build my first attempt at a 3D game on an implausibly small planetoid, similar to the the many-small-planetoids approach used in Super Mario Galaxy. Since the player will be moving all the way around the circumference of the game world, the concept of ‘down’ can’t simply be a negative acceleration along the Y axis, but rather an acceleration towards a particular point (the centre of the planetoid).

So, my guess is that the one way to simulate this (particularly as I only intend to have a single planetoid for this game at least) would be to have a game-world level script that modifies the X/Y/Z acceleration of objects based on their positioning in reference to the centre point I define.

Has anyone else attempted this already? Can I use the Physics.gravity property for this? Are there any bugbears I should look out for (especially if I start having multiple rigidbodies falling and hitting each other at the same time, like a rock-slide or similar)?

Nice to meet you all. I’m looking forward to learning from this community

There’s something like this in the locomotion project

Thanks, all

Both of these are much easier than the trig script I was tinkering with.

(note to self: search function exists for a reason. Sorry.)

Using info from those topics I made a single planet gravity demo. I also made a neat camera script that keeps you in focus, so it looks like the planet under you is rotating.

I can post it later, not on my Mac right now.

Yes, good idea:
Rotating the planet, not the player!

Well, I physically rotate the player, but the camera follows the player so it appears that he’s still rightside-up. It gives a very cool effect, I think.

That sort of of effect would work very well for my game’s perspective I think. Could you post the script?

Here’s the basic camera script:

PlanetCam.js

``````var target : Transform;

function Update () {
transform.LookAt (target);
transform.position.x = target.position.x;
transform.position.y = target.position.y;
transform.rotation = target.rotation;
}
``````

Thanks That looks pretty awesome running around a big sphere. Beautiful curved horizon.

No problem.

What I would do is create a standard constant force whose vector varies depending on the position of the object, basically point a ray at the center of the “planet” and apply it as the gravity.