public void RecycleTerrain(TerrainData p_data, bool p_isDefaultTerrainDataApplied) { if (m_terrain != null) { if (p_isDefaultTerrainDataApplied && m_defaultTerrainDataPrefab != null) { ApplyDefaultTerrainData(p_data); if (p_data.treePrototypes.Length > 0) { // this will force an update of the tree y positions p_data.SetHeights(0, 0, p_data.GetHeights(0, 0, 0, 0)); } } m_terrain.enabled = false; // destroy old terrain data Object.Destroy(m_terrain.terrainData); // assign new terrain data m_terrain.terrainData = p_data; if (m_terrain.GetComponent <TerrainCollider>() != null) { m_terrain.GetComponent <TerrainCollider>().terrainData = p_data; } else { Debug.LogError("LE_GUI3dTerrain: RecycleTerrain: the CustomDefaultTerrain assigned to LE_ConfigTerrain must have a collider!"); } // apply terrain changes m_terrain.Flush(); m_terrain.enabled = true; // warning of a possible seldom crash with specific resolution changes TT_Terrain9Patch terrain9patcher = m_terrain.GetComponent <TT_Terrain9Patch>(); if (terrain9patcher != null) { terrain9patcher.CrashCheck(); } // recreate terrain manager Terrain buffer = m_terrain; RemoveTerrainManager(); SetTerrain(buffer); } else { Debug.LogError("LE_GUI3dTerrain: RecycleTerrain: there is not terrain that can be recycled. Call this function only if TerrainInstance is not null!"); } }
private void Start() { m_patchGroup = FindObjectOfType <TT_Terrain9Patch>(); LE_EventInterface.OnChangeLevelData += OnChangeLevelData; }