Beispiel #1
0
    /// <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();
    }
Beispiel #2
0
    /// <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;
    }