Skip to content

Instantly share code, notes, and snippets.

@STARasGAMES
Last active May 23, 2021 18:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save STARasGAMES/2fa1e2b6b5d2cb7ab05cdc58d3f7c588 to your computer and use it in GitHub Desktop.
Save STARasGAMES/2fa1e2b6b5d2cb7ab05cdc58d3f7c588 to your computer and use it in GitHub Desktop.
Script responsoble for setting terrain's grass wind settings. It restores default terrain's asset 'TerrainData' after disable so you will not lose your default settings.
using UnityEngine;
namespace Core.Utilities
{
// Creates a new instance of terrain data that can be safely changed.
// Applies wind wettings specified in inspector.
public class TerrainGrassWindSettingsSetter : MonoBehaviour
{
[SerializeField]
private Terrain _terrain;
[SerializeField]
private TerrainGrassWindSettings _windSettings;
private TerrainData _originalTerrainData;
private TerrainData _terrainData;
private void OnEnable()
{
if (_terrain == null)
{
Debug.LogError("Terrain is not specified!");
return;
}
_originalTerrainData = _terrain.terrainData;
_terrainData = Instantiate(_originalTerrainData);
_windSettings.SetToTerrainData(_terrainData);
_terrain.terrainData = _terrainData;
}
private void OnDisable()
{
if (_originalTerrainData != null)
{
_terrain.terrainData = _originalTerrainData;
}
if (_terrainData != null)
{
Destroy(_terrainData);
}
_terrainData = null;
}
[System.Serializable]
private class TerrainGrassWindSettings
{
[Range(0f, 1f)]
public float speed;
[Range(0f, 1f)]
public float size;
[Range(0f, 1f)]
public float bending;
public Color tint = new Color32(178, 153, 128, 255);
public void SetToTerrainData(TerrainData terrainData)
{
terrainData.wavingGrassStrength = speed;
terrainData.wavingGrassSpeed = size;
terrainData.wavingGrassAmount = bending;
terrainData.wavingGrassTint = tint;
}
public static TerrainGrassWindSettings FromTerrainData(TerrainData terrainData)
{
return new TerrainGrassWindSettings()
{
speed = terrainData.wavingGrassStrength,
size = terrainData.wavingGrassSpeed,
bending = terrainData.wavingGrassAmount,
tint = terrainData.wavingGrassTint
};
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment