IEnumerator PushBack2Home(GameObject defeatedPawn) { cellMetaData.RemovePlayer(defeatedPawn); PlayerMetaData defeatedPMetaData = defeatedPawn.GetComponent <PlayerMetaData>(); GameObject homeCell = defeatedPMetaData.homeCell; GameObject currCell = defeatedPMetaData.currCell; while (currCell != homeCell) { Vector3 desiredPosition = CreateBoard.NewPiecePosition(currCell); defeatedPawn.transform.position = Vector3.Lerp(defeatedPawn.transform.position, desiredPosition, 1); currCell = currCell.GetComponent <CellMetaData>().GetPrevGameObj(defeatedPMetaData.myTeam); if (currCell == null) { currCell = homeCell; } // wasnt able to show smooth behvaviour using progress (t) & movementspeed in lerp // so used this. yield return(new WaitForSeconds(0.05f)); } // Now formally adding defeated pawn to home cell homeCell.GetComponent <CellMetaData>().AddPlayer(defeatedPawn); runningProcesses--; }