1
0
Fork 0
This repository has been archived on 2024-01-06. You can view files and clone it, but cannot push or open issues or pull requests.
MMORPG_PROJECT/Unity network UDP/Assets/scripts/editor/TerrainExport.cs

86 lines
2.5 KiB
C#
Raw Normal View History

2016-06-22 21:45:43 +02:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using System.IO;
using UnityEditor;
class TerrainExport : EditorWindow
{
static TerrainData terraindata;
[MenuItem("Terrain/Export Height Map as MAP")]
static void Init()
{
terraindata = null;
Terrain terrain = null;
if (Selection.activeGameObject)
terrain = Selection.activeGameObject.GetComponent<Terrain>();
if (!terrain)
{
terrain = Terrain.activeTerrain;
}
if (terrain)
{
terraindata = terrain.terrainData;
}
if (terraindata == null)
{
EditorUtility.DisplayDialog("No terrain selected", "Please select a terrain.", "Cancel");
return;
}
float[,] rawHeights = terraindata.GetHeights(0, 0, terraindata.heightmapWidth, terraindata.heightmapHeight);
byte[] data = new byte[terraindata.heightmapWidth * terraindata.heightmapHeight * 4 + 16];
int a = terraindata.heightmapWidth;
data[0] = (byte)((a >> 24) & 0xff);
data[1] = (byte)((a >> 16) & 0xff);
data[2] = (byte)((a >> 8) & 0xff);
data[3] = (byte)((a >> 0) & 0xff);
a = terraindata.heightmapHeight;
data[4] = (byte)((a >> 24) & 0xff);
data[5] = (byte)((a >> 16) & 0xff);
data[6] = (byte)((a >> 8) & 0xff);
data[7] = (byte)((a >> 0) & 0xff);
int pointer = 8;
byte[] array = BitConverter.GetBytes(terraindata.size.x);
foreach (byte b in array)
{
data[pointer++] = b;
}
array = BitConverter.GetBytes(terraindata.size.z);
foreach (byte b in array)
{
data[pointer++] = b;
}
float max = 0;
for (int x = 0; x < terraindata.heightmapWidth; x++)
{
for (int y = 0; y < terraindata.heightmapHeight; y++)
{
float s = rawHeights[y, x] * terraindata.heightmapScale.y;
max = (s > max) ? s : max;
array = BitConverter.GetBytes(s);
foreach (byte b in array)
{
data[pointer++] = b;
}
}
}
File.WriteAllBytes(Application.dataPath + "/" + "heightmap.map", data);
EditorUtility.DisplayDialog("Heightmap Duplicated", "Saved as PNG in Assets/ as: " + "heightmap.map maxheight:" + max + " width:" + terraindata.size.x + " height:" + terraindata.size.z, "Ok");
}
}