Smooth toggle a variable?

I have an edited version of the MouseOrbit script in my scene which turns the camera’s positions into variables in the inspector. Here’s that version of it (The positions are called xOffset and yOffset)…

var target : Transform;
var distance = 10.0;

var xOffset = 0.0;
var yOffset = 0.0;

var xSpeed = 250.0;
var ySpeed = 120.0;

var yMinLimit = -20;
var yMaxLimit = 80;

private var x = 0.0;
private var y = 0.0;

@script AddComponentMenu("Camera-Control/Mouse Orbit")

function Start () {
var angles = transform.eulerAngles;
x = angles.y;
y = angles.x;

// Make the rigid body not change rotation
if (GetComponent.<Rigidbody>())
    GetComponent.<Rigidbody>().freezeRotation = true;
}

function LateUpdate () {
if (target) {
x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;

    y = ClampAngle(y, yMinLimit, yMaxLimit);
   
var rotation = Quaternion.Euler(y, x, 0);
var position = rotation * Vector3(xOffset,yOffset,-distance)+ target.position;
}

transform.rotation = rotation;
transform.position = position;
}


static function ClampAngle (angle : float, min : float, max : float) {
if (angle < -360)
    angle += 360;
if (angle > 360)
    angle -= 360;
return Mathf.Clamp (angle, min, max);
}

What would I add to this script, or in a separate script to make the varriable xOffset smooth toggle from 0.9 to -0.9 when the input “Switch Shoulders” is pressed?

You could perhaps try with a coroutine:

public smoothToggleTime = 1f;

bool m_toggleInProgress = false;
IEnumerator SmoothToggle()
{
    if (m_toggleInProgress)
        yield break;

    m_toggleInProgress = true;

    float startOffset = xOffset;
    float endOffset = -xOffset;  
    float timer = 0f;

    float percent = 0f;
 
    while (percent != 1f)
    {
        timer += Time.delta;
        percent = Mathf.Clamp(time / smoothToggleTime, 0f, 1f);
        xOffset = Mathf.Lerp(startOffset, endOffset, percent);

        yield return null;
    }
  
    xOffset = endOffset;
    m_toggleInProgress = false;
  
}

I’ve never heard of a coroutine. What does it do?

Also, if it’s no trouble, could you fill in the numbers and the input where it’s needed. Whenever I try, I always miss something. The xOffsets are 0.9 and -0.9 and the input is name “Switch Shoulders”.

You can get familiar with them on this page:

Basically paste this code earlier into your script, and insert this snippet where you want to toggle the xOffset:

StartCoroutine( SmoothToggle() );

I just realized that this is written in C# but my camera script is in JavaScript.