Search Unity

Raycast in Update loop

Discussion in 'Scripting' started by najinas4, Feb 16, 2018.

  1. najinas4

    najinas4

    Joined:
    Feb 13, 2018
    Posts:
    6
    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 :
    Code (CSharp):
    1. void Update () {
    2.  
    3.         if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
    4.         {
    5.             Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
    6.             RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction);
    7.             Debug.Log(hit);
    8.  
    9.             if ( hit.collider.transform.name == "Africa")
    10.             {
    11.                 HappyText.text = Africa.Happy.ToString();
    12.                 OilText.text = Africa.Oil.ToString();
    13.                 PoupText.text = Africa.Population.ToString();
    14.                 ArmyText.text = Africa.Army.ToString();
    15.                 CountryText.text = "Africa";
    16.             }else if (hit.collider.transform.name == "NorthAmerica")
    17.             {
    18.                 HappyText.text = NorthAmerica.Happy.ToString();
    19.                 OilText.text = NorthAmerica.Oil.ToString();
    20.                 PoupText.text = NorthAmerica.Population.ToString();
    21.                 ArmyText.text = NorthAmerica.Army.ToString();
    22.                 CountryText.text = "NorthAmerica";
    23.             }else if (hit.collider.transform.name == "SouthAmerica")
    24.             {
    25.                 HappyText.text = SouthAmerica.Happy.ToString();
    26.                 OilText.text = SouthAmerica.Oil.ToString();
    27.                 PoupText.text = SouthAmerica.Population.ToString();
    28.                 ArmyText.text = SouthAmerica.Army.ToString();
    29.                 CountryText.text = "SouthAmerica";
    30.             }else if (hit.collider.transform.name == "Europe")
    31.             {
    32.                 HappyText.text = Europe.Happy.ToString();
    33.                 OilText.text = Europe.Oil.ToString();
    34.                 PoupText.text = Europe.Population.ToString();
    35.                 ArmyText.text = Europe.Army.ToString();
    36.                 CountryText.text = "Europe";
    37.             }else if (hit.collider.transform.name == "Asia")
    38.             {
    39.                 HappyText.text = Asia.Happy.ToString();
    40.                 OilText.text = Asia.Oil.ToString();
    41.                 PoupText.text = Asia.Population.ToString();
    42.                 ArmyText.text = Asia.Army.ToString();
    43.                 CountryText.text = "Asia";
    44.             }else if (hit.collider.transform.name == "Arabia")
    45.             {
    46.                 HappyText.text = Arabia.Happy.ToString();
    47.                 OilText.text = Arabia.Oil.ToString();
    48.                 PoupText.text = Arabia.Population.ToString();
    49.                 ArmyText.text = Arabia.Army.ToString();
    50.                 CountryText.text = "Arabia";
    51.             }else if (hit.collider.transform.name == "Australia")
    52.             {
    53.                 HappyText.text = Australia.Happy.ToString();
    54.                 OilText.text = Australia.Oil.ToString();
    55.                 PoupText.text = Australia.Population.ToString();
    56.                 ArmyText.text = Australia.Army.ToString();
    57.                 CountryText.text = "Australia";
    58.             }
    59.         }
    60.  
    61.     }

    what is the problem ? and thanks :)
     
  2. mgear

    mgear

    Joined:
    Aug 3, 2010
    Posts:
    9,411
  3. methos5k

    methos5k

    Joined:
    Aug 3, 2015
    Posts:
    8,712
    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 }
     
  4. najinas4

    najinas4

    Joined:
    Feb 13, 2018
    Posts:
    6
    Thanks, guys :)
    I tried hit !=null before but now I know I should have added the .collider :D
     
  5. methos5k

    methos5k

    Joined:
    Aug 3, 2015
    Posts:
    8,712
    No problem, you're welcome. You must check the collider because the 'hit' is a struct, and is never null. :)
     
  6. najinas4

    najinas4

    Joined:
    Feb 13, 2018
    Posts:
    6
    Yup it makes sense :p