2017-01-15 11 views
0

код, который генерирует ошибку:Raycast вызывает NullReferenceException ошибку

void Update() 
{ 
    if (Input.touchCount > 0) 
    { 
     RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position), Vector2.zero); 
     if (hit && hit.collider != null && hit.collider.name == "leftTapArea") 
     { 
      hit.transform.name = "Hit"; 
     } 
    } 
} 

Он говорит, что что-то не так с этой строкой:

RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position), Vector2.zero);

Ошибка:

NullReferenceException: Object reference not set to an instance of an object leftScript.Update() (at Assets/leftScript.cs:16)

ответ

2

Единственное, что может вернуть нуль в вашем коде Camera.main.ScreenToWorldPoint. Это означает, что Camera.main - null. Для инициализации Camera.main камера должна иметь тег MainCamera.

Выберите Camera GameObject, затем измените тег на MainCamera.

enter image description here

Если вы не хотите, чтобы ваша камера будет в теге MainCamera, вы также можете найти ум непосредственно GameObject.Find затем получить Camera компонент из него.

Camera cam; 

void Start() 
{ 
    cam = GameObject.Find("NameOfCameraGameObject").GetComponent<Camera>(); 
} 

void Update() 
{ 
    if (Input.touchCount > 0) 
    { 
     RaycastHit2D hit = Physics2D.Raycast(cam.ScreenToWorldPoint(Input.GetTouch(0).position), Vector2.zero); 
     if (hit && hit.collider != null && hit.collider.name == "leftTapArea") 
     { 
      hit.transform.name = "Hit"; 
     } 
    } 
} 
+0

Большое спасибо, это помогло. – Sharpy

+0

Я вижу, что вы имели в виду по моему дублированному вопросу .... Позвольте мне попробовать ваше решение ... Спасибо. – Thanh

1

Убедитесь, что у вас есть в вашей сцене активный игровой объект с компонентом Camera и тегом «MainCamera»

Tag