unity地形Terrain浅谈

从前对unity3dTerrain这块了解很少,只知道他可以刷地形。这几天一直弄地形,发现地形有点意思,主要通过以下几点来说明:

(1)地形尺寸是可以改变的,一般自动创建的是长度2000宽度2000高度600的。可以通过地形设置进行改变,而通过面板中的s缩放是没有效果的。

(2)想创建两个地形,但是想运用不同的树模型,但是地形的凸起是不想改变的。为了省事,有时候直接负责地形,但是这样会出现两块地形会同步更新树模型。出现这个原因主要是因为复制地形时,不会新建一个地形信息,它们共用相同的信息,所以导致同步更新。而新建一个地形,就会在project面板中产生一个Terrain asset的文件夹,这个文件夹就是地形的信息,就不会出现该问题,但是还得重新刷凸起效果,费时费力。这时可以通过代码来改变地形信息,这样问题就解决了。

(3)其实还可动态创建地形以及树模型等。详细内容可参考http://blog.sina.com.cn/s/blog_471132920101fzod.html

(4)树模型可以通过代码替换,前提是把树模型都添加到创建树的面板中,然后通过索引值0,1,2,3方式进行调用


*******************************************************************************

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
切片过程 1)开始切片过程,在Unity编辑器顶部选择地形选项,然后单击“切片地形”选项。一个窗口出现一些配置信息。 2)拖动您希望分割为“地形切片”字段的地形。或者,如果您在步骤1中单击“切片地形”选项时选择了地形,则该字段中已经出现了地形。 3)输入每个补丁的详细分辨率。优选地,该值应与每个补丁值的基本地形细节分辨率匹配。这些信息不能通过脚本访问,这就是为什么你必须在这里输入它。您可以输入与基础地形设置不同的值,但这将导致细节网格(植物和草地)复制的准确性降低。 4)选择您希望结束的切片维度。2×2仅仅意味着基本地形将沿着X轴2次和Z轴2次分割,以创建4个地形片。64×64未经测试,不建议使用,所以请自行承担风险。 5)设置希望存储地形数据的文件路径。默认情况下,这是资产/ terrainslicing /地形数据。如果您希望暂时在另一个文件夹中创建地形数据,只需在这里输入新路径。如果希望永久更改默认文件夹,请输入新的文件路径,并选择“保存当前文件路径作为默认文件路径”按钮。请确保没有“/”后的文件路径上的文件夹名称(例如,用于文件的默认路径的地形数据后),否则将出现错误。 6)当单击“创建地形”按钮时,选择是否覆盖现有的地形数据。这是一个安全功能,以确保你不小心覆盖的地形数据,你已经创造了。如果试图在未选中此值时重写数据,则出现警告消息,告诉您要检查此值,而切片操作将不开始。 7)单击“创建地形”按钮,等待进度条填充。如果进度条未显示,则在编辑器窗口显示通知错误的通知消息。有时您可能需要检查控制台以获得更详细的信息。最后,确保只在编辑模式下执行切片地形脚本。
要根据经纬度更改Unity中的地形,你需要进行以下步骤: 1. 获取地形高度数据。你可以使用一些在线API或者自己创建高度图,将其导入到Unity中。 2. 将经纬度转换为Unity中的坐标。你可以使用一些库或者自己编写代码来实现。 3. 在地形上更改高度值。通过遍历地形上的每个点,并将其高度值更改为对应的高度数据,来实现更改地形高度。 以下是一个简单的示例代码,可以根据经纬度更改Unity中的地形高度: ```csharp public Terrain terrain; // 地形对象 public float[,] heightData; // 高度数据 public void ChangeTerrainHeight(float latitude, float longitude, float height) { int width = terrain.terrainData.heightmapResolution; int height = terrain.terrainData.heightmapResolution; float resolutionX = terrain.terrainData.size.x / (width - 1); float resolutionZ = terrain.terrainData.size.z / (height - 1); // 将经纬度转换为Unity坐标 float x = (longitude + 180) / 360 * width * resolutionX; float z = (latitude + 90) / 180 * height * resolutionZ; // 获取地形上的点的高度值 heightData = terrain.terrainData.GetHeights(0, 0, width, height); // 更改高度值 int xIndex = Mathf.RoundToInt(x / resolutionX); int zIndex = Mathf.RoundToInt(z / resolutionZ); heightData[zIndex, xIndex] = height; // 应用更改后的高度值到地形terrain.terrainData.SetHeights(0, 0, heightData); } ``` 注意:这只是一个简单的示例代码,实际应用中可能需要更多的处理和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值