Unity核心5——Tilemap

news2024/11/25 9:28:31

Tilemap 一般称之为瓦片地图或者平铺地图,是 Unity2017 中新增的功能,主要用于快速编辑 2D 游戏中的场景,通过复用资源的形式提升地图多样性

​ 工作原理就是用一张张的小图排列组合为一张大地图

​ 它和 SpriteShape 的异同

  • 共同点:他们都是用于制作 2D 游戏的场景或地图的

  • 不同点:

    • SpriteShape 可以让地形有弧度,Tilemap 不行

    • Tilemap 可以快捷制作有伪“Z”轴的地图,SpriteShape 不行

​ 在 Window --> Package Manager 中搜索 2D,选择 2D Tilemap Editor,导入项目

一、瓦片资源

​ Tilemap 的最小单位:“瓦片”,其创建方式有两种:

​ 方法一:

​ 在 Assets --> Create --> Tile 中创建,或者在 Project 窗口中单击右键 --> Create --> Tile

​ 方法二:

​ 在 Tile Palette 瓦片调色板窗口创建,点击 Window --> 2D --> Tile Palette

1.首先新建一个瓦片地图编辑文件,创建时的默认参数不动

2.将图片资源拖入到窗口中选择要保存的路径

​ 参数介绍:

  1. Preview:预览图
  2. Sprite:瓦片关联的精灵纹理
  3. Color:瓦片色调颜色
  4. Collider Type:碰撞器类型
    • None:不生成碰撞器
    • Sprite:基于精灵轮廓生成碰撞器形状
    • Gird:基于瓦片单元格生成碰撞器形状

二、瓦片调色板窗口

(一)创建瓦片调色器相关参数

  1. Name:瓦片调色器的名称
  2. Grid:瓦片的网格布局
    • Rectangle:矩形瓦片
    • Hexagon:六边形瓦片
    • Isometric:等距瓦片,单元格为菱形
    • Isometric Z as Y:等距瓦片并且将单元格 Z 轴转换为局部 Y 坐标
  3. Hexagon Type:六边形瓦片地图类型,决定了六边形的旋转位置
    • Point Top:点朝顶部的六边形
    • Flat Top:面朝顶部的六边形
  4. Cell Size:瓦片绘制到单元格的大小
    • Automatic:基于瓦片资源的精灵大小自动设置
    • Manual:自定义大小

(二)瓦片调色板面板

​ 编辑的时候注意打开 Editor 开关:

  1. image-20220508082653778:选择 (S)
  2. image-20220508082829878:移动 (M)
  3. image-20220508082904393:画笔 (B),使用选取器后会自动切换到画笔工具,单个填充
  4. image-20220508082926696:框填 (U),使用选取器后再切换到框填工具,范围填充
  5. image-20220508082947015:选取器 (I),选取填充样本
  6. image-20220508083017455:橡皮擦 (D),单个擦除
  7. image-20220508083053112:填充 (G),使用选取器后再切换到填充工具,批量填充
  8. Active Tilemap:当前激活的瓦片层

(三)创建地图

  1. 将所有资源图片一起导入瓦片调色板中

  1. 在 Hierarchy 窗口中右键选择 2D Project --> Tilemap 创建,此时 Scene 窗口中将出现网格
  2. 用选取器选中调色板中的图片,直接在 Scene 窗口中单击创建即可
  3. 可以创建多个 Tilemap,将其层级排序

(四)等距瓦片地图的编辑

​ 创建模式为 Isometric Z as Y 的瓦片调色板,将资源拖入其中,会发现高度不同的图片并没有对齐

​ 原因是在调色板中默认会将图片的中心点和菱形的中心点重合,我们这里需要在 Sprite Editor 窗口中调整 Sprite 的中心点即可

​ 调整好后,方块的上表面即可与菱形平面对齐

​ 也可以开启 Tile Palette 窗口中的 Can Change Z Position,为每一张图片手动设置高度。按 “+” 和 “-” 可以快捷修改 Z 的高度

​ 但此时在 Scene 窗口中绘制不同的方块时,其渲染情况会很奇怪

​ 因为 Unity 内部设置的原因,我们需要修改 Edit --> Project Setting --> Graphics --> Camera Settings 中的 Transparency Sort Mode 为 Custom Axis,并将 X、Y、Z 设置为 0、1、-0.26。同时,将该 Tilemap 的 Tilemap Renderer 的模式切换为 individual,此时渲染情况将变得正常。


三、瓦片地图关键脚本和碰撞器

(一)Grid

  1. Cell Size:网格单元格的大小
  2. Cell Gap:网格之间的间隔大小
  3. Cell Layout:网格单元的形状和排列
    • Rectangle:矩形瓦片
    • Hexagon:六边形瓦片
    • Isometric:等距瓦片,单元格为菱形
    • Isometric Z as Y:等距瓦片并且将单元格 Z 轴转换为局部 Y 坐标
  4. Cell Swizzle:Unity 将 XYZ 单元格坐标重新排序为你选择的类型

(二)Tilemap

  1. Animation Frame Rate:播放瓦片动画的速率,相当于倍速
  2. Color:瓦片色调颜色
  3. Tile Anchor:瓦片的锚点偏移
  4. Orientation:瓦片地图上瓦片的方向,相当于 2D 平面使用的是 Unity 中的哪两个轴

(三)Tilemap Renderer

  1. Sort Order:设置所选瓦片地图上的瓦片排序方向

  2. Mode:渲染器的渲染模式

    • Chunk:按位置对瓦片进行分组,并将瓦片精灵一起批处理进行渲染,性能较好

    • Individual:单独渲染每个瓦片,会考虑他们的位置和排序顺序。会让瓦片精灵和场景中其他渲染器或自定义排序轴进行交互

      等距瓦片一般选择此项

  3. Detect Chunk Culling:渲染器如何剔除瓦片地图的边界

    • Auto:自动检测
    • Manual:手动设置拓展边界
  4. Mask Interaction:遮罩交互

    • None:不与场景中任何精灵遮罩交互
    • Visible Inside mask:精灵遮罩覆盖的地方可见,而遮罩外部不可见
    • Visible Outside mask:精灵遮罩外部的地方可见,而遮罩覆盖处不可见
  5. Material:材质,默认选择的是不受光照效果的材质

  6. Chunk Culling Bounds:当选择手动设置剔除拓展边界时,可以在这里填写自己拓展的值

  7. Sorting Layer:所在排序层

  8. Order in Layer:排序层的序号

(四)瓦片地图碰撞器

​ 为挂载 TilemapRenerer 脚本的对象添加 Tilemap Collider 2D 脚本,会自动添加碰撞器

​ 注意:想要生成碰撞器的瓦片 Collider Type 类型要进行设置,不能为 None

四、导入瓦片官方拓展包

​ 拓展包为 Tilemap 添加新的瓦片类型和笔刷类型,帮助我们更加方便的编辑 2D 场景

​ 解压后直接拖入到 Assets 文件夹中即可

​ 下载地址:https://github.com/Unity-Technologies/2d-extras

​ 注意选择对应的 Unity 版本进行下载

​ 下载好后,在 Project 窗口中右键,会发现多出来这些选项

五、新增瓦片类型

(一)规则瓦片 Rule Tile

​ 定义不同方向是否存在连接图片的规则,让我们更加快捷的进行地图编辑

  1. Default Sprite:默认图片

  2. Default GameObject:默认游戏对象,一般不关联

  3. Default Collider:默认碰撞器规则

    • None:不生成碰撞器
    • Sprite:基于精灵轮廓生成碰撞器形状
    • Gird:基于瓦片单元格生成碰撞器形状
  4. Tiling Rules:平铺规则,可以自己添加删除

    在右边的九宫格内左键单击可以选中 ✔️,表示这个九宫格位置有图片;右键单击可以选中 ❌,表示这个九宫格位置没有图片,双击可以切换选中形态

    当整个九宫格都满足自己设置的条件时,九宫格中央区域将显示最右方选择的图片

(二)动画瓦片 Animated Tile

​ 可以指定序列帧,产生可以播放序列帧动画的瓦片

  1. Number of Animated Sprites:动画有多少张图构成
  2. Minimum Speed:最小播放速度
  3. Maximum Speed:最大播放速度
  4. Start Time:开始播放的时间
  5. Start Frame:从哪一帧开始播放
  6. Collider Type:碰撞器规则
    • None:不生成碰撞器
    • Sprite:基于精灵轮廓生成碰撞器形状
    • Gird:基于瓦片单元格生成碰撞器形状

(三)管道瓦片 Pipeline Tile

​ 根据自己相邻瓦片的数量更换显示的图片

  • One —— Four:相邻 1 ~ 4 个图片时使用的图片

(四)随机瓦片 Random Tile

​ 根据你设置的图片,随机从中选一个进行绘制

  1. Number of Sprites:有多少张图构成
  2. Color:叠加的颜色
  3. Collider Type:碰撞器规则
    • None:不生成碰撞器
    • Sprite:基于精灵轮廓生成碰撞器形状
    • Gird:基于瓦片单元格生成碰撞器形状

(五)地形瓦片 Terrain Tile

​ 有点类似规则瓦片,只不过地形瓦片是帮助你定好的规则

  1. Filled:填满
  2. Three Sides:三个面
  3. Two Sides and One Corner:两面一角
  4. Two Adjacent Sides:相邻两侧
  5. Two Opposite Sides:两个相对的侧面
  6. One Side and Two Corners:一侧和两个角
  7. One Side and One Upper Corner:一边和上角
  8. One Side:一面
  9. Four Corners:四个角
  10. Three Corners:三个角
  11. Two Adjacent Corners:两个相邻角
  12. Two Opposite Corners:两个相反的角
  13. One Corner:一个角
  14. Empty:空

(六)权重随机瓦片 Weighted Random Tile

​ 可以不平均随机选择图片的瓦片

  1. Number of Sprites:有多少张图构成
  2. Weight:每种图片的权重
  3. Color:叠加的颜色
  4. Collider Type:碰撞器规则
    • None:不生成碰撞器
    • Sprite:基于精灵轮廓生成碰撞器形状
    • Gird:基于瓦片单元格生成碰撞器形状

(七)规则覆盖瓦片 Rule Override Tile

​ 在规则瓦片的基础上,改变已经设置的规则对应的图片

(八)高级规则覆盖瓦片 Advanced Rule Override Tile

​ 在规则瓦片的基础上,改变已经设置的规则与对应的图片

六、新增笔刷类型

(一)自定义笔刷

1.预设体笔刷——用于快捷刷出想要创建的精灵

可以关联预制体,用于快速创建该预制体

2.预设体随机笔刷——用于快捷随机刷出想要创建的精灵

  • Perlin Scale:柏林算法参数,一般不需要改

3.随机笔刷——可以指定瓦片进行关联,随机刷出对应瓦片

  • Random Tile Set Size:随机瓦片设置大小,每次绘制 X * Y 个瓦片
  • Random Tile Sets:随机瓦片设置
  • Pick Random Tiles:随机选择瓦片,效果不明显
  • Add To Random Tiles:添加到随机瓦片,效果不明显

(二)拓展笔刷

​ 笔刷记录了额外的信息,使用时相当于把这些信息显示出来

  1. Coordinate Brush 坐标笔刷 —— 可以实时看到格子坐标

  2. Game Object Brush 游戏对象笔刷 —— 可以在场景中选择和擦除游戏对象,仅限于选定的游戏对象的子级

  3. Group Brush 组合笔刷 —— 可以设置参数,当点击一个瓦片样式时,会自动向后选取一个范围内的瓦片

    • Gap:从笔刷向后看,遇到 Gap 个瓦片空格时停止选择
    • Limit:从笔刷向后看 Limit 个瓦片,共选择 Limit + 1 个瓦片

4.Line Brush 线性笔刷 —— 决定起点和终点画一条线出来

  • Line Start Active:起点是否激活
  • Fill Gaps:扩充线的宽度
  • Line Start:线的起点坐标

5.Random Brush 随机笔刷 —— 和之前的自定义随机画笔类似,可以随机画出瓦片

类似自定义笔刷中的 Random Brush

6.Tint Brush 着色笔刷 —— 可以给瓦片着色,瓦片的颜色锁要开启(Inspector 窗口切换 Debug 模式,修改 Flags 为 None)

7.Tint Brush(Smooth) 光滑着色笔刷 —— 可以给瓦片进行渐变着色,需要按要求改变材质

七、代码管理 Tilemap

​ Tilemap 组件:用于管理瓦片地图

​ TileBase 组件:瓦片资源对象基类

​ Grid 组件:用于坐标转换

​ 使用它们需要引用命名空间:using UnityEngine.Tilemaps;

// 瓦片地图信息 可以通过它得到瓦片格子
public Tilemap map;

// 格子位置相关控制 可以通过它 进行坐标转换
public Grid grid;

// 瓦片资源基类通过它可以得到瓦片资源
public TileBase tileBase;

// Start is called before the first frame update
void Start()
{
    // 1.清空瓦片地图
    map.ClearAllTiles();

    // 2.获取指定坐标格子
    TileBase tmp = map.GetTile(Vector3Int.zero);

    // 3.设置删除瓦片
    map.SetTile(new Vector3Int(0, 2, 0), tileBase); // 设置
    map.SetTile(new Vector3Int(1, 0, 0), null);     // 删除

    // 4.替换瓦片
    map.SwapTile(tmp, tileBase); // tmp 的所有瓦片将变成 tileBase

    // 5.世界坐标转格子坐标

    //   屏幕坐标转世界坐标
    //   世界坐标转格子坐标
    // 传入的参数是世界坐标
    grid.WorldToCell();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅析GPT2中的autoregressive和BERT的autoencoding源码实现

经常使用BERT来做研究,因此对Encoder的架构较为熟悉,但是从来没有了解过GPT这样的Decoder架构,尤其对自回归的形式不知道源码是如何实现的。 为了方便对比和讨论,接来下所探讨的源码都是基于HuggingFace这个框架的。 Bert注意力…

基于亚马逊云科技Serverless,朝夕光年和Second Dinner携手打造年度手游

经典的漫威IP,酷炫的卡牌对战,丰富的故事情节,这款移动游戏《MARVEL SNAP》一经上线就深得全球玩家喜爱。在The Game Awards 2022的年度颁奖典礼上,它更是以出色的表现,一举斩获最佳移动游戏奖项。 其研发公司Second …

【ElasticSearch】中文分词器

ES默认的analyzer(分词器),对英文单词比较友好,对中文分词效果不好。不过ES支持安装分词插件,增加新的分词器。 1、如何指定analyzer? 默认的分词器不满足需要,可以在定义索引映射的时候&#…

Python自动办公之合并多个PDF文件

本文基于使用pycharm平台,使用glob库和PyPDF2库实现 首先将需要合并的文件放于一个文件中 如下图 addpdf文件夹为需要合并的文件位置 good.py为代码块 代码如下 print(这个小代码仅仅用于合并pdf文件数量小于10的情况) print() from PyPDF2 import PdfMerger,P…

深度解析DuckDB的ScheduleEvents

深度解析DuckDB的ScheduleEvents 1.ScheduleEventData2.ScheduleEventsInternal3.SchedulePipeline 3.1 Event3.2 PipelineEventStack3.3 主逻辑4.可视化总结 书接上回熬夜三晚之深度解析DuckDB MetaPipeline,MetaPipeline在初始化的时候会构建出下面几个&#xff1…

【ARMv8/v9 异常模型入门及渐进2 - 系统控制寄存器 SCTRL_ELx 介绍】

文章目录 SCTRL_ELx 介绍背景ARMv8 SCTLR_ELx 介绍ARMv9 SCTLR_ELx 介绍 SCTRL_ELx 介绍背景 由于在做DFD 测试过程中需要测试 EL1 状态下的 self-hosted trace 功能,但是这个测试是在UEFI中做的,在开发验证阶段UEFI默认是运行在EL3 下的,所…

mac安装VsCode遇到的问题

万事开头难,头一次在安装生产工具的时候,就遇到了这么棘手的问题。百度和Google都试过了,网上的所有方式对我都没效果。最终自己阴差阳错解决了,我看内外网反馈这个问题的还挺多,在这里记录一下,希望可以帮…

Docker专题系列之十三:docker容器内安装vim编辑器

在使用docker时,有时候我们需要编辑配置文件,需要使用vim或者vi命令,但是会发现: root20ab69bedcdb:/etc/mysql# vim my.cnf bash: vim: command not found这是因为vim没有安装,使用如下命令安装: apt-ge…

Tomcat架构设计

Servlet规范 Servlet是JavaEE规范中的一种,主要是为了扩展Java作为Web服务的功能,统一定义了对应的接口,如Servlet接口,HttpRequest接口,HttpResponse接口,Filter接口。然后由具体的服务厂商来实现这些接口…

adroit java反编译

环境准备 靶机链接:百度网盘 请输入提取码 提取码:4e5y 虚拟机网络链接模式:桥接模式 攻击机系统:kali linux 2021.1 信息收集 1.探测目标靶机ip地址 arp-scan -l 2.用nmap探测靶机开放端口和服务情况 nmap -p- -A -T4 19…

二分类结局变量Logistic回归临床模型预测—— 模型评价(一)

本节讲的是二分类结局变量的临床模型预测,与之前讲的Cox回归不同,https://lijingxian19961016.blog.csdn.net/article/details/124088364https://lijingxian19961016.blog.csdn.net/article/details/124088364https://lijingxian19961016.blog.csdn.net/article/details/1240…

基于springboot+Redis的前后端分离项目(二)-【黑马点评】

🎁🎁资源文件分享 链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码:eh11 商户查询缓存,缓存更新策略,缓存穿透 商户查询缓存a.什么是缓存1.为什么要使用缓存2.如何使用缓存 b.添加商…

一文读懂ISM频段

ISM(工业、科学、医疗)频段为国际电信联盟(ITU)《无线电规则》定义的指定无线电频段。这些频段是为电信之外的其他射频用途挪出的频段。因此, ISM频段虽然理论上可用于电信用途,但使用ISM频段的电信设备必须…

南卡OE Pro开放式耳机开售,将音质和舒适度提升至行业巅峰!

随着科技的不断发展和创新,开放式耳机作为一种全新的音频体验方式正逐渐走红。而在这个充满竞争的市场上,南卡品牌的最新款OE Pro开放式耳机如今上市,以其出色的表现和全能的功能成为行业的颠覆者。 南卡品牌在骨传导耳机音频技术领域有着超过…

【系统开发】尚硅谷 - 谷粒商城项目笔记(三):OSS阿里云存储

文章目录 OSS阿里云存储OSS基础配置OSS跨域设置原生sdk方式上传阿里云sdk方式上传将oss配置加入nacos加入网关的路由分发和前端整合测试 OSS阿里云存储 OSS基础配置 上传的账号信息存储在应用服务器 上传前先找应用服务器要一个policy上传策略,生成防伪签名 OSS跨…

帮助中心的设计指南

帮助中心是一个网站或应用程序的重要组成部分,因为它可以让用户轻松找到他们需要的信息。正确设计和实施一个高效的帮助中心可以确保用户满意度提高,并增加品牌忠诚度。本文将介绍如何设计一个优秀的帮助中心。 确定帮助中心的目标 在设计帮助中心之前&…

风控安全产品系统设计的个人感悟

背景 本篇文章会从系统架构设计的角度,分享在对业务安全风控相关基础安全产品进行系统设计时遇到的问题难点及其解决方案。 内容包括三部分:(1)风控业务架构;(2)基础安全产品的职责&#xff1…

重新安装ROG Armoury Crate

文章目录 使用官方卸载工具卸载奥创安装奥创 更新奥创之后 Aura Sync 坏了,无法调整灯光,打开 Aura Creator 提示服务运行异常: 在任务管理器中随便禁用了几个奥创、Asus的服务后,再次打开 Aura Creator,提示出了具…

【码银送书第一期】通用人工智能:初心与未来

目录 前言 正文 内容简介 作者简介 译者简介 目录 前言 自20世纪50年代图灵在其划时代论文《计算机器与智能》中提出“图灵测试”以及之后的达特茅斯研讨会开始,用机器来模仿人类学习及其他方面的智能,即实现“人工智能”(Artificial …

CSS实现盒子模型水平居中、垂直居中、水平垂直居中的多种方法

CSS实现盒子模型水平居中、垂直居中、水平垂直居中的多种方法 CSS实现盒子模型水平居中的方法 水平居中效果图 水平居中 全局样式 .parent { color: #FFFFFF; height: 200px; width: 200px; margin: 0 auto; background-color: #000000;} .child { widt…