Position zeros out and no longer shows object

Hey there,

I’m having this weird issue with my building script. After I create about 3 or create one on Z the spawnPos just returns zero and doesn’t allow me to place anymore objects. Idk why the pasted code has these weird indentations. I apologize for the mess.

void Update()
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;

    if (Physics.Raycast(ray, out hit, Mathf.Infinity))
    {

        if (hit.distance <= 15f)
        {
            if (hit.collider.tag == "Ship" || hit.collider.tag == "Buildable")
            {
                    if (buildModelTemp == null)
                    {
                            Vector3 spawnPos = Vector3.zero;

                            Debug.Log(hit.collider.name);

                            if (hit.normal.x == 1f)
                                spawnPos = new Vector3(hit.collider.transform.position.x + 5f, hit.collider.transform.position.y, hit.collider.transform.position.z);
                            else if (hit.normal.x == -1f)
                                spawnPos = new Vector3(hit.collider.transform.position.x - 5f, hit.collider.transform.position.y, hit.collider.transform.position.z);
                            else if (hit.normal.z == 1f)
                                spawnPos = new Vector3(hit.collider.transform.position.x, hit.collider.transform.position.y, hit.collider.transform.position.z + 5.05f);
                            else if (hit.normal.z == -1f)
                                spawnPos = new Vector3(hit.collider.transform.position.x, hit.collider.transform.position.y, hit.collider.transform.position.z - 5.05f);

                            Debug.Log("SP0: " + spawnPos + "HitN: "+hit.normal+"HC "+hit.collider.transform.localScale);

                    if (spawnPos != Vector3.zero)
                    {
                        buildModelTemp = Instantiate(buildModel, spawnPos, Quaternion.identity) as GameObject;
                        buildModelTemp.GetComponent<BoxCollider>().enabled = false;
                    }
                }
            }
            else
            {
                if (buildModelTemp != null)
                    Destroy(buildModelTemp);
            }
        }
    }
}

Floating-point numbers can be imprecise due to rounding errors, so shouldn’t be compared with the equality operator. Instead, use Mathf.Approximately.

if( Mathf.Approximately(hit.normal.x, 1f) );