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): 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
you can check first if it hit anything, before trying to access the hit.collider.transform, something like Code (CSharp): if (hit.collider == null) return; https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html
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 }
No problem, you're welcome. You must check the collider because the 'hit' is a struct, and is never null.