private void GenerateMesh() { myVertices = new Vector3[(myXLength + 1) * (myZLength + 1)]; NativeArray <Vector3> vertices = new NativeArray <Vector3>((myXLength + 1) * (myZLength + 1), Allocator.Persistent); myTriangles = new int[myXLength * myZLength * 6]; NativeArray <int> triangles = new NativeArray <int>(myXLength * myZLength * 6, Allocator.Persistent); var job = new MeshGeneratorJob() { myVertices = vertices, myTriangles = triangles, myXLength = myXLength, myZLength = myZLength }; JobHandle jobHandle = job.Schedule(); jobHandle.Complete(); job.myVertices.CopyTo(myVertices); job.myTriangles.CopyTo(myTriangles); vertices.Dispose(); triangles.Dispose(); SetMesh(); }
protected override JobHandle OnUpdate(JobHandle inputDeps) { // Create a location to recieve data back from the thread NativeArray <Entity> entity = new NativeArray <Entity>(1, Allocator.TempJob); // Create the job // Passing in the Vertex and Triangle buffers from the entity we are working on // As well as the NativeArray we made to recieve the entity MeshGeneratorJob meshGenJob = new MeshGeneratorJob() { vertexData = GetBufferFromEntity <MeshGeneratorVertexData>(false), triangleData = GetBufferFromEntity <MeshGeneratorTriangleData>(false), thisEntity = entity }; JobHandle handle = meshGenJob.Schedule(this, inputDeps); handle.Complete(); if (entity[0] == Entity.Null) { entity.Dispose(); return(handle); } // Once job is done we have the entity that we worked on // So now that the job is over with we can remove the tag // So it won't update anymore till we re-add the tag to // Prompt a re-build EntityManager.RemoveComponent(entity[0], typeof(MeshGeneratorTag)); var renderMesh = EntityManager.GetSharedComponentData <RenderMesh>(entity[0]); NativeArray <Vector3> nativeVertexArray = GetBufferFromEntity <MeshGeneratorVertexData>(true)[entity[0]].Reinterpret <Vector3>().ToNativeArray(Allocator.TempJob); NativeArray <int> nativeTriangleArray = GetBufferFromEntity <MeshGeneratorTriangleData>(true)[entity[0]].Reinterpret <int>().ToNativeArray(Allocator.TempJob); mesh.vertices = nativeVertexArray.ToArray(); mesh.triangles = nativeTriangleArray.ToArray(); mesh.RecalculateNormals(); nativeVertexArray.Dispose(); nativeTriangleArray.Dispose(); EntityManager.SetSharedComponentData(entity[0], new RenderMesh { mesh = mesh }); Debug.Log(EntityManager.GetSharedComponentData <RenderMesh>(entity[0]).mesh.vertexCount); entity.Dispose(); return(handle); }