2017-01-15 7 views
0

-Code, der einen Fehler erzeugt:Raycast verursacht Nullreferenceexception Fehler

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"; 
     } 
    } 
} 

Es sagt, dass etwas mit dieser Zeichenfolge falsch ist:

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

Fehler:

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

Antwort

2

Das einzige, was null in Ihrem Code zurückgeben kann, ist Camera.main.ScreenToWorldPoint. Es bedeutet, dass Camera.mainnull ist. Um Camera.main initialisieren zu können, muss die Kamera den Tag MainCamera haben.

Wählen Sie das Camera GameObject und ändern Sie das Tag in MainCamera.

enter image description here

Wenn Sie Ihre Kamera im MainCamera-Tag sein nicht wollen, können Sie auch direkt mit Witz GameObject.Find finden Sie dann die Camera Komponente von ihm erhalten.

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

Vielen Dank, es hat geholfen. – Sharpy

+0

Ich sehe was du mit meiner duplizierten Frage gemeint hast .... Lass mich deine Lösung versuchen ... Danke. – Thanh

1

Vergewissern Sie sich, in deiner Szene ein aktives Spielobjekt mit der Camera Komponente und dem Tag "MainCamera"

Tag

Verwandte Themen