Setting Horizontal Gravity

I’m trying to make a game where the gravity shifts along the level - like, you pick up an accessory, and the direction your character is pulled by gravity changes. However, I have no idea how to make the gravity work the way I want it to. Like, reversing it is easy - just set the gravity value on the model’s rigidbody physics to negative. But how would I make the gravity pull in any other direction?

If your character is a Rigidbody, you could just modify the Physics.gravity vector to whatever direction you want. If you want to make the gravity point to the right, for instance, simply assign the new gravity, like this:

  Physics.gravity = 9.81 * Vector3.right;

But this will affect all other rigidbodies in the scene as well. If you want to control only the character gravity, set rigidbody.useGravity to false and implement your own gravity with a ConstantForce component - like this (character script):

private var myGravity: ConstantForce;

function SetGravity(g: Vector3){
  // calculate the necessary force to produce the desired gravity:
  myGravity.force = rigidbody.mass * g; 
}

function Start(){
  rigidbody.useGravity = false; // forget about physics default gravity
  myGravity = gameObject.AddComponent(ConstantForce); // add a ConstantForce component
  SetGravity(9.81 * Vector3.down); // set regular gravity
}

When you want to change the gravity direction, call SetGravity:

  SetGravity(2.5 * Vector3.left); // set gravity to a low value to the left