3 spawn positions but one is ignored and i dont know why

im trying to make a game where there are 3 spawn positions for the player(like lets say subway surfers)(the player moves only on the x axis while the platform goes behind him),and for his movement he is teleporting so i want to destroy the object in game and then spawn him on one of the spawn places and thats how the game goes basicly…but when i want him to go from the edge position to the middle it wont work,it goes straight to the second edge and i got no idea why…like this: X _ _.
_ _ X
it seems correct for me but i got no idea why doesnt it work :/…
thanks alot :slight_smile:
code:
using UnityEngine;
using System.Collections;

public class charTeleport2 : MonoBehaviour {
        //Animator anim = new Animator();
        public GameObject spawnLeft;
        public GameObject spawnCentre;
        public GameObject spawnRight;
        public static float speed=5f;
        public GameObject prefab;
        private GameObject player;
        int counter=0;
        void Start () {
                player=Instantiate(prefab,new Vector3(spawnCentre.transform.position.x,prefab.transform.position.y,prefab.transform.position.z),Quaternion.identity) as GameObject;
        }
       
        // Update is called once per frame
        void Update () {
                counter++;
                if(counter==2)
                {
                        counter=0;
                        if(Input.GetKeyDown(KeyCode.D))
                {
 
                        if(prefab.transform.position.x==spawnLeft.transform.position.x)
                        {
                                        Destroy(player);
                                player=Instantiate(prefab,new Vector3(spawnCentre.transform.position.x,prefab.transform.position.y,prefab.transform.position.z),Quaternion.identity) as GameObject;
                        }
                        else if(prefab.transform.position.x==spawnCentre.transform.position.x)
                                {Destroy(player);
                                        player=Instantiate(prefab,new Vector3(spawnRight.transform.position.x,prefab.transform.position.y,prefab.transform.position.z),Quaternion.identity)  as GameObject;
                        }
                }
                if (Input.GetKeyDown(KeyCode.A))
                {
                        if(prefab.transform.position.x==spawnRight.transform.position.x)
                                {Destroy(player);
                                        player=Instantiate(prefab,new Vector3(spawnCentre.transform.position.x,prefab.transform.position.y,prefab.transform.position.z),Quaternion.identity)  as GameObject;
                        }
                        else if(prefab.transform.position.x==spawnCentre.transform.position.x)
                                {Destroy(player);
                                        player=Instantiate(prefab,new Vector3(spawnLeft.transform.position.x,prefab.transform.position.y,prefab.transform.position.z),Quaternion.identity)  as GameObject;
                        }
                }
                                   }
        }
}

I might be wrong on this, but my guess is that since the checking for “if the character is in the middle” comes after the checking “if character is at the side”, the system ends up doing something like this:

Character is on Right → Change to Middle → Character is on Middle → Change to Left.

Since IF ELSE statements checks every IF, the second statement becomes true since the first statement already alters the character position.

A simple way of fixing this that I can think of is to reverse the order of the checking (when press ‘A’, check if the player is at Middle first then check if he’s on the Right). Or you can use Switch since it doesn’t checks every statement so this problem shouldn’t happen.

thanks for answering i have tried that but still jumps from one end to another :confused: