Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEditor;
- using UnityEngine;
- using System.IO;
- // various terrain helper tools, a collection of wizards!
- public class SplatmapWizard : ScriptableWizard
- {
- public Terrain targetTerrain;
- public Texture2D customSplatmap;
- private TerrainData data;
- private int w;
- [MenuItem("Terrain/Replace Splatmap...")]
- static void CreateWizard ()
- {
- var wiz = ScriptableWizard.DisplayWizard<SplatmapWizard>("Custom Splatmap", "Replace");
- wiz.targetTerrain = Terrain.activeTerrain;
- }
- void OnWizardCreate ()
- {
- data = targetTerrain.terrainData;
- int w = data.alphamapWidth;
- //data.alphamapResolution = data.GetAlphamaps(0,0,w,w);
- float[,,] splatmapData = data.GetAlphamaps(0, 0, w, w);
- Color[] mapColors = customSplatmap.GetPixels();
- int numSplatMaps = splatmapData.GetLength(2);
- for (int z=0; z<numSplatMaps; ++z)
- {
- for (int y=0; y<w; ++y)
- {
- for (int x=0; x<w; ++x)
- {
- splatmapData[x,y,z] = mapColors[x*w + y][z];
- }
- }
- }
- data.SetAlphamaps(0, 0, splatmapData);
- }
- }
- public class GetSplatmapWizard : ScriptableWizard
- {
- public Terrain terrain;
- public Texture2D targetTexture;
- private TerrainData data;
- private int w;
- [MenuItem("Terrain/Get Texture From Splatmap...")]
- static void CreateWizard ()
- {
- var wiz = ScriptableWizard.DisplayWizard<GetSplatmapWizard>("Custom Splatmap", "Get");
- wiz.terrain = Terrain.activeTerrain;
- }
- void OnWizardCreate ()
- {
- data = terrain.terrainData;
- int w = data.alphamapWidth;
- //data.alphamapResolution = data.GetAlphamaps(0,0,w,w);
- float[,,] splatmapData = data.GetAlphamaps(0, 0, w, w);
- Color[] mapColors = targetTexture.GetPixels();
- int numSplatMaps = splatmapData.GetLength(2);
- for (int z=0; z<numSplatMaps; ++z)
- {
- for (int y=0; y<w; ++y)
- {
- for (int x=0; x<w; ++x)
- {
- mapColors[x*w + y][z] = splatmapData[x,y,z];
- }
- }
- }
- targetTexture.SetPixels( mapColors );
- var bytes = targetTexture.EncodeToPNG();
- File.WriteAllBytes(Application.dataPath + "/"+targetTexture.name+".png", bytes);
- }
- }
- public class FlattenTerrainEdgeWizard : ScriptableWizard
- {
- public Terrain terrain;
- public float flattenToHeight;
- private TerrainData data;
- private int w;
- [MenuItem("Terrain/Flatten Terrain Edge...")]
- static void CreateWizard ()
- {
- var wiz = ScriptableWizard.DisplayWizard<FlattenTerrainEdgeWizard>("Flatten Terrain Edge", "Apply");
- wiz.terrain = Terrain.activeTerrain;
- }
- void OnWizardCreate ()
- {
- data = terrain.terrainData;
- int w = data.heightmapResolution;
- float[,] heights = data.GetHeights(0,0,w,w);
- for (int y=0; y<w; y += 1)
- {
- for (int x=0; x<w; x += 1)
- {
- if (x==0 || y==0 || x==w-1 || y==w-1) heights[x,y] = flattenToHeight;
- }
- }
- data.SetHeights(0,0,heights);
- }
- }
- public class RaiseLowerTerrainWizard : ScriptableWizard
- {
- public Terrain terrain;
- public float amount;
- private TerrainData data;
- private int w;
- [MenuItem("Terrain/Raise or Lower Terrain...")]
- static void CreateWizard ()
- {
- var wiz = ScriptableWizard.DisplayWizard<RaiseLowerTerrainWizard>("Raise or Lower Terrain", "Apply");
- wiz.terrain = Terrain.activeTerrain;
- }
- void OnWizardCreate ()
- {
- data = terrain.terrainData;
- int w = data.heightmapResolution;
- float[,] heights = data.GetHeights(0,0,w,w);
- amount /= data.heightmapScale.y;
- for (int y=0; y<w; ++y)
- {
- for (int x=0; x<w; ++x)
- {
- heights[x,y] += amount;
- }
- }
- data.SetHeights(0,0,heights);
- }
- }
- public class GroundAndAlignToTerrain : ScriptableWizard
- {
- public Terrain terrain;
- public bool alignRotationToSurface = true;
- public float upwardsOffset = 0;
- public bool randomYRotation = false;
- [MenuItem("Terrain/Ground and align selected objects to Terrain...")]
- static void CreateWizard ()
- {
- var wiz = ScriptableWizard.DisplayWizard<GroundAndAlignToTerrain>("Ground and align selected objects to Terrain", "Apply");
- wiz.terrain = Terrain.activeTerrain;
- }
- void OnWizardCreate ()
- {
- foreach (var obj in Selection.gameObjects)
- {
- Vector3 pos = obj.transform.position;
- float height = terrain.SampleHeight(pos);
- float x = pos.x-terrain.transform.position.x;
- float z = pos.z-terrain.transform.position.z;
- Vector3 up = terrain.terrainData.GetInterpolatedNormal(x,z);
- pos.y = height;
- obj.transform.position = pos;
- if (alignRotationToSurface)
- {
- obj.transform.rotation = Quaternion.LookRotation( obj.transform.forward, up );
- }
- obj.transform.Translate( 0, upwardsOffset, 0, Space.Self );
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment