Problem with a ship controller script
Hi,I am making a ship game and I have a ship controller I have found online but I have a problem.when i press the up arrow the vessel is developing speed to the right and on the down arrow on the left duno why its happening any ideas?Rudder is working fine.
here is the code:
var speed = 1.0;
var acceleration = 1.0;
var maxspeed = 2.0;
var minspeed = -0.25;
var heading = 0.0;
var rudder = 0.0;
var rudderDelta = 2.0;
var maxRudder = 6.0;
var bob = 0.1;
var bobFrequency = 0.2;
private var elapsed = 0.0;
private var seaLevel = 0.0;
private var rudderControl;
private var rudderAngle = 0.0;
function signedSqrt( x ){
var r = Mathf.Sqrt(Mathf.Abs( x ));
if( x < 0 ){
return -r;
} else {
return r;
}
}
function Update () {
// Bobbing
elapsed += Time.deltaTime;
transform.position.y = seaLevel + bob * Mathf.Sin(elapsed * bobFrequency * (Mathf.PI * 2));
// Steering
rudder += Input.GetAxis("Horizontal") * rudderDelta * Time.deltaTime;
if( rudder > maxRudder ){
rudder = maxRudder;
} else if ( rudder < -maxRudder ){
rudder = -maxRudder;
}
heading = (heading + rudder * Time.deltaTime * signedSqrt(speed)) % 360;
// transform.Rotate(0, rudder * Time.deltaTime, 0);
transform.eulerAngles.y = heading;
transform.eulerAngles.z = -rudder;
if( rudderControl ){
rudderAngle = ((-60 * rudder)/maxRudder + heading) % 360;
//rudderControl.transform.localEulerAngles.y = (70 * rudderAngle) % 360;
rudderControl.transform.eulerAngles = Vector3(0, rudderAngle, 0);
}
// Sail
speed += Input.GetAxis("Vertical") * acceleration * Time.deltaTime;
if( speed > maxspeed ){
speed = maxspeed;
} else if ( speed < minspeed ){
speed = minspeed;
}
transform.Translate(0, 0, speed * Time.deltaTime);
}
function Awake (){
seaLevel = transform.position.y;
rudderControl = GameObject.Find("rudderControl");
}
Answer by hexagonius · Sep 06, 2015 at 08:37 PM
Your models z axis points to the right. It's forward would be the negative x-Axis. In the Translate code, put the z value negated to the x value of the Translate parameters
@hexagonius thanks for teh help unfortunately I cant understand what you are talking about I have little to no program$$anonymous$$g experience where I can change that if its in teh code can you quick fix it please?I would really appreciate it!
change line 115 to
transform.Translate(-speed * Time.deltaTime,0,0);
Your answer
Follow this Question
Related Questions
Object reference not set to an instance of an object (c#) 0 Answers
How to define the forward direction of an object made in blender 1 Answer
How can I get all cameras enabled true false states ? 0 Answers
Does anyone know why transform.position isn't working? (See details) 1 Answer
How can i rotate all the child objects together at the same time ? 1 Answer