接下来改变地形的高度。地形高度是用heightmap存储的。
代码里通过TerrainData.GetHeights()读取高度图里的二维高度数组,
通过TerrainData.SetHeights()设置高度图里的二维高度数组。
TerrainData.GetHeights(int x的起点,int y的起点,int 读取高度的宽度范围, int 读取高度的高度范围),返回float[,] ,二维高度数组
TerrainData.SetHeights(int x的起点,int y的起点,float[,] 二维高度数组),返回void
例子:在创建地形前,改变地形的高度,代码如下:
using UnityEngine;
using System.Collections;
using UnityEditor;
public class Tutor_2_CreateTerrain_ModifyHeight : MonoBehaviour {
void Start()
{
CreateTerrain();
}
public Terrain CreateTerrain()
{
TerrainData terrainData = new TerrainData();
terrainData.heightmapResolution = 513;
terrainData.baseMapResolution = 513;
terrainData.size = new Vector3(50, 50, 50);
terrainData.alphamapResolution = 512;
terrainData.SetDetailResolution(32, 8);
ModifyTerrainDataHeight(terrainData);
GameObject obj = Terrain.CreateTerrainGameObject(terrainData);
AssetDatabase.CreateAsset(terrainData,"Assets/Tutorial/Tutor_2_Terrain_ModifyHeight.asset");
AssetDatabase.SaveAssets();
return obj.GetComponent<Terrain>();
}
public void ModifyTerrainDataHeight(TerrainData terrainData)
{
int width = terrainData.heightmapWidth;
int height = terrainData.heightmapHeight;
float[,] array = new float[width,height];
print ("width:"+ width +" height:"+ height );
for(int i=0; i< width;i++)
for(int j=0; j< height;j++)
{
float f1 = i;
float f2 = width;
float f3 = j;
float f4 = height;
float baseV = (f1/f2 + f3/f4)/2 * 1;
array[i,j] =baseV*baseV;
}
terrainData.SetHeights(0,0,array);
}
}
阅读(2064) | 评论(0) | 转发(0) |