Having Programming problems in a Script

Hello,

Im new to unity so i had some problems in a script which i couldn’t solve

Here are the problems;

  1. Ambiguous reference ‘Abs’: Unityengine.mathf.abs(int), unityengine.mathf.abs(float)

    Problem in var r = Mathf.Sqrt(Mathf.Abs( x ));

  2. Opreator ‘<’ cannot be used with the left hand side of the typme ‘object’ and right side of the type ‘int’.

    Problem in if( x < 0 ){

  3. Opreator ‘-’ cannot be used with an expression ‘error’.

    Problem in return -r;

4.‘transform’ is not a member of ‘object’

Problem in rudderControl.transform.eulerAngles = Vector3(0, rudderAngle, 0);

Remember I’m making for a mobile platform

Here is the script;

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");

}

Help im new to unityscript !!!
Thanks

It’s good practice to declare your variables as types. You probably get these errors related to the x variable because the compiler thinks x can be an object at some point. You can’t pass an object into Mathf.Abs(), because it takes integers or floats. And You can’t compare an object to an integer value directly, without specify a path to an integer etc. inside the object. So declare your variables, for example:

var speed : float = 1.0;

and in your function:

function signedSqrt( x : float ){

I always declare my variables as a given type or object, because I then almost always gets errors that make sense. Sometimes you won’t do this, but this is not often.