unity实现简单的地图编辑器,实现跑酷地图编辑器 2d地图编辑器,导出地图json数据,导入地图json数据

2023-11-18

这里使用的是unity2020.1

对于unity编辑器开发也不是很了解,这方面的教程也不多,也是慢慢摸索的

效果显示

 

首先简单

介绍下Unity编辑器开发

1:Editor下打开新窗口需要继承EditorWindow,然后使用获取窗口即可,注意放在Editor文件夹下

public class DrawGameLevel : EditorWindow
{
    [MenuItem("Maps/Create Map &M")]
    public static void OpenMapCreate()
    {
        DrawGameLevel window = EditorWindow.GetWindow<DrawGameLevel>("地图编辑器");
        window.Show();
        window.minSize = new Vector2(500, 800);
        window.maxSize = new Vector2(600, 1200);

    }
}

2:因为是在Scene视图下进行操作,所以注册SceneView.duringSceneGui事件,在OnEnable中

void OnEnable()
 2     {
 3         SceneView.duringSceneGui += OnSceneGUI;
 4         //初始化一些东西
 5     }
 6 
 7     void OnDestroy()
 8     {
 9         SceneView.duringSceneGui -= OnSceneGUI;
10     }

3:unity 编辑器开发,需要在GUI中写,使用EditorGUILayout或者GUILayout来显示ui,基本的组件都是有的

这是我实现的界面和代码  

 #region GUI显示
    private string brushY = "";// 刷新的y坐标
    private string brushX = "";// 刷新的x坐标
    private string brushDisY = "0";// 刷新的y坐标间距
    private string brushDisX = "0";// 刷新的x坐标间距
    private string zIndex = "-0.2";// 显示的层级
    private string fixCount = "0";// 固定生成个数,设置0,一直生成

    private float _lastBrushY = -10000;// 保持Y合理间距 上次刷的y的坐标
    private float _lastBrushX = -10000;// 保持X合理间距 上一个刷的x的坐标
    private int _curImgIndex = -1;//当前正在使用的图
    private int _curFixCount = 0;// 当前已经生成的个数

    private bool _drag = false;// 鼠标拖拽?
    private int _select = 0;// 当前选择的图片 index
    private string ck = "1";// 关卡
    private Texture[] _items = null;// 地形基础图 要使用的地块
    private GameObject parentMap = null;// 地图节点的父节点
    private GameObject bgParent = null;// 背景图挂点
    private string[] bgNames = { "Forest", "Night", "Winter" };// 背景图名字
    private int selectMapIndex = 0;// 选择的地图背景图index
    private int lastSelectMapIndex = -1;// 上次选择的地图背景图index

    private int funcTypeIndex = 0;//  功能类型的index
    private string[] funcTypeArry = { "无","橡皮擦","选中单个物体"};// 选择单个物体
    private int selectTypeIndex = 0;
    private int lastSelectTypeIndex = 0;// 上次选择的类型
    private string[] typeArry = {"不显示选图", "地形图","障碍物",};
    // Update is called once per frame
    void OnGUI()
    {
        GUI.skin.label.normal.textColor = Color.yellow;
        GUI.skin.label.fontSize = 15;

        GUIStyle popStyle = new GUIStyle("Popup");
        popStyle.fontSize = 15;
        // 选择地图
        EditorGUILayout.Space();
        EditorGUILayout.BeginHorizontal();
        GUILayout.Label("1.选择地图", GUILayout.Width(200));
        this.selectMapIndex = EditorGUILayout.Popup(this.selectMapIndex, bgNames, popStyle, GUILayout.MaxWidth(100));
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();
        LoadBg(); 

        ck = EditorGUILayout.TextField("2.设置关卡", ck);
        // 输入数据
        EditorGUILayout.Space();

        GUILayout.Label("设置坐标,批量坐标保持一致的时候使用,不输入是按照鼠标位置刷新");
        brushY = EditorGUILayout.TextField("3.固定Y的坐标(从左到右刷)", brushY);
        brushX = EditorGUILayout.TextField("4.固定X的坐标(从上到下刷)", brushX);
        brushDisY = EditorGUILayout.TextField("5.固定Y间距(从左到右刷)", brushDisY);
        brushDisX = EditorGUILayout.TextField("6.固定X间距(从上到下刷)", brushDisX);
        fixCount = EditorGUILayout.TextField("7.固定生成的个数", fixCount);
        EditorGUILayout.Space(10);
        zIndex = EditorGUILayout.TextField("8.物体显示层级,小的靠前显示", zIndex);

        EditorGUILayout.Space();
        EditorGUILayout.BeginHorizontal();
        GUILayout.Label("9.选择橡皮擦 或者 选中一个场景物体", GUILayout.Width(250));
        this.funcTypeIndex = EditorGUILayout.Popup(this.funcTypeIndex, funcTypeArry, popStyle, GUILayout.MaxWidth(100));
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();

        EditorGUILayout.BeginHorizontal("box");
        GUIStyle btnStyle = new GUIStyle("Button");
        btnStyle.fontSize = 15;
        btnStyle.padding = new RectOffset(10, 10, 10, 10);
        if (GUILayout.Button("10.清除当前地图数据",btnStyle))
        {
            RemoveParentChild(parentMap);
            _lastBrushY = -10000;// 防止后面刷新跟着这个位置
            _lastBrushX = -10000;
            _curFixCount = 0;
        }
        if (GUILayout.Button("11.导出json数据",btnStyle))
        {
            DataMgr.Instance.OutFile(parentMap,ck);
            EditorUtility.DisplayDialog("导出数据成", "导出关卡数据成功"+ck, "确定");
        }
        if (GUILayout.Button("12.导入json数据",btnStyle))
        {
            DataMgr.Instance.ImportFile(parentMap,ck);
     
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity实现简单的地图编辑器,实现跑酷地图编辑器 2d地图编辑器,导出地图json数据,导入地图json数据 的相关文章

  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void
  • 【C++】__declspec含义

    目录 一 declspec dllexport 如果这篇文章对你有所帮助 渴望获得你的一个点赞 一 declspec dllexport declspec dllexport 是 Microsoft Visual C 编译器提供的一个扩展
  • 华为OD机试 Java 【计算文件大小】

    题目 一个电脑文件夹系统 每个文件夹里都有一些文件和可能还有其他子文件夹 给定所有文件夹的大小和子文件夹列表 你的任务是找出某一个文件夹及其所有子文件夹里的文件总大小 输入格式 首行有两个数字 文件夹的总数M和你要查询的文件夹ID N 之后
  • Hutool改变我们的coding方式(二)

    Hutool改变我们的coding方式 Hutool 简介 Hutool如何改变我们的coding方式 文档 安装 Maven
  • 最新整理Java面试八股文,大厂必备神器

    在看这篇文章之前 我想我们需要先搞明白八股文是什么 明清科举考试的一种文体 也称制义 制艺 时文 八比文 八股文章就四书五经取题 内容必须用古人的语气 绝对不允许自由发挥 而句子的长短 字的繁简 声调高低等也都要相对成文 字数也有限制 八股
  • 计算机Java项目|基于SSM的篮球系列网上商城设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • Python 文件的复制重命名以及xlsx文件中表格分开保存

    1 需要的头文件 import shutil import os import openpyxl 2 复制文件以及重命名 直接使用shutil库复制 重命名 移动即可 函数封装示例 source path 为全局变量被复制文件路径 dest
  • APP开发毕业设计|ssm爱心小屋公益机构智慧管理APP

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • 最新整理Java面试八股文,大厂必备神器

    在此 我采访了数十名大厂的面试官和上百的的面试者 总结出了这一套Java面试八股文 这套八股文已经帮助了上百人拿到自己心仪的offer 我们先来看看这套八股文 Java基础面试八股文 操作系统中 heap 和 stack 的区别 什么是基于
  • 【心电图基线估计和去噪方法的群稀疏正则化】带有群稀疏正则化的心电图基线估计和去噪(Matlab实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 2024年华为OD机试真题-虚拟游戏理财-Python-OD统一考试(C卷)

    题目描述 在一款虚拟游戏中生活 你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局 现有一家Bank 它提供有若干理财产品m 风险及投资回报不同 你有N 元 进行投资 能接受的总风险值为X 你要在可接受范围内选择最优的投资方式获得最大回报
  • 2024年华为OD机试真题-靠谱的车-Python-OD统一考试(C卷)

    题目描述 程序员小明打了一辆出租车去上班 出于职业敏感 他注意到这辆出租车的计费表有点问题 总是偏大 出租车司机解释说他不喜欢数字4 所以改装了计费表 任何数字位置遇到数字4就直接跳过 其余功能都正常 比如 1 23再多一块钱就变为25 2
  • 【路径规划】基于改进遗传算法求解机器人栅格地图路径规划(Matlab实现实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 学Python,一个月从小白到大神?看你怎么学!

    Python是一门超强大而且超受欢迎的编程语言 它被用在各种领域 比如网站开发 数据分析 人工智能和机器学习 学会Python会给你创造很多职业机会 所以绝对是值得一试的 但你有没有过这样的梦想 一个月时间 从Python小白变成Pytho
  • 计算机Java项目|有机蔬菜商城

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 在 Python 中实现 List 抽象

    在 Python 中 创建一个包含多个对象的 list 很常见 例如 对于一组具有相同功能的对象 比如播放声音 希望能够使用类似 my list play 的语法来触发 list 中所有对象的 play 方法 另一个例子是 当希望关闭 li
  • Java开发中不要使用受检异常

    简介 Java是唯一 主流 实现了受检异常概念的编程语言 一开始 受检异常就是争议的焦点 在当时被视为一种创新概念 Java于1996年推出 如今却被视不良实践 本文要讨论Java中非受检异常和受检异常的动机以及它们优缺点 与大多数关注这个
  • 计算机Java项目|人体健康信息管理系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板

随机推荐

  • Ubuntu16.04 安装 Anaconda

    前言 对于我这个新手来说 安装Pandas以及其余的NumPy 和SciPy等工具包可能会有点困难 最简单的方法不是直接安装Pandas 而是安装Python和构成SciPy数据科学技术栈的最流行的工具包 IPython NumPy Mat
  • 【排错】-vSphere with Tanzu - SupervisorControlPlaneVM 卡在 NotReady 状态

    故障 最近机房意外断电 导致所有虚拟机关机 等来电之后 开启了所有虚拟机 业务均恢复正常 奇怪的是 Tanzu Workload Management Supervisor 集群 的状态为NotReady 导致部分业务pod不能正常访问 如
  • 【数据库系统概论】第十章、十一章:数据库恢复技术、并发控制

    文章目录 第十章 数据库恢复技术 事务 故障 恢复技术 恢复策略 第十一章 并发控制 并发带来的问题和解决 死锁和活锁 可串行性 封锁的粒度 第十章 数据库恢复技术 事务 事务的四大特性 ACID A 原子性 要么全做 要么全不做 C 一致
  • 100天精通Python(爬虫篇)——第45天:lxml库与Xpath提取网页数据(基础+代码实战)

    文章目录 一 爬虫提取网页数据的流程图 二 lxml库 1 下载安装 2 解析HTML网页 三 Xpath介绍 1 选取节点 2 谓语 3 选取未知节点 4 选取若干路径 5 Chrome插件 XPath Helper安装使用 6 Xpat
  • Java代码大全(持续更)

    学生管理系统 简易版本 稍后博主会发出进阶版的 希望大家喜欢 package student public class Student private String id private String name private int ag
  • C++复制构造函数和赋值符的区别

    今天做C primer的习题 被复制构造函数和赋值符的区别弄晕了 简单地说 有一道题目如下描述 class t1 class t2 t1 我先看见有一个等号 以为就是赋值符来做的 其实并不是这样的 做一个实验好了 class CTest p
  • 基于Jfinal实现的权限管理系统 JfinalUIB

    JfinalUIB 是 Jfinal charisma beetl postgresql 同时支持MySQL ehcache ztree druid bcprov 实现的用户权限管理系统 项目用到了众多的开源组件 还有一些是分享的学习代码片
  • nginx 交叉编译

    环境 Linux CentOS6 9 2 6 32 696 el6 x86 64 软件版本 nginx http nginx org download nginx 1 18 0 tar gz openssl https www openss
  • python3读取excel文件只提取某些行某些列的值

    今天有一位同学给了我一个excel文件 要求读取某些行 某些列 然后我试着做了一个demo 这里分享出来 希望能帮到大家 首先安装xlrd pip3 install xlrd 然后上代码 import numpy as np import
  • Java面向对象 - 文件类

    文章目录 第4关 图片查看器 挑战任务 答案 第4关 图片查看器 挑战任务 本关任务 小明想要开发一个图片查看器 但是他想只显示文件夹下所有图片类型的文件 你来帮小明实现这个功能吧 答案 代码如下 示例 package step4 impo
  • Shell if 条件判断

    Shell 语言中的if条件 一 if的基本语法 if command then 符合该条件执行的语句 elif command then 符合该条件执行的语句 else 符合该条件执行的语句 fi 二 文件 文件夹 目录 判断 b FIL
  • systemd和initd添加开机自启服务

    一 systemd Systemd 就是为了解决这些问题而诞生的 它的设计目标是 为系统的启动和管理提供一套完整的解决方案 使用了 Systemd 就不需要再用init了 Systemd 取代了initd 成为系统的第一个进程 PID 等于
  • LitJson的使用教程

    下载LitJson dll 放进你的工程 序列化 public static void SaveData string FileName Assets Data Archice json StreamReader reader File O
  • 开发日志:微信公众号网页开发的调试工具

    在这里记录一下开发时有用到的一些工具 VConcole调试工具 手机端的H5调试工具 http debugx5 qq com
  • 14-数据结构-有序链表排序

    问题 给你一个链表 然后去进行排序 并输出 思路 排序时 类似于冒泡排序 这里则定义两个链表指针 一个指向第一位 一个指向第一位的后一位 由于需要排序的是数据 因此定义一个中间变量 int temp 用于后面的数据域比较排序 两层循环 外循
  • ChatGPT指令大全(中文版)

    文章目录 ChatGPT指令大全 中文版 生活相关 充当讲故事的人 充当旅游指南 扮演脱口秀喜剧演员 充当抄袭检查员 担任厨师 充当 电影 书籍 任何东西 中的 角色 学习相关 充当 ChatGPT 提示生成器 充当维基百科页面 充当英语发
  • 微信小程序开发——入门-01(附带练手小程序)

    目录标题 一 项目展示 二 项目gitee开源地址 三 基础 一 项目结构 二 全局配置 app json 三 页面配置 四 微信搜索索引到小程序 sitemap json 五 数据绑定 六 场景值 用户进入小程序的方式 七 注册小程序 a
  • JMeter入门教程(10) --函数助手

    文章目录 1 CSVRead 2 Random 3 RandomString 4 RandomDate 5 time 在JMeter的选项菜单中有一个 函数助手对话框 点击打开 函数助手 对话框 使用函数助手 我们可以从 选择一个功能 下拉
  • SQL:将表中一列拆成两列

    计算tableA表中type列有两种类型 计算每个id的每种类型的count和 id type count 1 1 10 2 2 5 1 1 8 4 2 9 方法 select id sum case when type 1 then co
  • unity实现简单的地图编辑器,实现跑酷地图编辑器 2d地图编辑器,导出地图json数据,导入地图json数据

    这里使用的是unity2020 1 对于unity编辑器开发也不是很了解 这方面的教程也不多 也是慢慢摸索的 效果显示 首先简单 介绍下Unity编辑器开发 1 Editor下打开新窗口需要继承EditorWindow 然后使用获取窗口即可