var MoveForce:float = 10;
var xSensitivity : float;
var ySensitivity : float;
var maxHeight : float;
var minHeight : float;
private var xPos : float;
private var yPos : float;
var myTrans : Transform;
var camTrans : Transform;
As you can see I use a simple rotation method. Then when you see the var inputVector, that is what stumps me. I will not move according to the direction. Only north south, you get the idea. I do not know whats going on and i have been looking in the reference. I want it to move on the angle by force on the rigidbody. I have x,y,z locked. Is that whats going on? Because I unlocked it too. I’m not using a character controller.
AddForce uses world space, thus the rigidbody will only move in the world axes. You should transform the inputVector to world space with transform.TransformDirection:
var inputVector: Vector3 = Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
inputVector = transform.TransformDirection(inputVector); // transform
rigidbody.AddForce(inputVector * MoveForce); // ForceMode.Force is the default mode
But be aware that you’re applying a force to the rigidbody: the force produces an acceleration while it’s being applied, thus removing the force (when you release the controls) will not stop the rigidbody - it will continue moving at its last velocity. You can set a big rigidbody.drag value to make it stop quickly, but this will also affect the vertical direction (it will fall in slow motion).
A possible solution is to implement your own horizontal drag function in FixedUpdate:
var horizontalDrag: float = 0.06; // 0 = no drag, 1.0 = infinite drag
function FixedUpdate(){
var vel = rigidbody.velocity; // get the current velocity...
vel *= 1.0 - horizontalDrag; // apply the drag friction...
vel.y = rigidbody.velocity.y; // but keep the original y velocity
rigidbody.velocity = vel; // then apply it to rigidbody.velocity
}
NOTE: Keep rotations freezed in all axes, or your rigidbody will start spinning after any collision!