Unity3d 保存和使用地形高度
TerrainHeightProcesser 地形高度存储工具
TerrainHeightData 地形高度数据
// class TerrainHeightProcesser
- using UnityEngine;
- using System.Collections;
- using System.IO;
- using UnityEditor;
- using System.Collections.Generic;
- /*
- * 地形高度处理器
- */
- public class TerrainHeightProcesser : ScriptableWizard
- {
- public int mapWdith;
- public int mapHeight;
- [MenuItem("Tools/Save Terrain Height File")]
- public static void OpenDialog()
- {
- DisplayWizard<TerrainHeightProcesser>("Save Terrain Height", "Save", "Cancel");
- }
- public void SaveTerrainHeightFile()
- {
- //以每米为间隔从高空向下发射射线
- Vector3 pos = Vector3.zero;
- pos.y = 100;
- Ray ray = new Ray(pos, -Vector3.up);
- Vector3 targetPos = Vector3.zero;
- //创建一个对象
- TerrainHeightData th = ScriptableObject.CreateInstance<TerrainHeightData>();
- th.MapWidth = mapWdith;
- th.MapHeight = mapHeight;
- th.List = new List<float>();
- //纵向
- for (short i = 0; i < mapHeight; i++)
- {
- pos.z = i;
- //横向
- for (short j = 0; j < mapWdith; j++)
- {
- targetPos = Vector3.zero;//默认zero
- pos.x = j;
- ray.origin = pos;
- RaycastHit result;
- if (Physics.Raycast(ray, out result))
- {
- targetPos = result.point;
- }
- th.List.Add(targetPos.y);
- }
- }
- //计算file name
- string sceneName = UnityEditor.EditorApplication.currentScene;
- int start = sceneName.LastIndexOf('/') + 1;
- int count = sceneName.LastIndexOf('.')-start;
- sceneName = sceneName.Substring(start, count);
- string path = "Assets/ArtAsset/TerrainHeightData/" + sceneName + ".asset";
- //保存
- AssetDatabase.CreateAsset(th, path);
- AssetDatabase.Refresh();
- string str = string.Empty;
- str += "mapHeight=" + mapHeight.ToString() + " ";
- str += "mapWdith=" + mapWdith.ToString();
- EditorUtility.DisplayDialog("SUCCESS", "file:" + path + "\n" + str, "OK");
- }
- void OnWizardCreate()
- {
- SaveTerrainHeightFile();
- }
- void OnWizardOtherButton()
- {
- Close();
- }
- }
//TerrainHeightData
- using UnityEngine;
- using System.Collections;
- using System.IO;
- using System.Collections.Generic;
- public class TerrainHeightData : ScriptableObject
- {
- [SerializeField]
- public int MapWidth = 0;
- [SerializeField]
- public int MapHeight = 0;
- [SerializeField]
- public List<float> List;
- public float GetTerrainHeight(float x,float z)
- {
- int w = (int)Mathf.Floor(x);
- int h = (int)Mathf.Floor(z);
- if (w < 0 || w >= MapWidth || h < 0 || h >= MapHeight)
- return 0.0f;
- int idx = h*MapWidth+w;
- if (idx < 0 || idx >= MapWidth * MapHeight || idx >= List.Count)
- return 0.0f;
- return List[idx];
- }
- }
Unity3d 保存和使用地形高度的更多相关文章
- Unity3d 实现鼠标左键点击地形使角色移动到指定地点[脚本]
Unity3d 实现鼠标左键点击地形使角色移动到指定地点[脚本] 2013-02-19 15:29:33 我来说两句 作者:nnsword 收藏 我要投稿 其中涉及,移动速度, ...
- Unity3D教程:无缝地形场景切换的解决方法
http://www.unitymanual.com/6718.html 当我们开发一个大型项目的时候-会遇到这样的问题(地形场景的切换)这个只是字面意思-并不是重场景1的100 100 100坐标 ...
- Cesium 获取鼠标当前位置的模型高度,地形高度,OSGB高度,及其经纬度。
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene._imageryLayerCollection);var ray,posit ...
- unity3d WorldComposer1 卫星地图生成地形
http://blog.csdn.net/myarrow/article/details/42709113 1. 简介 1.1 TerrainComposer(TC) 一个Unity扩展工具,可用于创 ...
- Unity3D游戏开发从零单排(三) - 极速创建狂拽酷炫的游戏地形
提要 在Unity工作流程内,地形是一个必不可少的重要元素.不论是游戏或虚拟现实都会使用到各种类型的地形效果,在这个教学中我们须要了解到地形的制作基本概念与,当中对于Unity的地形操作部分须要大量的 ...
- unity3D绘画手册-----地形及术语解释
Unity3D教程:设置地形(Terrain) Posted on 2013年04月18日 by U3d / Unity3D 基础教程 /被围观 1,901 次 新建地形: 在菜单中新建一个地形. U ...
- Cesium原理篇:3最长的一帧之地形(2:高度图)
这一篇,接着上一篇,内容集中在高度图方式构建地球网格的细节方面. 此时,Globe对每一个切片(GlobeSurfaceTile)创建对应的TileTerrain类,用来维 ...
- Unity3d NavMesh获得地面高度
UnityPro内置的NavMesh有几个API很有用 NavMesh.SamplePosition 根据给的点进行采样,可传入最大距离,返回true说明采样到了点,否则采样失败(可以用来获得地形高度 ...
- Directx11学习笔记【二十二】 用高度图实现地形
本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5827714.html 在前面我们曾经实现过简单的地形(Direct ...
随机推荐
- html兼容性
IE property:value\9; //for all IE IE6 _property:value; IE7 *property:value; IE8 +property:value; IE ...
- golang笔记——包
1.包简述 GO本身没有项目的概念,只有包,包括可执行包和不可执行包,而不管什么包,都应该包含在 $GOPATH/src 目录下,GO命令和编译器会在 $GOPATH/src 目录下搜索相应的包.比如 ...
- java练手 韩信点兵
Problem C 韩信点兵 时间限制:3000 ms | 内存限制:65535 KB 描述 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排.五人一排.七人一排地变换队 ...
- page文件
题目:主页面引用 page 文件 ./configs/style.conf ./templates/main.html <body> <{config_load file=" ...
- ie下获取上传文件全路径
ie下获取上传文件全路径,3.5之后的火狐是没法获取上传文件全路径的 /*获取上传文件路径*/ function getFilePath(obj) { var form = $(this).paren ...
- 微信电话本可免费拨打网络电话 通话一分钟约300K流量
微信电话本新版本于昨日晚间发布,这是一款智能通讯增强软件,通话双方都下载此APP并开通免费通话功能就能使用微信电话本拨打免费网络电话,在对方无法接通情况下还能将音频转向语音信箱,微信电话本目前支持An ...
- Mac Pro 安装 Adobe Photoshop CC for mac V2014 破解版
一.下载 Photoshop CC for mac V2014 原版(.dmg 文件): 百度网盘下载1 百度网盘下载2 百度网盘下载3 百度网盘下载4 百度网盘下载5 百度网盘下载6 百度网盘下载7 ...
- 将Centos的yum源更换为阿里云源
阿里云Linux安装软件镜像源 阿里云是最近新出的一个镜像源.得益与阿里云的高速发展,这么大的需求,肯定会推出自己的镜像源.阿里云Linux安装镜像源地址:http://mirrors.aliyun. ...
- ios 防止按钮快速点击造成多次响应的避免方法。
- (void)starButtonClicked:(id)sender { //先将未到时间执行前的任务取消. [[self class] cancelPreviousPerformRequests ...
- C++中的内联成员函数与非内联成员函数
在C++中内联成员函数与非内联成员函数的可以分为两种情况: 1.如果成员函数的声明和定义是在一起的,那么无论有没有写inline这个成员函数都是内联的,如下: using namespace std; ...