Unity3D 动态改变地形 Unity3D Dynamic Change Terrain
直接获取TerrainData进行修改即可
using System.Collections; using UnityEngine; using UnityEditor; public class DynamicCreateTerrain : MonoBehaviour { public TerrainData terrainData; private float[,] heightsBackups; void Start() { //var terrain = CreateTerrain(); ModifyTerrainDataHeight(terrainData); // 5秒后恢复地形 StartCoroutine(Disable()); } // 动态创建地形 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); GameObject obj = Terrain.CreateTerrainGameObject(terrainData); AssetDatabase.CreateAsset(terrainData, "Assets/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; } // 备份高度图 heightsBackups = terrainData.GetHeights(0, 0, width, height); // 设置高度图 terrainData.SetHeights(0, 0, array); } IEnumerator Disable() { yield return new WaitForSeconds(5); Debug.Log("Recove Terrain."); terrainData.SetHeights(0, 0, heightsBackups); } }
需要注意的是,如果是在Editor模式下, 这样操作会直接修改TerrainData的数据,需要注意备份,不过打包完就没事,不会再被修改了。
这种做法可以动态改变地形,用来实现一些例如挖洞等的效果。
动态改变地形的插件:https://www.assetstore.unity3d.com/cn/#!/content/65795
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了