Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41856
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 344
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-19 11:34
文章分类
文章存档

2014年(22)

我的朋友

分类: 其他平台

2014-06-11 15:10:44

接下来改变地形的高度。地形高度是用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) |
给主人留下些什么吧!~~