- Home /
Rigidbody movement issues
Hi,
Firstly, thanks for looking, and secondly, I hate having to ask for help, but I have now spent a couple of days trawling the anwsers site, as well as searching the internet for the clues.
I am attempting to make a topdown space shooter, with frictionless movement. I started out by using transform.translate, and then moved to rigidbodies. (first time writing a game, and firstime writing JavaScript, so this is all a learning experiance.) I have the Rigidbodies moving as expected, the problem comes, when I want to set a max speed, so things cannot accelerate indefinetly, this works o.k, until i want to change direction, whilst at top speed, due to the way i have my code currently, if my velocity is equal to my ships top speed, no input is accepted. Below is the code;
var ShipTopSpeed:float = 50;
var RevShipTopSpeed:float = -10;
var ShipAcceleration:float = 100;
var ShipDecceleration:float = 1.5;
var ShipRotationPosSpeed:float = 50;
var ShipRotationNegSpeed:float = -50;
var ShipRotationAcceleration:float = 5;
var ShipRotationDecceleration:float = 1;
var ShipRotationCurrentSpeed:float;
var velocity:Vector3;
function Update(){
}
function FixedUpdate () {
cross = rigidbody.angularVelocity;
if (Input.GetButton('a')){
rigidbody.AddRelativeTorque(Vector3.down* ShipRotationPosSpeed);
}
if (Input.GetButton('d')){
rigidbody.AddRelativeTorque(Vector3.up * ShipRotationPosSpeed);
}
if(Input.GetButton('w')) {
if (rigidbody.velocity.magnitude < ShipTopSpeed){
rigidbody.AddRelativeForce(Vector3.forward * ShipAcceleration);
}
}
if (Input.GetButton('s')){
rigidbody.AddRelativeForce(Vector3.back * ShipDecceleration);
}
print (cross.y);
}
I need a way of determining if the angle of rotation has changed, that then allows me to apply force until the max speed in that direction has been achived.
Im guessing i need to do something with Vector3.dot?
Any suggestions are welcome. and thanks in advance.
Answer by illiterate · Jan 12, 2012 at 11:18 PM
After some more reading, and a helpfull post in the forum. I was informed the best way to do this is to clamp the velocicty to my desired speed. Basicly ignoring changes in velocity, once my max speed was attaiend. I found the following script, which makes this really easy
Your answer
Follow this Question
Related Questions
Velocity powered rigidbody on a moving platform without parenting. 3 Answers
Bow and Arrow functionality in Unity3d 0 Answers
Rigidbody magnitude 3 Answers
Rigidbody loses speed 1 Answer