2016-08-16 8 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オブジェクトを返します。それでも問題はこのオブジェクトから来ていません。 SurfaceDataは、MeshFilter、WorldAnchor、およびMeshColliderを含む構造体です。 Observerが更新されたときには埋められますが、何らかの理由でnullになります。 – Everts

答えて

1

引用:

最新メッシュの空間面をレンダリングし、(オプションで)物理衝突とraycastsため にそれを使用します。それはSurfaceDataの 内容がヌルでないことを確認することが重要です。

これは単にあなたが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チュートリアル、ウェブサイト上の現在のコード(私が使用しています1)はちょっと非稼働で、更新されているので、これは一時ハックのように聞こえることを知らせるれた読みのスレッドがあります。しかし、クイックデモを行うために行います。ありがとう。私はリンクを見つけたらあなたの答えを更新します。 – Everts