public static Terrain[] GetTerrainsInGroup(Terrain terrain) { TerrainUtility.TerrainMap terrainMap = TerrainUtility.TerrainMap.CreateFromPlacement(terrain, null, false); Terrain[] terrainGroup = terrainMap.m_terrainTiles.Select(o => o.Value).ToArray(); return(terrainGroup); }
public override void OnSceneGUI(Terrain terrain, IOnSceneGUI editContext) { if ((Event.current.type == EventType.MouseUp || Event.current.type == EventType.MouseDown) && (Event.current.button == 2 || Event.current.alt) || terrain.terrainData == null) { return; } Quaternion rot = new Quaternion(); rot.eulerAngles = new Vector3(90, 00, 0); Handles.color = new Color(0.9f, 1.0f, 0.8f, 1.0f); Vector3 size = terrain.terrainData.size; TerrainUtility.TerrainMap mapGroup = TerrainUtility.TerrainMap.CreateFromPlacement(terrain); if (mapGroup == null) { return; } foreach (TerrainUtility.TerrainMap.TileCoord coord in mapGroup.m_terrainTiles.Keys) { int x = coord.tileX; int y = coord.tileZ; Terrain t = mapGroup.GetTerrain(x, y); if (t == null) { continue; } Terrain left = mapGroup.GetTerrain(x - 1, y); Terrain right = mapGroup.GetTerrain(x + 1, y); Terrain top = mapGroup.GetTerrain(x, y + 1); Terrain bottom = mapGroup.GetTerrain(x, y - 1); Vector3 pos = t.transform.position + 0.5f * new Vector3(size.x, 0, size.z); if ((bottom == null) && Handles.Button(pos + new Vector3(0, 0, -size.z), rot, 0.5f * size.x, 0.5f * size.x, Handles.RectangleHandleCapWorldSpace)) { CreateNeighbor(terrain, t.transform.position + Vector3.back * size.z); } if ((top == null) && Handles.Button(pos + new Vector3(0, 0, size.z), rot, 0.5f * size.x, 0.5f * size.x, Handles.RectangleHandleCapWorldSpace)) { CreateNeighbor(terrain, t.transform.position + Vector3.forward * size.z); } if ((right == null) && Handles.Button(pos + new Vector3(size.x, 0, 0), rot, 0.5f * size.x, 0.5f * size.x, Handles.RectangleHandleCapWorldSpace)) { CreateNeighbor(terrain, t.transform.position + Vector3.right * size.x); } if ((left == null) && Handles.Button(pos + new Vector3(-size.x, 0, 0), rot, 0.5f * size.x, 0.5f * size.x, Handles.RectangleHandleCapWorldSpace)) { CreateNeighbor(terrain, t.transform.position + Vector3.left * size.x); } } }