Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

'Super Mario Galaxy' style gravity simulation

Discussion in 'Scripting' started by jmarrington, Jan 18, 2009.

  1. jmarrington

    jmarrington

    Joined:
    Jan 18, 2009
    Posts:
    4
    '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 :)
     
  2. Charles Hinshaw

    Charles Hinshaw

    Joined:
    Feb 6, 2008
    Posts:
    1,070
  3. KlaRo115

    KlaRo115

    Joined:
    Feb 24, 2006
    Posts:
    675
  4. jmarrington

    jmarrington

    Joined:
    Jan 18, 2009
    Posts:
    4
    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.)
     
  5. nickavv

    nickavv

    Joined:
    Aug 2, 2006
    Posts:
    1,801
    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.
     
  6. KlaRo115

    KlaRo115

    Joined:
    Feb 24, 2006
    Posts:
    675
    Yes, good idea:
    Rotating the planet, not the player! :D
     
  7. nickavv

    nickavv

    Joined:
    Aug 2, 2006
    Posts:
    1,801
    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. ;P
     
  8. jmarrington

    jmarrington

    Joined:
    Jan 18, 2009
    Posts:
    4
    Yes please!

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

    nickavv

    Joined:
    Aug 2, 2006
    Posts:
    1,801
    Here's the basic camera script:

    PlanetCam.js
    Code (csharp):
    1. var target : Transform;
    2.  
    3. function Update () {
    4.     transform.LookAt (target);
    5.     transform.position.x = target.position.x;
    6.     transform.position.y = target.position.y;
    7.     transform.rotation = target.rotation;
    8. }
     
  10. jmarrington

    jmarrington

    Joined:
    Jan 18, 2009
    Posts:
    4
    Thanks :) That looks pretty awesome running around a big sphere. Beautiful curved horizon.
     
  11. nickavv

    nickavv

    Joined:
    Aug 2, 2006
    Posts:
    1,801
    :D No problem.
     
  12. maxwelldoggums

    maxwelldoggums

    Joined:
    Sep 8, 2008
    Posts:
    157
    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.