2019独角兽企业重金招聘Python工程师标准>>>

Unity自定义mesh绘制  基于上篇的mesh修改,实现tile map

第一步,修改mesh 顶点和三角片信息,生成方格

顶点信息就是一系列正方形的组合,三角片,在这里实现的方法是一个矩形由2个三角形组成,注意,三角形的顺序依赖于顶点的顺序,三角形的三个点按照观察方向顺时针,三角形数量=顶点数量*6,6=2*3,2是三角形个数,3是一个三角形 由3个顶点组成,输入的三角数组的顺序是,对应顶点在输入的顶点数据中的index,贴代码:

using UnityEngine;
using System.Collections;public class ss5 : MonoBehaviour
{void Start(){dooo();}void dooo(){{MeshFilter filter = this.GetComponent<MeshFilter>();MeshRenderer render = this.GetComponent<MeshRenderer>();var mesh = filter.mesh;var ts = this.GetComponentsInChildren<Transform>();Vector3[] vers = new Vector3[ts.Length];for (int i = 0; i < ts.Length; i++){vers[i] = ts[i].position;}const int MAX_X = 30;const int MAX_Y = 30;Vector3[] vertics = new Vector3[MAX_Y * MAX_X];for (int x = 0; x < MAX_X; x++){for (int y = 0; y < MAX_Y; y++){vertics[x + MAX_X * y] = new Vector3(x, 0f, y);}}foreach (var p in vertics){Ray ray = new Ray(p, new Vector3(-100f, -100f, -100f));Debug.DrawLine(ray.GetPoint(-0.1f), ray.GetPoint(0.1f), Color.red);}int[] triss = new int[(MAX_Y - 1) * (MAX_X - 1) * 6];for (int x = 0; x < MAX_X - 1; x++){for (int y = 0; y < MAX_Y - 1; y++){var p = vertics[x + MAX_X * y];int baseIdx = 0;if (y >= 1){baseIdx = (y * (MAX_X - 1) * 6) + x * 6;}else{baseIdx = x * 6;}Debug.LogError(x + "   " + y + "    " + triss.Length + "  baseIdx=" + baseIdx);triss[baseIdx + 0] = x + y * MAX_X;triss[baseIdx + 1] = x + (y + 1) * MAX_X;triss[baseIdx + 2] = (x + 1) + y * MAX_X;triss[baseIdx + 3] = x + (y + 1) * MAX_X;triss[baseIdx + 4] = (x + 1) + (y + 1) * MAX_X;triss[baseIdx + 5] = (x + 1) + y * MAX_X; ;/*   triss[x + y * MAX_X + 0] = 0;triss[x + y * MAX_X + 1] = 2;triss[x + y * MAX_X + 2] = 1;triss[x + y * MAX_X + 3] = 2;triss[x + y * MAX_X + 4] = 3;triss[x + y * MAX_X + 5] = 1;*//* triss[(x * 2 + y * 9 * 2) + 0] = 5;triss[(x * 2 + y * 9 * 2) + 1] = 5;triss[(x * 2 + y * 9 * 2) + 2] = 5;triss[(x * 2 + y * 9 * 2) + 3] = 5;triss[(x * 2 + y * 9 * 2) + 4] = 5;triss[(x * 2 + y * 9 * 2) + 5] = 5;*/}}mesh.vertices = vertics;mesh.triangles = triss;// this.GetTris(vers);mesh.RecalculateNormals();mesh.RecalculateBounds();this.GetComponent<MeshCollider>().sharedMesh = mesh;filter.mesh = mesh;return;}}void Update(){}void OnDrawGizmos(){return;{MeshFilter filter = this.GetComponent<MeshFilter>();MeshRenderer render = this.GetComponent<MeshRenderer>();var mesh = filter.mesh;var ts = this.GetComponentsInChildren<Transform>();Vector3[] vers = new Vector3[ts.Length];for (int i = 0; i < ts.Length; i++){vers[i] = ts[i].position;}const int MAX_X = 3;const int MAX_Y = 3;Vector3[] vertics = new Vector3[MAX_Y * MAX_X];for (int x = 0; x < MAX_X; x++){for (int y = 0; y < MAX_Y; y++){vertics[x + MAX_X * y] = new Vector3(x, 0f, y);}}foreach (var p in vertics){Ray ray = new Ray(p, new Vector3(-100f, -100f, -100f));Debug.DrawLine(ray.GetPoint(-0.1f), ray.GetPoint(0.1f), Color.red);}int[] triss = new int[(MAX_Y - 1) * (MAX_X - 1) * 6];for (int x = 0; x < MAX_X - 1; x++){for (int y = 0; y < MAX_Y - 1; y++){var p = vertics[x + MAX_X * y];int baseIdx = 0;if (y >= 1){baseIdx = (y * (MAX_X - 1) * 6) + x * 6;}else{baseIdx = x * 6;}Debug.LogError(x + "   " + y + "    " + triss.Length + "  baseIdx=" + baseIdx);triss[baseIdx + 0] = x + y * MAX_X;triss[baseIdx + 1] = x + (y + 1) * MAX_X;triss[baseIdx + 2] = (x + 1) + y * MAX_X;triss[baseIdx + 3] = x + (y + 1) * MAX_X;triss[baseIdx + 4] = (x + 1) + (y + 1) * MAX_X;triss[baseIdx + 5] = (x + 1) + y * MAX_X; ;/*   triss[x + y * MAX_X + 0] = 0;triss[x + y * MAX_X + 1] = 2;triss[x + y * MAX_X + 2] = 1;triss[x + y * MAX_X + 3] = 2;triss[x + y * MAX_X + 4] = 3;triss[x + y * MAX_X + 5] = 1;*//* triss[(x * 2 + y * 9 * 2) + 0] = 5;triss[(x * 2 + y * 9 * 2) + 1] = 5;triss[(x * 2 + y * 9 * 2) + 2] = 5;triss[(x * 2 + y * 9 * 2) + 3] = 5;triss[(x * 2 + y * 9 * 2) + 4] = 5;triss[(x * 2 + y * 9 * 2) + 5] = 5;*/}}mesh.vertices = vertics;mesh.triangles = triss;// this.GetTris(vers);mesh.RecalculateNormals();mesh.RecalculateBounds();this.GetComponent<MeshCollider>().sharedMesh = mesh;filter.mesh = mesh;return;} }}

第二步:修改UV信息,U是x轴,V是y轴,矩形4个顶点 对应UV4个坐标点,在这里是逆时针,UV也是逆时针。因此只需要一张大贴图 附上对应的UV信息 就可以实现tile map了

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/1546557

Unity实现瓦片地图tile map相关推荐

  1. tiled素材_瓦片地图 Tiled Map

    瓦片地图(Tiled Map) 瓦片地图(Tile Map) 不但生成简单,并且可以灵活的用于Cocos2d-x引擎.不论你的游戏是角色扮演游戏, 平台动作游戏或仿打砖块游戏,这些游戏地图可以使用开源 ...

  2. Tiled结合Unity实现瓦片地图

    前段时间应公司需求做瓦片地图,cocos与瓦片地图的结合案例很多,但unity的却少之又少,做瓦片地图少不了Tiled Map Editor(下载地址),这个教程很多,也自带例子,关于怎么拼地图,这里 ...

  3. Tiled结合Unity实现瓦片地图——Tiled2Unity篇

    本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. http://blog.csdn.net/lzhq1982/article/details/75356478 前段时间应公司 ...

  4. Tiled结合Unity实现瓦片地图——Unity实战篇

    本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. http://blog.csdn.net/lzhq1982/article/details/75425915 上文说道,Ti ...

  5. 【Cocos Creator实战教程(3)】——TiledMap(瓦片地图)组件

    1. 前言 瓦片地图是由一张一张的正方形小图片拼接成的地图,例如炸弹人,QQ堂都是非常典型的瓦片游戏.瓦片地图(Tile Map) 不但生成简单,并且可以灵活的用于Cocos2d-x引擎.不论你的游戏 ...

  6. Unity(9)-TileMap瓦片地图

    文章目录 前言 相关介绍 其他介绍 上一篇笔记 下一篇笔记 一.图片预处理 二.创建调色板(TilePalette) 三.创建瓦片(Tile) [1]. 方式一 [2]. 方式二 四.修改瓦片(Til ...

  7. Android访问瓦片地图 费流量,瓦片地图注意事项

    瓦片地图(Tiled Map)系列文章: 承接上一篇文章,再来聊聊一些coding方面的tips: TileMapAtlas.FastTMX和TMXTiledMap的选择 我们看到cocos2d-x提 ...

  8. Leaflet中加载离线OSM瓦片地图(使用OfflineMapMaker切割下载离线png地图文件)

    场景 Leaflet快速入门与加载OSM显示地图: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122290880 上面加载显示 ...

  9. SDL游戏开发之三-瓦片地图

    一.瓦片地图 1)瓦片地图简介 瓦片地图(Tiled Map),又称为瓷砖地图,是在游戏开发中经常使用到的技术,它是由少量的尺寸相同的.小的瓦片图片拼接而成的很大的地图.相对于使用一张张图片来绘制地图 ...

最新文章

  1. 舒尔补在SLAM中的应用
  2. 清理恶意插件提高上网速度
  3. BZOJ4943 [NOI2017] 蚯蚓
  4. mysql 2006测试_狂神说MySQL06:事务和索引
  5. surging 微服务引擎 1.0 正式发布
  6. CF650E-Clockwork Bomb【并查集】
  7. 关于端到端通信的讨论(P2P)
  8. 网上路径的图片有时候遍历不出来_最短路径问题(1)——Dijkstra算法
  9. 一名南京985AI硕士,CSDN博客专家
  10. logstash nginx error access 日志处理
  11. word 批量转 pdf
  12. django 重置密码
  13. linux c语言 select函数用法
  14. InfiniBand RDMA
  15. python爬取小说写入txt_python 爬取网络小说 清洗 并下载至txt文件
  16. 手机数据恢复专家---蓝梦软件BestRecoveryForPhone
  17. 微信小程序自定义分享标题和图片
  18. shell小练(二)(图形千变万化)
  19. linux生成ssl证书
  20. MFC中获取、改变Edict文本框和static静态文本框的值的方法

热门文章

  1. ffmpeg avformat_open_input 各种直播伴侣失败的一个可能原因
  2. 设置兼容模式易语言源码
  3. 2022年RHCE认证考题解析最新版—RH294环境
  4. pango design suite使用外部编辑器
  5. MOOG伺服阀G631-3008B
  6. 想突破现状,就得付出更大的努力!
  7. GDB使用手册(三)、如何启动及退出GDB调试(被调试程序的GDB启动及退出)
  8. Highmaps重庆地图数据JSON格式
  9. TiDB 在新乐视云联“月光宝盒”项目中的应用与实践
  10. VIM color 调整