Rotating a rigidbody on mouse click.

I’m trying to get a rigidbody to rotate 90 degrees when it’s clicked. The code reports no errors and the debugs do show up, but the object does nothing at all. Any idea why?

public float state01 = 0;
	private float speed = 90f; // degrees per second
	private Vector3 currentRot, targetRot;
	private bool rotating = false;

	void start () {
		currentRot = transform.eulerAngles;
	}

	void update () {
	}

	// Update is called once per frame
	void OnMouseOver () {
		if (Input.GetMouseButtonDown(0)) {
			Rotate();
			//Debug.Log("Clicked, rotating");
			state01 += 1;
			//Debug.Log(state01);
			if (state01 > 3) state01 = 0;
		}
	}

	void Rotate(){
		if (rotating) return; // ignore calls to RotateAngle while rotating
		rotating = true;  // set the flag
		targetRot.y = currentRot.y + 90; // calculate the new angle
		while (currentRot.y < targetRot.y){
			// move a little step at constant speed to the new angle:
			currentRot.y = Mathf.MoveTowards(currentRot.y, targetRot.y, speed * Time.deltaTime);
			transform.eulerAngles = currentRot;
			Debug.Log("Hi!");
		}
		rotating = false;
	}

Your code is working, but because you have not constructed it as a proper coroutine, you are getting an immediate 90 degree rotation. In C#, in function that is a coroutine must have a type of IEnumerator, and it must be called by StartCoroutine(). So your Rotate() function rewritten as coroutine becomes:

IEnumerator Rotate(){
	if (!rotating)  {
		rotating = true;  // set the flag
		targetRot.y = currentRot.y + 90; // calculate the new angle
		while (currentRot.y < targetRot.y){
			// move a little step at constant speed to the new angle:
			currentRot.y = Mathf.MoveTowards(currentRot.y, targetRot.y, speed * Time.deltaTime);
			transform.eulerAngles = currentRot;
			yield return null;
		}
		rotating = false;
	}
}

And you need to call it like:

StartCoroutine(Rotate());

Note that ‘yield return null’ will yield for a single frame. Also because of the way you are doing the rotation, you will gain some extra rotation over time.