So basically - i looked up dozens of different solution but none of them suited for descent 1-like movement.
Take a look - this is complete movement + camera control file:
var flyingSpeed = 100;
var minThrust = 20;
var maxThrust = 300;
var Accel = maxThrust / 4;
//var Jumpspeed = maxThrust *5;
var turnSpeed = 100;
var afterBurner = 0;
var setspeed = 0;
var outputspeed = 0;
var controlTexture : Texture2D;
var distance = 12.0;
var height = 5.0;
var damping = 5.0;
var smoothRotation = true;
var rotationDamping = 10.0;
function Update() {
if(Input.GetButton("Jump")){
afterBurner=1;
}
if(!Input.GetButton("Jump")){
afterBurner=0;
}
outputspeed = Time.deltaTime * (setspeed+4000*afterBurner);
rigidbody.velocity = transform.forward * outputspeed; //Apply velocity in Update()
rigidbody.SetMaxAngularVelocity(0f); //killing of any obtained rigidbody.angularvelocity
if(Input.GetAxis("Mouse X") > 0.0){ //if the right arrow is pressed
transform.Rotate(0.0, turnSpeed * Time.deltaTime, 0.0 * Time.deltaTime, Space.Self); //and then turn the plane
//rigidbody.AddTorque(0.0,turnSpeed*Time.deltaTime,0.0);
}
if(Input.GetAxis("Mouse X") < 0.0){ //if the left arrow is pressed
transform.Rotate(0.0, -turnSpeed * Time.deltaTime, 0.0 * Time.deltaTime, Space.Self);
}
if(Input.GetAxis("Mouse Y") < 0.0){ //if the up arrow is pressed
transform.Rotate(-turnSpeed * Time.deltaTime, 0.0, 0.0);
}
if(Input.GetAxis("Mouse Y") > 0.0){ //if the down arrow is
transform.Rotate(turnSpeed * Time.deltaTime, 0.0, 0.0);
}
if(Input.GetAxis("Roll") > 0.0){
transform.Rotate(0.0, 0.0, -turnSpeed * Time.deltaTime, Space.Self);
}
if(Input.GetAxis("Roll") < 0.0){
transform.Rotate(0.0, 0.0, turnSpeed * Time.deltaTime, Space.Self);
}
if(Input.GetAxis("Power") > 0.0 && setspeed < 2000){
setspeed=setspeed+50;
}
if(Input.GetAxis("Power") < 0.0 && setspeed > 0){
setspeed=setspeed-50;
}
}
function OnGUI () {
var desiredscale : float = setspeed;
var resultation : int = (desiredscale/2000*70);
GUI.Box (new Rect (0,Screen.height - 80,100,80), ""+desiredscale);
GUI.DrawTexture (Rect (10, Screen.height - resultation-5, 25, resultation), controlTexture);//, Rect (0,0,100,100));
}
function LateUpdate () {
var dt : float = Time.smoothDeltaTime;
var wantedPosition = transform.TransformPoint(0, height, -distance);
var finalizedPos = wantedPosition+transform.forward * outputspeed;
Camera.main.transform.position = Vector3.Lerp (Camera.main.transform.position, wantedPosition, dt * damping);
if (smoothRotation) {
var wantedRotation = Quaternion.LookRotation(transform.position - Camera.main.transform.position, transform.up);
Camera.main.transform.rotation = Quaternion.Slerp (Camera.main.transform.rotation, wantedRotation, dt * rotationDamping);
}
else Camera.main.transform.LookAt (transform, transform.up);
}
In state like this when ship moving forward camera jitters, however if i’ll change it to something like this
function FixedUpdate () {
var dt : float = Time.fixedDeltaTime;
var wantedPosition = transform.TransformPoint(0, height, -distance);
//var finalizedPos = wantedPosition+transform.forward * outputspeed;
Camera.main.transform.position = Vector3.Lerp (Camera.main.transform.position, wantedPosition, dt * damping);
//dt = Time.maximumDeltaTime;
if (smoothRotation) {
var wantedRotation = Quaternion.LookRotation(transform.position - Camera.main.transform.position, transform.up);
Camera.main.transform.rotation = Quaternion.Slerp (Camera.main.transform.rotation, wantedRotation, dt * rotationDamping);
}
else Camera.main.transform.LookAt (transform, transform.up);
}
Camera starts jittering whenever i turn ship, however frontal movement getting fixed.
Any ideas what should it fix/change?