the problem with your "for" code , that I think you placed inside the Update(), is that it get executed in one update cicle. In Unity you must think the Update as a 'frame' execution. Plus, that for seems useles. Where do you use the "i" variable? So you must do something like this into the Update(), (I missed the starting and end management) //small dist is a float value greater of 0 but not to big that you must initialize in the //Start() if ((transform.position - spaces[currentPosition+i]).magnitude < smalDist) { // I reached next element if (i==diceResult){ //reached destination // STOp The movement } i++; transform.position = Vector3.MoveTowards(transform.position, spaces[currentPosition+i].transform.position,Time.deltaTime / smooth ); }