/// <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); }
public void Clear() { OnMeshUpdated?.Invoke(this, new MeshUpdatedEventArgs(Array.Empty <(Vector3, Color)>(), Array.Empty <int>())); }