Guest User

Untitled

a guest
Oct 19th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. public class TerrainDetector
  4. {
  5. private TerrainData terrainData;
  6. private int alphamapWidth;
  7. private int alphamapHeight;
  8. private float[,,] splatmapData;
  9. private int numTextures;
  10.  
  11. public TerrainDetector()
  12. {
  13. terrainData = Terrain.activeTerrain.terrainData;
  14. alphamapWidth = terrainData.alphamapWidth;
  15. alphamapHeight = terrainData.alphamapHeight;
  16.  
  17. splatmapData = terrainData.GetAlphamaps(0, 0, alphamapWidth, alphamapHeight);
  18. numTextures = splatmapData.Length / (alphamapWidth * alphamapHeight);
  19. }
  20.  
  21. private Vector3 ConvertToSplatMapCoordinate(Vector3 worldPosition)
  22. {
  23. Vector3 splatPosition = new Vector3();
  24. Terrain ter = Terrain.activeTerrain;
  25. Vector3 terPosition = ter.transform.position;
  26. splatPosition.x = ((worldPosition.x - terPosition.x) / ter.terrainData.size.x) * ter.terrainData.alphamapWidth;
  27. splatPosition.z = ((worldPosition.z - terPosition.z) / ter.terrainData.size.z) * ter.terrainData.alphamapHeight;
  28. return splatPosition;
  29. }
  30.  
  31. public int GetActiveTerrainTextureIdx(Vector3 position)
  32. {
  33. Vector3 terrainCord = ConvertToSplatMapCoordinate(position);
  34. int activeTerrainIndex = 0;
  35. float largestOpacity = 0f;
  36.  
  37. for (int i = 0; i < numTextures; i++)
  38. {
  39. if (largestOpacity < splatmapData[(int)terrainCord.z, (int)terrainCord.x, i])
  40. {
  41. activeTerrainIndex = i;
  42. largestOpacity = splatmapData[(int)terrainCord.z, (int)terrainCord.x, i];
  43. }
  44. }
  45.  
  46. return activeTerrainIndex;
  47. }
  48.  
  49. }
Add Comment
Please, Sign In to add comment