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