- Home /
Rigidbody movement with turns for a one wheeled motor cycle.
Hi,
I'm taking this game and simulation programming fundamentals class in college. My project involves me and a partner creating a racing game.
My problem is, I'm not very good with coding and I can't get my stuff to work properly.
The requirement is in Javascript and this is what i have so far.
var speed : float = 10.0; var gravity : float= 10.0; var maxRPM : float= 10.0; var jumpHeight : float= 2.0; var turnSpeed : float = 1.0; var moveDir; var Jump = true; var turn : float = 5.0; var grounded = false; var vehicle : Transform;
@script RequireComponent(Rigidbody, CapsuleCollider)
function Awake () { rigidbody.freezeRotation = true; rigidbody.useGravity = false; }
/*function Update() { moveDir = Vector3( speed*Input.GetAxis("Horizontal"), speed, speed*Input.GetAxis("Vertical")); moveDir = transform.TransformDirection( moveDir); }
function FixedUpdate() {
} */
function Update() { //Transform the vector3 to local space moveDir = transform.TransformDirection( moveDir); }
function FixedUpdate() {
moveDir = Vector3( speed*Input.GetAxis("Horizontal"),speed, speed*Input.GetAxis("Vertical"));
if(grounded)
{
if(Input.GetKey("up"))
{
//if the up key is press then the vehicle will move forward.
transform.rigidbody.velocity.z = moveDir.z;
rigidbody.transform.Translate( Vector3( 0, 0, 1) * speed);
}
if(Input.GetKey("down"))
{
// if the down key is press then the vehicle will move backwards.
transform.rigidbody.velocity.z = moveDir.z;
rigidbody.AddForce( Vector3( 0, 0, -1) * speed);
}
if(Input.GetKey("left"))
{
// if the left key is press then the vehicle will rotate left.
turn -= turnSpeed;
transform.eulerAngles = Vector3(0, turn , 0);
}
if(Input.GetKey("right"))
{
// if the right key is press then the vehicle will rotate right.
turn += turnSpeed;
transform.eulerAngles = Vector3(0, turn , 0);
}
}
} function OnCollisionStay() { grounded = true; } function OnCollisionExit() { grounded = false; } if(!grounded) { rigidbody.useGravity = true;
// gravity
rigidbody.AddForce(Vector3 (0, -gravity * rigidbody.mass * Time.deltaTime, 0));
}
The code lets the wheel move forward and back. and it rotates left and right in place.
What I want to know is why does the axis not update when the wheel rotates. When i rotate it a few degrees and then move it forward it does not move in the direction the wheel is pointing.
Can somone give me pointers in what to do. Where to organize, what to add.
Thanks!
Your answer
Follow this Question
Related Questions
Rigidbody climbing stairs 2 Answers
Wall jump, jump movement not working 0 Answers
How to make rigidbody movement without changing or clamping the Velocity? 3 Answers
Making RigidBody face direction for movement 1 Answer
Moving rigidbodies at random 1 Answer