2016-08-16 2 views
0

Während Spatial Mapping, erhalte ich einen Fehler bei:Hololens Raumzuordnungsproblem

void Update() 
{ 
    if (mappingEnabled) 
    { 
     foreach (GameObject surface in surfaces.Values) 
     { 
      surface.GetComponent<MeshRenderer>().enabled = DrawVisualMeshes; 
     } 

     if (surfaceWorkOutstanding == false && surfaceDataQueue.Count > 0) 
     { 
      SurfaceData smsd = surfaceDataQueue.Dequeue(); 
      surfaceWorkOutstanding = Observer.RequestMeshAsync(smsd, Observer_OnDataReady); 
     } 
    } 
} 

Die letzte Zeile ein Argument bekommt. Der Code ist Teil der Hololens Tutorials, also ist nichts drin.

Der Absturz passiert auch, wenn ich keine Aktion mache, nur herum gucken.

Das Null-Argument ist innerhalb der smsd-Struktur;

-  $exception {"Value cannot be null.\r\nParameter name: dataRequest.outputMesh"} System.ArgumentNullException 

Irgendwelche Ideen?

+0

Ist 'Oberflächen.Values' Liste oder Array? – Programmer

+0

Keine, Oberflächen ist ein Wörterbuch und Values ​​gibt ein ValueCollection-Objekt zurück, also höchstwahrscheinlich nur eine ICollection. Das Problem kommt jedoch nicht von diesem Objekt. Die SurfaceData ist eine Struktur, die MeshFilter, WorldAnchor und MeshCollider enthält. Es ist gefüllt, wenn der Beobachter aktualisiert wird, aber aus irgendeinem Grund ist es null. – Everts

Antwort

1

Zitat aus MS site:

Rendern der räumlichen Fläche mit der neuesten mesh und (optional) es für Physik Kollisionen und raycasts verwenden. Es ist wichtig zu bestätigen, dass der Inhalt der SurfaceData nicht null ist.

Dies bedeutet einfach, dass Sie überprüfen müssen, wenn smsdnull ist vor dem Aufruf und in Observer.RequestMeshAsync Funktion übergeben.

if (mappingEnabled) 
    { 
     foreach (GameObject surface in surfaces.Values) 
     { 
      surface.GetComponent<MeshRenderer>().enabled = DrawVisualMeshes; 
     } 

     if (surfaceWorkOutstanding == false && surfaceDataQueue.Count > 0) 
     { 
      SurfaceData smsd = surfaceDataQueue.Dequeue(); 
      if (smsd.outputMesh == null || smsd.outputCollider == null || smsd.outputAnchor == null) { return; } 
      { 
       surfaceWorkOutstanding = Observer.RequestMeshAsync(smsd, Observer_OnDataReady); 
      } 
     } 
    } 
+0

smsd ist eine Struktur, so dass es nicht null sein kann. Das Null-Objekt ist die Netzreferenz innerhalb der Struktur. Scheint, es ist ein schlechtes Design des Skripts, da sie es komplett in eine neue Implementierung geändert haben. Denke ich lese es hat ein Speicherleck. – Everts

+0

Ich wusste nicht, dass 'SurfaceData' eine Struktur ist. Wenn Sie jedoch hineinschauen, werden Sie wahrscheinlich die Maschendaten finden. Sie sollten prüfen, ob das "null" ist, wie Microsoft auf ihrer Site sagte, bevor Sie es in der 'RequestMeshAsync'-Funktion übergeben. Ich glaube, das sollte das Problem lösen. – Programmer

+0

ja das ist, was ich getan habe und scheint für jetzt zu arbeiten. Es gibt einen Thread irgendwo, den ich gelesen habe, der besagt, dass der aktuelle Code auf der Hololens Tutorial-Website (eine, die ich benutze) irgendwie nicht funktioniert und aktualisiert wurde, also klingt das wie ein temporärer Hack. Aber wird für eine schnelle Demo tun. Vielen Dank. Ich werde Ihre Antwort aktualisieren, wenn ich den Link finde. – Everts