Indicate the types of changes to the terrain in OnTerrainChanged callback.
Use bitwise AND to detect multiple changes.
using UnityEngine;
[ExecuteInEditMode] public class DetectTerrainChanges : MonoBehaviour { void OnTerrainChanged(TerrainChangedFlags flags) { if ((flags & TerrainChangedFlags.Heightmap) != 0) { Debug.Log("Heightmap changes"); }
if ((flags & TerrainChangedFlags.DelayedHeightmapUpdate) != 0) { Debug.Log("Heightmap painting"); }
if ((flags & TerrainChangedFlags.TreeInstances) != 0) { Debug.Log("Tree changes"); } } }
The above example shows how you can detect terrain changes by using OnTerrainChanged callback and TerrainChangedFlags enum.
Heightmap | Indicates a change to the heightmap data. |
TreeInstances | Indicates a change to the tree data. |
DelayedHeightmapUpdate | Indicates a change to the heightmap data without computing LOD. |
FlushEverythingImmediately | Indicates that a change was made to the terrain that was so significant that the internal rendering data need to be flushed and recreated. |
RemoveDirtyDetailsImmediately | Indicates a change to the detail data. |
HeightmapResolution | Indicates a change to the heightmap resolution. |
Holes | Indicates a change to the Terrain holes data. |
DelayedHolesUpdate | Indicates a change to the Terrain holes data, which doesn't include LOD calculations and tree/vegetation updates. |
WillBeDestroyed | Indicates that the TerrainData object is about to be destroyed. |