Exemplo n.º 1
0
        public void Initialize(Vector3 position, float width, float height)
        {
            Width  = width;
            Height = height;

            var terrainData = BuildTerrainData(width, height);

            if (Terrain == null)
            {
                var terrainGameObject = Terrain.CreateTerrainGameObject(terrainData);

                terrainGameObject.layer = LayerMask.NameToLayer("Terrain");

                terrainGameObject.transform.SetParent(transform, false);

                Terrain = terrainGameObject.GetComponent <Terrain>();

                TerrainCollider = terrainGameObject.GetComponent <TerrainCollider>();
            }
            else
            {
                Terrain.terrainData         = terrainData;
                TerrainCollider.terrainData = terrainData;
            }

            transform.position = position;

            InstancedTerrainMaterial = new Material(RenderConfig.TerrainMaterialTemplate);
            InstancedWaterMaterial   = new Material(RenderConfig.StandingWaterData.RenderingData.Material);

            Vector4 bakeTextureDimensions = new Vector4(
                transform.position.x - RenderConfig.OuterRadius * 1.5f,
                transform.position.z - RenderConfig.OuterRadius * 1.5f,
                RenderConfig.ChunkWidth + RenderConfig.OuterRadius * 3f,
                RenderConfig.ChunkHeight + RenderConfig.OuterRadius * 3f
                );

            InstancedTerrainMaterial.SetVector("_BakeTextureDimensions", bakeTextureDimensions);
            InstancedWaterMaterial.SetVector("_BakeTextureDimensions", bakeTextureDimensions);

            InstancedWaterMaterial.EnableKeyword("USE_BAKE_TEXTURE");

            Terrain.shadowCastingMode            = RenderConfig.TerrainShadowCastingMode;
            Terrain.basemapDistance              = RenderConfig.TerrainBasemapDistance;
            Terrain.materialType                 = Terrain.MaterialType.Custom;
            Terrain.materialTemplate             = InstancedTerrainMaterial;
            Terrain.heightmapPixelError          = RenderConfig.TerrainHeightmapPixelError;
            Terrain.drawTreesAndFoliage          = false;
            Terrain.editorRenderFlags            = TerrainRenderFlags.Heightmap;
            Terrain.reflectionProbeUsage         = UnityEngine.Rendering.ReflectionProbeUsage.Off;
            Terrain.bakeLightProbesForTrees      = false;
            Terrain.freeUnusedRenderingResources = true;

            StandingWater.OverrideMaterial(InstancedWaterMaterial);

            Terrain.Flush();
        }
Exemplo n.º 2
0
        private void RefreshWater()
        {
            StandingWater.Clear();

            foreach (var cell in CenteredCells)
            {
                if (cell.Terrain.IsWater())
                {
                    WaterTriangulator.TriangulateWaterForCell(cell, transform, StandingWater);
                }
            }

            StandingWater.Apply();
        }