'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 :slight_smile:

http://forum.unity3d.com/viewtopic.php?t=11432

There’s something like this in the locomotion project

Thanks, all :slight_smile:

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! :smile:

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. :stuck_out_tongue_winking_eye:

Yes please!

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 :slight_smile: That looks pretty awesome running around a big sphere. Beautiful curved horizon.

:smile: 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.