I have a coroutine which I called from the update on every click. like this void Update () { if (Input.GetMouseButtonDown (0)) { AddTrunk (); if (!isRunning) { StartCoroutine (BranchOutAnimation ()); } } } and I don't know the problem but I am not able to get proper output. Here is the code for coroutine, IEnumerator BranchOutAnimation(){ while (true) { isRunning = true; iTween.MoveTo (trunkList [index], new Vector3 (trunkList [index].transform.position.x - 5f, trunkList [index].transform.position.y, trunkList [index].transform.position.z), 0.3f); yield return new WaitForSeconds (0.3f); Destroy (trunkList [index]); trunkList.RemoveAt (index); transform.position = new Vector3 (transform.position.x, transform.position.y - treeHeight, transform.position.z); isRunning = false; yield break; } } now here is the flow what I want first AddTrunk method call then it run move animation for 0.3 seconds and after 0.3 seconds it calls destroy and then it changes `transform.position` but in my case before completing animation it runs `transform.animation` and because of that problem it first moves my tree down and then does animation. now tell me or guide me what I did wrong?