Unity3D 动态改变地形
直接获取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 = ;
terrainData.baseMapResolution = ;
terrainData.size = new Vector3(, , );
terrainData.alphamapResolution = ;
terrainData.SetDetailResolution(, );
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 = ; i < width; i++)
for (int j = ; j < height; j++)
{
float f1 = i;
float f2 = width;
float f3 = j;
float f4 = height;
float baseV = (f1 / f2 + f3 / f4) / * ;
array[i, j] = baseV * baseV;
}
// 备份高度图
heightsBackups = terrainData.GetHeights(, , width, height);
// 设置高度图
terrainData.SetHeights(, , array);
} IEnumerator Disable()
{
yield return new WaitForSeconds();
Debug.Log("Recove Terrain.");
terrainData.SetHeights(, , heightsBackups);
}
}
需要注意的是,如果是在Editor模式下, 这样操作会直接修改TerrainData的数据,需要注意备份,不过打包完就没事,不会再被修改了。
这种做法可以动态改变地形,用来实现一些例如挖洞等的效果。
动态改变地形的插件:
https://www.assetstore.unity3d.com/cn/#!/content/65795

Unity3D 动态改变地形的更多相关文章
- 于Unity3D动态创建对象和创建Prefab三种方式的原型对象
于Unity3D动态创建对象和创建Prefab三种方式的原型对象 u3d在动态创建的对象,需要使用prefab 和创建时 MonoBehaviour.Instantiate( GameObject o ...
- Unity3d 动态加载场景物件与缓存池的使用
聊聊Unity3d动态加载场景物件那些事儿. 众所周知,在策划或美术设计完游戏场景地图后,一个场景中可能会存在成千上万个小的物件,比如石头,木箱子,油桶,栅栏等等等等,这些物件并不是游戏中的道具,仅仅 ...
- Unity3d 动态批处理的问题
这段时间做unity3d的优化,主要的入手是减少draw call. 1.代码上主要是把一些零碎的同材质的合并成一个大的mesh. 2.减少不必要的全屏后期处理.把摄像机的renderin ...
- Unity3D动态加载外部资源
最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质上我理解没有什么区别.Resources ...
- Unity3D动态读取外部MP3文件给AudioSource
在PC端VR游戏开发中,需要动态加载本地的MP3文件,但是Unity3D不知道出于什么原因,到5.4.0也不支持MP3文件的外部加载(目前只支持wav和ogg). 因此要想通过www来加载mp3文件就 ...
- (转)Unity3d使用心得(2):Unity3d 动态下载动画资源——AnimationClip 的使用 - 斯玛特琦
引言: 在使用 Unity3d 开发微端.或者网页游戏的时候常常须要将资源打包成 AssetBundle ,然后通过 www 的方式动态的下载资源.今天要分享的是我再动态下载 Animation 骨骼 ...
- unity3d动态加载dll的API以及限制
Unity3D的坑系列:动态加载dll 一.使用限制 现在参与的项目是做MMO手游,目标平台是Android和iOS,iOS平台不能动态加载dll(什么原因找乔布斯去),可以直接忽略,而在Androi ...
- Unity3D动态加载外部MovieTexture视频
网上大家也写了很多Unity3D中播放视频的教程,关于播放外部视频的还是比较少,所以写这篇文章,不足之处,还望读者指正. 在Unity3D中,我们一般使用播放视频的方法:将*.mov,*.mp4等格式 ...
- unity3d动态加载资源
在Unity3D的网络游戏中实现资源动态加载 分类: 最新学习2012-06-14 13:35 1127人阅读 评论(0) 收藏 举报 网络游戏nullvectorjson游戏string 用Unit ...
随机推荐
- linux输入子系统(input subsystem)之evdev.c事件处理过程
1.代码 input_subsys.drv.c 在linux输入子系统(input subsystem)之按键输入和LED控制的基础上有小改动,input_subsys_test.c不变. input ...
- 禁止chrome记住密码
谷歌浏览器保存密码后输入框背景色变成黄色,会影响原来的输入框样式,css样式input:-webkit-autofill可以改变输入框样式,background-color,background-im ...
- AngularJS(1)
AngularJS(1) 在讲正题之前,先说一下有关angular简介方面的信息: 1. angularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优 ...
- mac下openresty安装
//openresty安装 http://openresty.org/ brew updatebrew install pcre openssl ./configure --prefix=/usr/l ...
- [LeetCode] Ugly Number 丑陋数
Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers ...
- [LeetCode] Best Time to Buy and Sell Stock III 买股票的最佳时间之三
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- [LeetCode] Sort Colors 颜色排序
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- [LeetCode] Sudoku Solver 求解数独
Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...
- ajax的循环
一.业务需求 在开发中,当一个列表页面加载完成后,我需要根据列表每一项的id去服务器端获取对应的数据然后再把获取的数据赋给当前id对应的标签. 例如如下表格: 我有一系列的商品编号,我需要根据商品编号 ...
- IEEE 802.11p (WAVE,Wireless Access in the Vehicular Environment)
IEEE 802.11p(又称WAVE,Wireless Access in the Vehicular Environment)是一个由IEEE 802.11标准扩充的通讯协定.这个通讯协定主要用在 ...