Ejemplo n.º 1
0
        public void UpdateCollisionMesh()
        {
            if (HasSetCollider || (Viewer?.ViewerType == TerrainViewer.ViewerTypes.secondary))
            {
                return;
            }

            float sqrDstFromViewerToEdge = Bounds.SqrDistance(ViewerPosition);

            if (sqrDstFromViewerToEdge < detailLevels[colliderLODIndex].SqrVisibleDistanceThreshold)
            {
                if (!lodMeshes[colliderLODIndex].HasRequestedMesh)
                {
                    lodMeshes[colliderLODIndex].RequestMesh(DataMap.HeightMap, MeshSettings);
                }
            }

            if (sqrDstFromViewerToEdge < sqrColliderGenerationDistanceThreshold)
            {
                if (lodMeshes[colliderLODIndex].HasMesh)
                {
                    meshCollider.sharedMesh = lodMeshes[colliderLODIndex].Mesh;
                    HasSetCollider          = true;
                    OnColliderChanged?.Invoke(this, true);
                }
            }
        }
Ejemplo n.º 2
0
        public void SetVisible(bool visible)
        {
            // Clean up any visible chunkparts
            if (DataMapReceived)
            {
                foreach (TerrainChunkPart chunkPart in DataMap.ChunkParts.Values)
                {
                    if (chunkPart.Visible)
                    {
                        chunkPart.Visible = false;
                    }
                }
            }

            MeshObject.SetActive(visible);

            meshCollider.sharedMesh = null;
            HasSetCollider          = false;
            OnColliderChanged?.Invoke(this, false);
        }