/// <summary> /// Process the MeshDescription data sent back from the Combiner and make it appear! /// </summary> /// <param name="hash">Instance Hash.</param> /// <param name="meshDescriptions">MeshDescriptions.</param> /// <param name="materials">Materials.</param> IEnumerator CreateMeshes(int hash, Hydrogen.Threading.Jobs.MeshCombiner.MeshOutput[] meshOutputs) { // Make our meshes in Unity for (int x = 0; x < meshOutputs.Length; x++) { var meshObject = new GameObject(); var newMesh = Combiner.CreateMeshObject(meshOutputs [x], true); meshObject.name = newMesh.Mesh.name; meshObject.AddComponent <MeshFilter> ().sharedMesh = newMesh.Mesh; meshObject.AddComponent <MeshRenderer> ().sharedMaterials = newMesh.Materials; if (_parentLookup.ContainsKey(hash)) { meshObject.transform.parent = _parentLookup [hash]; } meshObject.transform.position = Vector3.zero; meshObject.transform.rotation = Quaternion.identity; // Fake Unity Threading if (x > 0 && x % ThrottleRate == 0) { yield return(new WaitForEndOfFrame()); } } if (_parentLookup.ContainsKey(hash)) { _parentLookup.Remove(hash); } // Clear previous data (for demonstration purposes) // It could be useful to keep some mesh data in already parsed, then you could use the RemoveMesh function // to remove ones that you want changed, without having to reparse mesh data. Combiner.ClearMeshes(); }
/// <summary> /// Process the MeshDescription data sent back from the Combiner and make it appear! /// </summary> /// <param name="hash">Instance Hash.</param> /// <param name="meshDescriptions">MeshDescriptions.</param> /// <param name="materials">Materials.</param> public IEnumerator PostProcess(int hash, Hydrogen.Threading.Jobs.MeshCombiner.MeshOutput[] meshOutputs) { var go = new GameObject("Combined Meshes"); go.transform.position = TargetMeshes.position; go.transform.rotation = TargetMeshes.rotation; // Make our meshes in Unity for (int x = 0; x < meshOutputs.Length; x++) { var meshObject = new GameObject(); var newMesh = _meshCombiner.CreateMeshObject(meshOutputs [x]); meshObject.name = newMesh.Mesh.name; meshObject.AddComponent <MeshFilter> ().sharedMesh = newMesh.Mesh; meshObject.AddComponent <MeshRenderer> ().sharedMaterials = newMesh.Materials; meshObject.transform.parent = go.transform; meshObject.transform.position = Vector3.zero; meshObject.transform.rotation = Quaternion.identity; // Fake Unity Threading if (x > 0 && x % ThrottleRate == 0) { yield return(new WaitForEndOfFrame()); } } // Clear previous data (for demonstration purposes) // It could be useful to keep some mesh data in already parsed, then you could use the RemoveMesh function // to remove ones that you want changed, without having to reparse mesh data. _meshCombiner.ClearMeshes(); _combinerEndTime = Time.time; }