1、先使用tiledmap编辑地图,图层用来刷图块,对象用来定义单个格子的数据

2、为每个图块调属性

3、图块需要单独配置属性的就必须创建对象,并设置值

右键设置属性

4、导出json文件

5、代码如下,详细看相应注释

using SimpleJSON;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class tmx : MonoBehaviour
{void Start(){TextAsset text = Resources.Load<TextAsset>(string.Format("{0}/{1}", Const.CONFIG_TMX_PATH, "map1"));//加载tmx文件JSONNode data = JSONNode.Parse(text.text).AsObject;//将tmx文本转化为json对象//1、对象层操作Dictionary<string, JSONNode> objectsDic = new Dictionary<string, JSONNode>();string layers_objects = data["layers"][1]["objects"].ToString();JSONArray arr_layers_objects = JSONNode.Parse(layers_objects).AsArray;int tilewidth = int.Parse(data["tilewidth"]);//获取格子宽int tileheight = int.Parse(data["tileheight"]);//获取格子高foreach (var obj in arr_layers_objects)//遍历所有对象层上的对象{int key_x = obj.Value["x"] / tilewidth;//格子x轴 除以 格子宽得出这个对象在x轴第几个格子内int key_y = obj.Value["y"] / tileheight;//格子y轴 除以 格子高 得出这个对象在y轴第几个格子内objectsDic[string.Format("{0}-{1}", key_y, key_x)] = obj.Value["properties"];//将对象里的值保存到对应格子内}//图层string layers_data = data["layers"][0]["data"].ToString();//获取图层内的二维数组JSONArray arr_layers_data = JSONNode.Parse(layers_data).AsArray;JSONNode tileproperties = data["tilesets"][0]["tileproperties"];//获取对应图层二维数组内的格子对象//int tilesets = int.Parse(tileproperties["1"]["ID"]);int col = int.Parse(data["width"]);//获取横向有多少个格子int row = int.Parse(data["height"]);//获取纵向有多少个格子float sprite_size = 0.66f;//每个方格64像素+空余2像素Vector3 vec = new Vector3(-int.Parse((col / 2).ToString()) * sprite_size, int.Parse((row / 2).ToString()) * sprite_size, 0);for (int i = 0; i < row; i++)//从左向右{for (int j = 0; j < col; j++)//从上到下{int gid = arr_layers_data[j + i * col] - 1;//获取二维数组里的值if (gid == -1)//如果此格子没有刷,则值为-1continue;JSONNode Dic_Grid = tileproperties[gid.ToString()];//转换对应的格子对象var go = Instantiate(Resources.Load(string.Format("{0}/{1}", Const.PREFAB_PATH, "Grid"))) as GameObject;go.name = string.Format("{0}_{1}_{2}", i, j, int.Parse(Dic_Grid["ID"]));//获取格子对象的IDgo.transform.SetParent(transform);if (objectsDic.ContainsKey(string.Format("{0}-{1}", i, j))){var __objectsDic = objectsDic[string.Format("{0}-{1}", i, j)];if (__objectsDic["ROW"] != null && __objectsDic["COL"] != null){int __col = int.Parse(__objectsDic["COL"]);int __row = int.Parse(__objectsDic["ROW"]);var start = vec + new Vector3(sprite_size * j, -sprite_size * i, 0);var end = vec + new Vector3(sprite_size * (j + __col - 1), -sprite_size * (i + __row - 1), 0);var pos = (start + end) / 2f;go.transform.localPosition = pos;go.GetComponent<SpriteRenderer>().size = new Vector2(go.GetComponent<SpriteRenderer>().size.x * __col + 0.02f * __col - 0.02f, 0.675f * __row + 0.02f * __row - 0.02f);}else if (__objectsDic["ROW"] != null){var start = vec.y - sprite_size * i;var end = vec.y - sprite_size * (i + int.Parse(__objectsDic["ROW"]) - 1);var y = (start + end) / 2f;go.transform.localPosition = new Vector3(sprite_size * j + vec.x, y, 0);}else if (__objectsDic["COL"] != null){var start = vec.x + sprite_size * j;var end = vec.x + sprite_size * (j + int.Parse(__objectsDic["COL"]) - 1);var x = (start + end) / 2f;go.transform.localPosition = new Vector3(x, -sprite_size * i + vec.y, 0);}else{go.transform.localPosition = vec + new Vector3(sprite_size * j, -sprite_size * i, 0);}}//if (Dic_Grid["ROW"] != null && Dic_Grid["COL"] != null)//{//    var start = vec + new Vector3(sprite_size * j, -sprite_size * i, 0);//    var end = vec + new Vector3(sprite_size * (j + int.Parse(Dic_Grid["COL"]) - 1), -sprite_size * (i + int.Parse(Dic_Grid["ROW"]) - 1), 0);//    var pos = (start + end) / 2f;//    go.transform.localPosition = pos;//}//else if (Dic_Grid["ROW"] != null)//{//    var start = vec.y - sprite_size * i;//    var end = vec.y - sprite_size * (i + int.Parse(Dic_Grid["ROW"]) - 1);//    var y = (start + end) / 2f;//    go.transform.localPosition = new Vector3(sprite_size * j + vec.x, y, 0);//}//else if (Dic_Grid["COL"] != null)//{//    var start = vec.x + sprite_size * j;//    var end = vec.x + sprite_size * (j + int.Parse(Dic_Grid["COL"]) - 1);//    var x = (start + end) / 2f;//    go.transform.localPosition = new Vector3(x, -sprite_size * i + vec.y, 0);//}else{go.transform.localPosition = vec + new Vector3(sprite_size * j, -sprite_size * i, 0);}}}//Debug.Log(int.Parse((5 / 2).ToString()));}void Update(){}
}

Unity 使用tiledmap解析地图相关推荐

  1. Unity的Json解析二–写Json文件

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50378805 作者:car ...

  2. unity 如何创建六边形地图

    要在 Unity 中创建六边形地图,可以进行以下步骤: 创建一个空的 Unity 项目,并在场景中创建一个空的 GameObject. 在 GameObject 上添加 MeshFilter 和 Me ...

  3. Unity TileMap 存档 保存地图

    关注公众号,获取更多干货. 下面是正文: 最近在恶补Unity的一些模块,前几天朋友推荐我看一下Unity2017.2以上才支持的TileMap,他说用这个做2D关卡贼方便,所以我就去看了一眼,的确很 ...

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

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

  5. Unity创建2.5D地图 【1】

    打开unity 1.创建Hierarchy→2D Object→TileMap 2.创建完成后,TileMap位于Grid下,选择Grid,切换Cell Layout的值,有以下类型可选. 第一个看上 ...

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

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

  7. Unity景深效果解析

    一.从透镜说起 透镜是一种将光线聚合或分散的设备,透镜一般分为两类,中间厚边缘薄的叫凸透镜,中间薄边缘后的叫凹透镜:也可以根据光线折射的类型分为汇聚透镜,发散透镜: 通常,透镜是有两个面的(面镜只有一 ...

  8. unity创建与解析json

    今天翻看了一下之前的博客,发现写了好几篇关于加载json的文章,今天正好有时间就把之前的几篇文章的内容总结一下,然后在添加一些新内容. 在unity里边可以用的加载json的插件有:JsonUtili ...

  9. unity打包原理解析

    工具 Unity 中的资源来源有三个途径:一个是Unity自动打包资源,一个是Resources,一个是AssetBundle. Unity自动打包资源是指在Unity场景中直接使用到的资源会随着场景 ...

  10. 我的世界服务器地图文件夹解析,地图物品格式 - Minecraft Wiki,最详细的官方我的世界百科...

    此条目需要更新. 条目中某些信息已经不符合当前版本情况. 该文章需要整理以符合样式标准. 请帮助优化文章样式来让它符合样式要求. 此特性为Java版独有. 地图不在物品中存储他们的信息,而是将其数据值 ...

最新文章

  1. 《OpenCV3编程入门》学习笔记7 图像变换(一)基于OpenCV的边缘检测
  2. react-dnd 拖拽
  3. Http://selboo.com.cn
  4. python取数组最后一个元素_Python Json。只获取json数组中的最后一个元素
  5. Python—实训day7下—Pandas统计分析基础
  6. C# 串口接收1次数据会进入2次串口接收事件serialPort1_DataReceived,第2次进入时串口缓冲区为空
  7. 可信计算3.0工程初步pdf_查校 | 英国大学工业工程与运筹学专业40个授课硕士+研究Mphil/Phd 项目汇总...
  8. Silverlight 国外技术文章
  9. Linux内核中的信号量解析
  10. 台式计算机无线接入,台式计算机有线连接路由器WiFi方法图步骤,可以详细设置无线内容(...
  11. 最新B站优秀C4D教程汇总(超干)
  12. python英文文本分析和提取_英文文本挖掘预处理流程总结
  13. JDK、JRE、eclipse安装教程
  14. 购买阿里云域名绑定ip教程
  15. swagger支持中英文
  16. 模型的“参数”与“超参数”
  17. 关于 Swiper 的坑——只有3.3.1的非压缩版正常,非常奇怪
  18. mysql与python交互(简单版表设计)
  19. Revit 二次开发参照属性
  20. 系统工程师基本命令补录

热门文章

  1. 信号与线性系统分析(第四版,吴大正主编)——信号与系统
  2. Mac安装mysql 8.0.21
  3. java学习血泪史目录
  4. python pywinauto 自动控制微信, 关键字回复、收款、定时任务, 代替人工成为微信客服
  5. 计算机office demo,办公软件应用(Office2007)中级_DEMO盘-2013
  6. [笔记]深入解析Windows操作系统《一》概念和工具
  7. java绩效考核方案,基于jsp的职工绩效考核系统-JavaEE实现职工绩效考核系统 - java项目源码...
  8. 教你用报表工具搭建企业考核系统
  9. 100个常用的 JS 代码
  10. Unity 3D 文件导入出错误解决方法以及unity圣典离线版下载地址