Unity 使用tiledmap解析地图
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解析地图相关推荐
- Unity的Json解析二–写Json文件
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50378805 作者:car ...
- unity 如何创建六边形地图
要在 Unity 中创建六边形地图,可以进行以下步骤: 创建一个空的 Unity 项目,并在场景中创建一个空的 GameObject. 在 GameObject 上添加 MeshFilter 和 Me ...
- Unity TileMap 存档 保存地图
关注公众号,获取更多干货. 下面是正文: 最近在恶补Unity的一些模块,前几天朋友推荐我看一下Unity2017.2以上才支持的TileMap,他说用这个做2D关卡贼方便,所以我就去看了一眼,的确很 ...
- 【Cocos Creator实战教程(3)】——TiledMap(瓦片地图)组件
1. 前言 瓦片地图是由一张一张的正方形小图片拼接成的地图,例如炸弹人,QQ堂都是非常典型的瓦片游戏.瓦片地图(Tile Map) 不但生成简单,并且可以灵活的用于Cocos2d-x引擎.不论你的游戏 ...
- Unity创建2.5D地图 【1】
打开unity 1.创建Hierarchy→2D Object→TileMap 2.创建完成后,TileMap位于Grid下,选择Grid,切换Cell Layout的值,有以下类型可选. 第一个看上 ...
- Unity(9)-TileMap瓦片地图
文章目录 前言 相关介绍 其他介绍 上一篇笔记 下一篇笔记 一.图片预处理 二.创建调色板(TilePalette) 三.创建瓦片(Tile) [1]. 方式一 [2]. 方式二 四.修改瓦片(Til ...
- Unity景深效果解析
一.从透镜说起 透镜是一种将光线聚合或分散的设备,透镜一般分为两类,中间厚边缘薄的叫凸透镜,中间薄边缘后的叫凹透镜:也可以根据光线折射的类型分为汇聚透镜,发散透镜: 通常,透镜是有两个面的(面镜只有一 ...
- unity创建与解析json
今天翻看了一下之前的博客,发现写了好几篇关于加载json的文章,今天正好有时间就把之前的几篇文章的内容总结一下,然后在添加一些新内容. 在unity里边可以用的加载json的插件有:JsonUtili ...
- unity打包原理解析
工具 Unity 中的资源来源有三个途径:一个是Unity自动打包资源,一个是Resources,一个是AssetBundle. Unity自动打包资源是指在Unity场景中直接使用到的资源会随着场景 ...
- 我的世界服务器地图文件夹解析,地图物品格式 - Minecraft Wiki,最详细的官方我的世界百科...
此条目需要更新. 条目中某些信息已经不符合当前版本情况. 该文章需要整理以符合样式标准. 请帮助优化文章样式来让它符合样式要求. 此特性为Java版独有. 地图不在物品中存储他们的信息,而是将其数据值 ...
最新文章
- 《OpenCV3编程入门》学习笔记7 图像变换(一)基于OpenCV的边缘检测
- react-dnd 拖拽
- Http://selboo.com.cn
- python取数组最后一个元素_Python Json。只获取json数组中的最后一个元素
- Python—实训day7下—Pandas统计分析基础
- C# 串口接收1次数据会进入2次串口接收事件serialPort1_DataReceived,第2次进入时串口缓冲区为空
- 可信计算3.0工程初步pdf_查校 | 英国大学工业工程与运筹学专业40个授课硕士+研究Mphil/Phd 项目汇总...
- Silverlight 国外技术文章
- Linux内核中的信号量解析
- 台式计算机无线接入,台式计算机有线连接路由器WiFi方法图步骤,可以详细设置无线内容(...
- 最新B站优秀C4D教程汇总(超干)
- python英文文本分析和提取_英文文本挖掘预处理流程总结
- JDK、JRE、eclipse安装教程
- 购买阿里云域名绑定ip教程
- swagger支持中英文
- 模型的“参数”与“超参数”
- 关于 Swiper 的坑——只有3.3.1的非压缩版正常,非常奇怪
- mysql与python交互(简单版表设计)
- Revit 二次开发参照属性
- 系统工程师基本命令补录
热门文章
- 信号与线性系统分析(第四版,吴大正主编)——信号与系统
- Mac安装mysql 8.0.21
- java学习血泪史目录
- python pywinauto 自动控制微信, 关键字回复、收款、定时任务, 代替人工成为微信客服
- 计算机office demo,办公软件应用(Office2007)中级_DEMO盘-2013
- [笔记]深入解析Windows操作系统《一》概念和工具
- java绩效考核方案,基于jsp的职工绩效考核系统-JavaEE实现职工绩效考核系统 - java项目源码...
- 教你用报表工具搭建企业考核系统
- 100个常用的 JS 代码
- Unity 3D 文件导入出错误解决方法以及unity圣典离线版下载地址