直接获取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

转载于:https://www.cnblogs.com/jeason1997/p/5776594.html

Unity3D 动态改变地形相关推荐

  1. Unity3d 动态字体

    https://www.xuebuyuan.com/2147872.html Unity3d 动态字体 2014年09月05日 ⁄ 综合 ⁄ 共 2101字 ⁄ 字号 小 中 大 ⁄ 评论关闭 目前测 ...

  2. Unity3D动态修改RectTransform

    Unity3D动态修改RectTransform 改变RectTransform的width,height GetComponent<RectTransform>().rect.width ...

  3. Unity3D动态创建地形网格(一)

    Unity3D动态创建地形网格(一) 这次简单的写一个动态创建地形网格的脚本给大家分享一下. 这次是第一部分,仅仅实现了通过高度图动态生成地形的部分.假如以后有心情和时间,再来慢慢的补充多通道刷地形材 ...

  4. 关于Unity3D动态生成连续性网格几何体总结【第三部分】(贴图篇)

    关于Unity3D动态生成连续性网格几何体总结[第三部分](贴图篇) 文章目录 关于Unity3D动态生成连续性网格几何体总结[第三部分](贴图篇) 前言 一.动态建立UV值 二.贴图的平铺与拉伸 二 ...

  5. (转)Unity3d使用心得(2):Unity3d 动态下载动画资源——AnimationClip 的使用

    引言: 在使用 Unity3d 开发微端.或者网页游戏的时候经常需要将资源打包成 AssetBundle ,然后通过 www 的方式动态的下载资源.今天要分享的是我再动态下载 Animation 骨骼 ...

  6. unity3d 动态合批设置_【CocosCreator】突破动态合图

    1. 动态合图的默认规则 引擎中对动态合图的描述如下: 它能在项目运行时动态的将贴图合并到一张大贴图中.当渲染一张贴图的时候,动态合图系统会自动检测这张贴图是否已经被合并到了图集(图片集合)中,如果没 ...

  7. Unity3D 动态加载资源方式

    在Unity3d游戏开发中,我们经常需要频繁创建物体,而其中的资源读取就是个问题.其中Unity为我们资源读取提供了几种基本方法,总的来说分为从内部读取和从外部读取. 1.Resources.Load ...

  8. unity3d 动态合批设置_Unity动态合批(Dynamic Batching)与静态合批(Static Batching)

    动态合批与静态合批其本质是对将多次绘制请求,在允许的条件下进行合并处理,减少cpu对gpu绘制请求的次数,达到提高性能的目的. 1.静态合批是将静态(不移动)GameObjects组合成大网格,然后进 ...

  9. Unity3D 动态加载CAD模型 最后总结

    相关技术文档下载:网盘技术宣传文档 请大家先看过文档之后再来咨询 我不是销售而是技术人员 FQA 能不能直接转换? 不能!不能!不能!重要的事情说三遍!需要转中间格式(svz,公司自有) 中间格式那么 ...

  10. Unity3D 动态加载 图片序列正反播放

    参考来源 跟来源的电子图书翻页多了点细节上的变化. using UnityEngine; using System.Collections; using System.Resources;public ...

最新文章

  1. 手把手教你用Kaggle开启机器学习之旅(附资源链接)
  2. 转: 学ppt的网址与素材
  3. linux命令之less命令
  4. xgboost与gbdt的区别
  5. JavaScript高程第十章:DOM(上)
  6. 计算机快捷键m是什么,教程方法;m、ac快捷键电脑技巧-琪琪词资源网
  7. mysql8.1改密码,mysql 8.0以上版本修改root密码的方法
  8. Java Lombok详解
  9. GO分析和KEGG分析都是啥?
  10. 什么是深度可分离卷积及深度可分离卷积的优势
  11. 大数据技术的概论(2)
  12. STM32CubeMX 下载和安装 详细教程
  13. jetty服务器使用jersey作为Restful框架
  14. python运势预测程序_基于Python的星座运势接口调用代码实例
  15. Words Five
  16. webstorm 重新下载破解版插件后打不开了?
  17. 二分图的最小顶点覆盖 和 最大独立集 和 最大团
  18. 如何最快的让Google收录你的网站!(转)
  19. 菜鸟必看 揭开系统资源的神秘面纱
  20. 深大uooc学术道德与学术规范教育第八章

热门文章

  1. [Python3] 面向对象编程
  2. 斐波那契数列n项的值。(递归和非递归算法Golang实现)
  3. C++入门经典-例3.9-使用嵌套表达式判断一个数是否是3和5的整数倍
  4. Vim vimrc配置
  5. 站立会议07(第二次冲刺)
  6. android自定义viewgroup实现等分格子布局
  7. 解析接口中的JSON数据
  8. Tasty项目经验总结(不断补充中)
  9. 云安全:这也是需要花大钱去建设的部分
  10. iOS的QuickTime Plugin