/// <summary>
        /// Handle the result of a mesh request.
        /// </summary>
        /// <param name="requestHandle">Handle of the request.</param>
        /// <param name="meshResult">The mesh results.</param>
        private void OnMeshRequestResult(ulong requestHandle, MLMeshing.MeshRequestResult meshResult)
        {
            if (!meshesBeingGenerated.ContainsKey(requestHandle))
            {
                Debug.LogError("Error: MLMeshingBehavior failed to get a new mesh request result, disabling script. Reason: Request handle not in generation list.");
                enabled = false;
                return;
            }

            if (meshResult.Result != MLMeshing.MeshResult.Success)
            {
                Debug.LogErrorFormat("Error: MLMeshingBehavior failed to get a new mesh request result, disabling script. Reason: {0}", meshResult.Result);
                enabled = false;
                return;
            }

            foreach (MLMeshing.BlockMesh blockMesh in meshResult.Meshes)
            {
                MeshObject meshObj = GetOrCreateGameObject(blockMesh.ID, out bool newMesh);

                MeshRenderer meshRenderer = meshObj.Obj.GetComponent <MeshRenderer>();
                if (!meshRenderer)
                {
                    Debug.LogError("Error: MLMeshingBehavior failed to get a new mesh request result, disabling script. Reason: MLMeshingBehavior.MeshPrefab missing MeshRenderer component");
                    enabled = false;
                    return;
                }
                else
                {
                    meshRenderer.material = blockMesh.Flags.HasFlag(MLMeshing.SettingsFlags.PointCloud) ? PointCloudMeshMaterial : TriangleMeshMaterial;
                }

                MeshCollider collider = meshObj.Obj.GetComponent <MeshCollider>();
                if (collider)
                {
                    if (blockMesh.Flags.HasFlag(MLMeshing.SettingsFlags.PointCloud))
                    {
                        collider.enabled = false;
                    }
                    else
                    {
                        collider.sharedMesh = blockMesh.MeshData;
                    }
                }

                MeshFilter meshFilter = meshObj.Obj.GetComponent <MeshFilter>();
                if (!meshFilter)
                {
                    Debug.LogError("Error: MLMeshingBehavior failed to get a new mesh request result, disabling script. Reason: MLMeshingBehavior.MeshPrefab missing MeshFilter component");
                    enabled = false;
                    return;
                }
                else
                {
                    if (meshFilter.sharedMesh != null)
                    {
                        meshFilter.sharedMesh = blockMesh.MeshData;
                    }
                    else
                    {
                        meshFilter.mesh = blockMesh.MeshData;
                    }
                }

                meshObj.Result        = blockMesh.Result;
                meshObj.ID            = blockMesh.ID;
                meshObj.LevelOfDetail = blockMesh.Level;
                meshObj.Flags         = blockMesh.Flags;

                meshObj.Confidence = (blockMesh.Confidences.Length == 0) ? default : new List <float>(blockMesh.Confidences.ToArray());

                                     if (newMesh == true)
                                     {
                                         OnMeshAdded?.Invoke(meshObj);
                                     }
                                     else
                                     {
                                         OnMeshUpdated?.Invoke(meshObj);
                                     }
            }

            meshesBeingGenerated.Remove(requestHandle);
        }
Пример #2
0
 public void Clear()
 {
     OnMeshUpdated?.Invoke(this, new MeshUpdatedEventArgs(Array.Empty <(Vector3, Color)>(),
                                                          Array.Empty <int>()));
 }