TerrainHeightProcesser 地形高度存储工具

TerrainHeightData 地形高度数据

// class TerrainHeightProcesser

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.IO;
  4. using UnityEditor;
  5. using System.Collections.Generic;
  6.  
  7. /*
  8. * 地形高度处理器
  9. */
  10. public class TerrainHeightProcesser : ScriptableWizard
  11. {
  12.  
  13. public int mapWdith;
  14. public int mapHeight;
  15.  
  16. [MenuItem("Tools/Save Terrain Height File")]
  17. public static void OpenDialog()
  18. {
  19. DisplayWizard<TerrainHeightProcesser>("Save Terrain Height", "Save", "Cancel");
  20. }
  21.  
  22. public void SaveTerrainHeightFile()
  23. {
  24.  
  25. //以每米为间隔从高空向下发射射线
  26. Vector3 pos = Vector3.zero;
  27. pos.y = 100;
  28. Ray ray = new Ray(pos, -Vector3.up);
  29. Vector3 targetPos = Vector3.zero;
  30.  
  31. //创建一个对象
  32. TerrainHeightData th = ScriptableObject.CreateInstance<TerrainHeightData>();
  33. th.MapWidth = mapWdith;
  34. th.MapHeight = mapHeight;
  35. th.List = new List<float>();
  36.  
  37. //纵向
  38. for (short i = 0; i < mapHeight; i++)
  39. {
  40. pos.z = i;
  41. //横向
  42. for (short j = 0; j < mapWdith; j++)
  43. {
  44. targetPos = Vector3.zero;//默认zero
  45.  
  46. pos.x = j;
  47. ray.origin = pos;
  48. RaycastHit result;
  49. if (Physics.Raycast(ray, out result))
  50. {
  51. targetPos = result.point;
  52. }
  53. th.List.Add(targetPos.y);
  54. }
  55. }
  56.  
  57. //计算file name
  58. string sceneName = UnityEditor.EditorApplication.currentScene;
  59. int start = sceneName.LastIndexOf('/') + 1;
  60. int count = sceneName.LastIndexOf('.')-start;
  61. sceneName = sceneName.Substring(start, count);
  62. string path = "Assets/ArtAsset/TerrainHeightData/" + sceneName + ".asset";
  63.  
  64. //保存
  65. AssetDatabase.CreateAsset(th, path);
  66. AssetDatabase.Refresh();
  67.  
  68. string str = string.Empty;
  69. str += "mapHeight=" + mapHeight.ToString() + " ";
  70. str += "mapWdith=" + mapWdith.ToString();
  71. EditorUtility.DisplayDialog("SUCCESS", "file:" + path + "\n" + str, "OK");
  72. }
  73.  
  74. void OnWizardCreate()
  75. {
  76. SaveTerrainHeightFile();
  77. }
  78.  
  79. void OnWizardOtherButton()
  80. {
  81. Close();
  82. }
  83.  
  84. }

  

//TerrainHeightData

  1. using UnityEngine;
  2. using System.Collections;
  3. using System.IO;
  4. using System.Collections.Generic;
  5.  
  6. public class TerrainHeightData : ScriptableObject
  7. {
  8. [SerializeField]
  9. public int MapWidth = 0;
  10.  
  11. [SerializeField]
  12. public int MapHeight = 0;
  13.  
  14. [SerializeField]
  15. public List<float> List;
  16.  
  17. public float GetTerrainHeight(float x,float z)
  18. {
  19. int w = (int)Mathf.Floor(x);
  20. int h = (int)Mathf.Floor(z);
  21. if (w < 0 || w >= MapWidth || h < 0 || h >= MapHeight)
  22. return 0.0f;
  23.  
  24. int idx = h*MapWidth+w;
  25. if (idx < 0 || idx >= MapWidth * MapHeight || idx >= List.Count)
  26. return 0.0f;
  27.  
  28. return List[idx];
  29. }
  30.  
  31. }

  

Unity3d 保存和使用地形高度的更多相关文章

  1. Unity3d 实现鼠标左键点击地形使角色移动到指定地点[脚本]

    Unity3d 实现鼠标左键点击地形使角色移动到指定地点[脚本] 2013-02-19 15:29:33     我来说两句      作者:nnsword 收藏    我要投稿 其中涉及,移动速度, ...

  2. Unity3D教程:无缝地形场景切换的解决方法

    http://www.unitymanual.com/6718.html 当我们开发一个大型项目的时候-会遇到这样的问题(地形场景的切换)这个只是字面意思-并不是重场景1的100  100 100坐标 ...

  3. Cesium 获取鼠标当前位置的模型高度,地形高度,OSGB高度,及其经纬度。

    var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene._imageryLayerCollection);var ray,posit ...

  4. unity3d WorldComposer1 卫星地图生成地形

    http://blog.csdn.net/myarrow/article/details/42709113 1. 简介 1.1 TerrainComposer(TC) 一个Unity扩展工具,可用于创 ...

  5. Unity3D游戏开发从零单排(三) - 极速创建狂拽酷炫的游戏地形

    提要 在Unity工作流程内,地形是一个必不可少的重要元素.不论是游戏或虚拟现实都会使用到各种类型的地形效果,在这个教学中我们须要了解到地形的制作基本概念与,当中对于Unity的地形操作部分须要大量的 ...

  6. unity3D绘画手册-----地形及术语解释

    Unity3D教程:设置地形(Terrain) Posted on 2013年04月18日 by U3d / Unity3D 基础教程 /被围观 1,901 次 新建地形: 在菜单中新建一个地形. U ...

  7. Cesium原理篇:3最长的一帧之地形(2:高度图)

           这一篇,接着上一篇,内容集中在高度图方式构建地球网格的细节方面.        此时,Globe对每一个切片(GlobeSurfaceTile)创建对应的TileTerrain类,用来维 ...

  8. Unity3d NavMesh获得地面高度

    UnityPro内置的NavMesh有几个API很有用 NavMesh.SamplePosition 根据给的点进行采样,可传入最大距离,返回true说明采样到了点,否则采样失败(可以用来获得地形高度 ...

  9. Directx11学习笔记【二十二】 用高度图实现地形

    本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5827714.html 在前面我们曾经实现过简单的地形(Direct ...

随机推荐

  1. html兼容性

    IE  property:value\9; //for all IE IE6 _property:value; IE7 *property:value; IE8 +property:value; IE ...

  2. golang笔记——包

    1.包简述 GO本身没有项目的概念,只有包,包括可执行包和不可执行包,而不管什么包,都应该包含在 $GOPATH/src 目录下,GO命令和编译器会在 $GOPATH/src 目录下搜索相应的包.比如 ...

  3. java练手 韩信点兵

    Problem C 韩信点兵 时间限制:3000 ms  |  内存限制:65535 KB   描述 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排.五人一排.七人一排地变换队 ...

  4. page文件

    题目:主页面引用 page 文件 ./configs/style.conf ./templates/main.html <body> <{config_load file=" ...

  5. ie下获取上传文件全路径

    ie下获取上传文件全路径,3.5之后的火狐是没法获取上传文件全路径的 /*获取上传文件路径*/ function getFilePath(obj) { var form = $(this).paren ...

  6. 微信电话本可免费拨打网络电话 通话一分钟约300K流量

    微信电话本新版本于昨日晚间发布,这是一款智能通讯增强软件,通话双方都下载此APP并开通免费通话功能就能使用微信电话本拨打免费网络电话,在对方无法接通情况下还能将音频转向语音信箱,微信电话本目前支持An ...

  7. Mac Pro 安装 Adobe Photoshop CC for mac V2014 破解版

    一.下载 Photoshop CC for mac V2014 原版(.dmg 文件): 百度网盘下载1 百度网盘下载2 百度网盘下载3 百度网盘下载4 百度网盘下载5 百度网盘下载6 百度网盘下载7 ...

  8. 将Centos的yum源更换为阿里云源

    阿里云Linux安装软件镜像源 阿里云是最近新出的一个镜像源.得益与阿里云的高速发展,这么大的需求,肯定会推出自己的镜像源.阿里云Linux安装镜像源地址:http://mirrors.aliyun. ...

  9. ios 防止按钮快速点击造成多次响应的避免方法。

    - (void)starButtonClicked:(id)sender { //先将未到时间执行前的任务取消. [[self class] cancelPreviousPerformRequests ...

  10. C++中的内联成员函数与非内联成员函数

    在C++中内联成员函数与非内联成员函数的可以分为两种情况: 1.如果成员函数的声明和定义是在一起的,那么无论有没有写inline这个成员函数都是内联的,如下: using namespace std; ...