Raycast in Update loop

Hi
I am having a problem with Raycast crashing my 2D game when I touch somewhere on the screen and it is not a game object, Here is the script :

void Update () {

        if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
            RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction);
            Debug.Log(hit);

            if ( hit.collider.transform.name == "Africa")
            {
                HappyText.text = Africa.Happy.ToString();
                OilText.text = Africa.Oil.ToString();
                PoupText.text = Africa.Population.ToString();
                ArmyText.text = Africa.Army.ToString();
                CountryText.text = "Africa";
            }else if (hit.collider.transform.name == "NorthAmerica")
            {
                HappyText.text = NorthAmerica.Happy.ToString();
                OilText.text = NorthAmerica.Oil.ToString();
                PoupText.text = NorthAmerica.Population.ToString();
                ArmyText.text = NorthAmerica.Army.ToString();
                CountryText.text = "NorthAmerica";
            }else if (hit.collider.transform.name == "SouthAmerica")
            {
                HappyText.text = SouthAmerica.Happy.ToString();
                OilText.text = SouthAmerica.Oil.ToString();
                PoupText.text = SouthAmerica.Population.ToString();
                ArmyText.text = SouthAmerica.Army.ToString();
                CountryText.text = "SouthAmerica";
            }else if (hit.collider.transform.name == "Europe")
            {
                HappyText.text = Europe.Happy.ToString();
                OilText.text = Europe.Oil.ToString();
                PoupText.text = Europe.Population.ToString();
                ArmyText.text = Europe.Army.ToString();
                CountryText.text = "Europe";
            }else if (hit.collider.transform.name == "Asia")
            {
                HappyText.text = Asia.Happy.ToString();
                OilText.text = Asia.Oil.ToString();
                PoupText.text = Asia.Population.ToString();
                ArmyText.text = Asia.Army.ToString();
                CountryText.text = "Asia";
            }else if (hit.collider.transform.name == "Arabia")
            {
                HappyText.text = Arabia.Happy.ToString();
                OilText.text = Arabia.Oil.ToString();
                PoupText.text = Arabia.Population.ToString();
                ArmyText.text = Arabia.Army.ToString();
                CountryText.text = "Arabia";
            }else if (hit.collider.transform.name == "Australia")
            {
                HappyText.text = Australia.Happy.ToString();
                OilText.text = Australia.Oil.ToString();
                PoupText.text = Australia.Population.ToString();
                ArmyText.text = Australia.Army.ToString();
                CountryText.text = "Australia";
            }
        }

    }

what is the problem ? and thanks :slight_smile:

you can check first if it hit anything, before trying to access the hit.collider.transform,
something like

if (hit.collider == null) return;

I don’t know that it should be crashing, but if that is your entire piece of code, you could do: “if(hit.collider == null) return;”

Otherwise, you could guard: if(hit.collider != null) { rest of your code here }

Thanks, guys :slight_smile:
I tried hit !=null before but now I know I should have added the .collider :smile:

No problem, you’re welcome. You must check the collider because the ‘hit’ is a struct, and is never null. :slight_smile:

Yup it makes sense :stuck_out_tongue: