Ignore Player Input

In my script, the player hits “s” to rotate 180 degrees. However, if they press “s” again, they rotate 180 degrees again. I don’t want them to be able to rotate again. What am I missing? See script below:

function Update() { if(Input.GetKeyDown("s")) { transform.Rotate(new Vector3(0,1,0),180);} }

I’m guessing the problem is that the player will turn 180˚ each frame.
I also assume that the player is allowed to turn more than once, so say about half a sec after the first turn he can turn again…
If this is the case then the following should work:

var timer : float = 0;

function Update() { 

  timer += Time.deltaTime;

  if(Input.GetKeyDown("s") && timer > 0.5) { 

  transform.Rotate(new Vector3(0,1,0),180);

  timer = 0;

  } 

}

If you only want the player to be allowed to turn once (and then not again), then you can just use a simple boolean.
e.g.

var ignore : boolean = false;

function Update() { 

  if(Input.GetKeyDown("s") && ignore == false) { 

  transform.Rotate(new Vector3(0,1,0),180);

  ignore = true;

  } 

}

you could simply add a check to see what the current rotation is:

var currentRotation = transform.rotation.y;

if(Input.GetKeyDown(“s”) && ignore == false && currentRotation < desiredMaxRotation)

(where desiredMaxRotation is a float)

attach it to the object that should rotate:

var maxRotation : float = 180;

function Start()
{
maxRotation = transform.rotation.y + 180;
}

function Update() { 

var currentRotation = transform.rotation.y;

  if(Input.GetKeyDown("s") && currentRotation < maxRotation) { 

  transform.rotation.y  = Mathf.Lerp(transform.rotation.y,maxRotation,Time.deltaTime);


  } 

}

a couple of notes:

this should technically work, assuming your starting rotation y value is less than 180, since if it hits 360 it’ll flip over to zero.

Not really good code overall, but should serve as an example

I think it would be better to just use transform.Rotation and SET the rotation to 180 instead of rotate which well. . . rotate the object every time.