2016-08-16 5 views
0

공간 매핑을 사용하는 동안, 나는 오류가 얻을 :Hololens 공간 매핑 문제

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

마지막 줄은 경우 ArgumentNullException을 가져옵니다. 이 코드는 hololens 자습서의 일부이므로 내 안에 아무것도 들어 있지 않습니다.

아무런 조치도 취하지 않고 충돌 한 경우에도 충돌이 발생합니다.

null 인수는 smsd 구조체 내에 있습니다.

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

아이디어가 있으십니까? MS site에서

+0

'surfaces.Values' 목록 또는 배열입니까? – Programmer

+0

없음, 서페이스는 사전이고 Values는 ValueCollection 개체를 반환하므로 ICollection이 가장 적합합니다. 여전히이 문제는이 객체에서 발생하지 않습니다. SurfaceData는 MeshFilter, WorldAnchor 및 MeshCollider가 포함 된 구조체입니다. 그것은 Observer가 업데이트되었을 때 채워지지만 어떤 이유로 그것은 null입니다. – Everts

답변

1

인용구 :

최신 메쉬 공간 표면을 렌더링 및 (임의로)와 물리 충돌 raycasts 위해 을 사용. SurfaceData의 내용이 null이 아닌지 확인하는 것이 중요합니다.

이것은 단순히 당신이 smsd 호출 및 Observer.RequestMeshAsync 함수에 전달하기 전에 null을인지 확인해야한다는 것을 의미한다.

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는 구조체이므로 null 일 수 없습니다. null 객체는 구조체 내의 메쉬 참조입니다. 그들이 새로운 구현으로 완전히 바꾸어 놓은 것처럼 스크립트의 나쁜 디자인이라고 보입니다. 내가 메모리 누수가 있다고 생각해. – Everts

+0

'SurfaceData'가 구조체라는 것을 알지 못했습니다. 여전히 내부를 들여다 보면 메쉬 데이터를 찾을 수 있습니다. Microsoft가 자신의 사이트에서'RequestMeshAsync' 함수를 전달하기 전에'null'인지 확인해야합니다. 나는 이것이 문제를 해결해야한다고 생각한다. – Programmer

+0

네,이게 내가 한 일이고 지금은 효과가있는 것 같습니다. 현재 hololens 튜토리얼 웹 사이트 (현재 사용하고있는)의 코드가 작동하지 않고 업데이트되어 있으므로 임시 해킹과 같은 소리가 나옵니다. 그러나 빠른 데모를 위해 할 것입니다. 감사. 링크를 찾으면 답을 업데이트 할 것입니다. – Everts