/// <summary> /// Applied the given visual and collision meshes to the chunk object. /// </summary> /// <param name="chunk">The chunk to refresh.</param> /// <param name="visualMesh">The new visual mesh data.</param> /// <param name="collisionMesh">The new collision mesh data.</param> public void RefreshMeshes(BlockChunk chunk, RemeshFinishEvent ev, Bones3TextureAtlasList atlasList) { var visualMesh = ev.Report.VisualMesh; var collisionMesh = ev.Report.CollisionMesh; var atlases = ev.Report.Atlases; var meshFilter = chunk.GetComponent <MeshFilter>(); var meshCollider = chunk.GetComponent <MeshCollider>(); var meshRenderer = chunk.GetComponent <MeshRenderer>(); UpdateMesh(visualMesh, meshFilter.sharedMesh); UpdateMesh(collisionMesh, meshCollider.sharedMesh); var materials = new Material[visualMesh.TotalLayers]; for (int i = 0; i < materials.Length; i++) { materials[i] = atlasList.GetAtlas(atlases[i]).Material; } meshRenderer.sharedMaterials = materials; // To trigger a refresh. meshFilter.sharedMesh = meshFilter.sharedMesh; meshCollider.sharedMesh = meshCollider.sharedMesh; }
/// <summary> /// Called when a chunk finishes a remesh event. /// </summary> /// <param name="ev">The event.</param> private void OnRemeshFinished(RemeshFinishEvent ev) { var chunk = GetChunk(ev.Report.ChunkPosition); var visualMesh = ev.Report.VisualMesh; var collisionMesh = ev.Report.CollisionMesh; m_MeshBuilder.RefreshMeshes(chunk, visualMesh, collisionMesh); }
private void OnRemeshFinish(RemeshFinishEvent ev) { var report = ev.Report; var visual = report.VisualMesh; var meshBuilder = new ChunkMeshBuilder(); meshBuilder.UpdateMesh(visual, mesh); materials = new Material[visual.TotalLayers]; for (int i = 0; i < materials.Length; i++) { materials[i] = null; } }
/// <summary> /// Called when a chunk finishes a remesh event. /// </summary> /// <param name="ev">The event.</param> private void OnRemeshFinished(RemeshFinishEvent ev) { var chunk = GetChunk(ev.Report.ChunkPosition); m_MeshBuilder.RefreshMeshes(chunk, ev, m_TextureAtlasList); }