【零基础入门unity游戏开发——2D篇】2D 游戏场景地形编辑器——TileMap的使用介绍

news2025/4/11 14:13:48

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇

  • 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的同学入门。
  • 【unity通用篇】:主要讲解unity的基础通用的知识,包括unity界面、unity脚本、unity资源管理、unity动画、unity摄像机等,适合unity初学者入门。
  • 【unity3D篇】:主要讲解unity3D的知识,unity3D角色、unity3D物理系统、unity3D光照等,适合只想做2D游戏的开发者学习。
  • 【unity2D篇】unity2D篇:主要讲解unity2D的知识,包括unity2D角色、unity2D物理系统、unity2D光照等,适合只想做3D游戏的开发者学习。

这样方便大家按需选择性的去学习,比如有编程基础的大概率可以直接从unity通用篇开始入门,没有编程基础的建议从C#篇开始学习。只想做2D游戏的话,可以直接从unity2D篇开始学习,3D篇大概率就不需要看了,节约学习时间成本。

文章目录

  • 前言
    • 1、什么是Tilemap
    • 2、Tilemap和SpriteShape的异同
    • 3、3D中使用TileMap
  • 一、Tilemap的使用
    • 1、准备工作
      • 1.1 从PackageManager中引入Tilemap包
      • 1.2 导入素材图片
      • 1.3 切割图片
    • 2、创建瓦片画板
      • 2.1 创建文件夹存放画板文件
      • 2.2 打开平铺调色板
      • 2.3 创建瓦片调色板
      • 2.4 创建瓦片调色器相关参数
        • (1) Name:瓦片调色器的名称
        • (2) Grid:瓦片的网格布局
        • (3) Cell Size:瓦片绘制到单元格的大小
    • 3、创建瓦片
      • 3.1 创建文件夹存放瓦片文件
      • 3.2 生成瓦片文件
      • 3.3 单独保存某张瓦片
      • 3.4 生成的瓦片文件参数介绍
        • (1) Preview:预览图
        • (2) Sprite:瓦片关联的精灵纹理
        • (3) Color:瓦片色调颜色
        • (4) Collider Type:碰撞器类型
        • (5) unity6新增的属性
    • 4、TilePalette瓦片调色板窗口基本操作技巧
      • 4.1 单击瓦片——选择瓦片
      • 4.2 在多个瓦片上移动——选择多个瓦片
      • 4.3 Alt+鼠标左键拖动、按住鼠标右键、`按住滚轮键拖动`——平移
      • 4.4 旋转滚轮键——放大/缩小
      • 4.5 编辑瓦片
    • 5、创建网格
      • 5.1 创建
      • 5.2 Grid参数介绍
        • (1) Cell Size:网格单元格的大小
        • (2) Cell Gap:网格之间的间隔大小
        • (3) Cell Layout:网格单元的形状和排列
        • (4) Cell Swizzle:Unity 将 XYZ 单元格坐标重新排序为你选择的类型
      • 5.3 Tilemap参数介绍
        • (1) Animation Frame Rate 动画帧速率
        • (2) Color 颜色
        • (3) Tile Anchor 平铺锚
        • (4) Orientation 方向
      • 5.4 Tilemap Renderer参数介绍
        • (1) Sort Order 排序次序
        • (2) Mode 模式
        • (3) Detect Chunk Culling Bounds 检块剔除边界
    • 6、在网格上刷瓦片
      • 6.1 画出瓦片
      • 6.2 解决瓦片没有占满格子的问题
      • 6.3 解决瓦片之间有缝隙的问题
        • 方法一 像素风素材
        • 方法二 非像素风素材
      • 6.5 旋转和翻转瓦片快捷键
    • 7、擦除瓦片
    • 8、区域瓦片绘制
    • 9、瓦片吸取
    • 10、填充瓦片
    • 11、瓦片分层(渲染顺序)
    • 12、添加碰撞体
      • 12.1 添加Tilemap Collider 2D碰撞体
      • 12.2 合并碰撞体
      • 12.3 自定义编辑图片的物理碰撞区域
      • 12.4 去除部分瓦片碰撞效果
    • 13、瓦片透视排序
  • 三、 Isometric Z as Y 的等距瓦片调色板
    • 1、什么是等距瓦片?
    • 2、 创建模式为 Isometric Z as Y 的瓦片调色板
    • 3、导入等距瓦片素材及配置
    • 4、创建等距瓦片地图网格
    • 5、绘制等距瓦片
      • 5.1 直接绘制
      • 5.2 自定义排序模式
      • 5.3 修改瓦片渲染器模式
      • 5.4 效果
    • 6、绘制更改瓦片z轴位置
  • 三、Tilemap Extras官方拓展包
    • 1、安装Tilemap Extras扩展包
    • 2、规则瓦片 Rule Tile(`重要`)
      • 2.1 Default Sprite:默认图片
      • 2.2 Default GameObject:默认游戏对象
      • 2.3 Default Collider 默认碰撞器规则
      • 2.4 Tiling Rules:平铺规则,可以自己添加删除
        • (1) 单一瓦片
        • (2) 随机瓦片
        • (3) 动画效果瓦片
    • 2、动画瓦片 Animated Tile
    • 3、规则覆盖瓦片 Rule Override Tile
    • 4、高级规则覆盖瓦片 Advanced Rule Override Tile
  • 四、笔刷类型
    • 1、GameObject Brush 游戏对象笔刷
    • 2、Group Brush 组合笔刷
    • 3、Random Brush 随机笔刷
    • 4、Line Brush 线性笔刷
  • 四、代码管理 Tilemap
  • 源码
    • https://gitcode.net/unity1/unity2d-tilemap ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/77745630a26fad034790a3c5d59e5594.png)
  • 专栏推荐
  • 完结

前言

1、什么是Tilemap

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

Tilemap工作原理就是用一张张的小图排列组合为一张大地图。
在这里插入图片描述

总结起来,Unity的Tilemap是一个强大的工具,可以帮助开发者创建和管理2D地图。它提供了一系列易于使用的编辑器功能和组件,让你能够更快速地建立自己的游戏世界。无论是初学者还是有经验的开发者,都可以通过Tilemap轻松地构建出具有丰富内容的游戏地图。

2、Tilemap和SpriteShape的异同

前面我们介绍过【SpriteShape】,也可以创建2D 地形或路径。

  • 共同点
    • 他们都是用于制作2D游戏的场景或地图的。
  • 不同点
    • SpriteShape可以让地形有弧度,TileMap不行。
    • TileMap可以快捷制作有伪“Z”轴的地图,SpriteShape不行。

3、3D中使用TileMap

TileMap主要是用在2d游戏中,但是在3D游戏中其实也可以应用,参考:【unity实战】实现一个放置3d物品建造装修系统
在这里插入图片描述

一、Tilemap的使用

1、准备工作

1.1 从PackageManager中引入Tilemap包

如果你创建的不是2Dunity项目,可能需要自己手动去安装Tilemap包
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fi-blog.%E3%80%81csdnimg.cn%2Fdirect%2F40f8188a34154ce2b795f514d098d1f4.png&pos_id=img-gQFlyJgI40f8188a34154ceb995f2614d098d1f4.png6
在这里插入图片描述

1.2 导入素材图片

我们要制作关卡,得先有关卡的图片素材,以地形素材为例:
在这里插入图片描述
把素材图片导入到Unity工程中,如下,放在Sprites目录中

素材来源:Sunny Land

1.3 切割图片

参考:【零基础入门unity游戏开发——2D篇】SpriteEditor图片编辑器

  • 先检查一下你是否安装了2D Sprite,如果没有,则先安装它。

  • 现在,我们需要把整图的素材图片切割成一个个小格子图片,用于后面制作Tilemap的瓦片。

  • 注意设置一下图片的类型为Sprite (2D and UI),将图片的Sprite Mode设置为Multiple(多个),然后点击Apply(应用)按钮保存。
    在这里插入图片描述

  • 接着,点击Sprite Editor按钮,打开编辑工具。

  • 在弹出的Sprite Editor窗口中,点击切片按钮,然后选择类型为Grid By Cell Size,设置切割尺寸,比如我这里设置了16x16(因为最小格瓦片就是16x16),最后点击切片按钮。

  • ps:你也可以选择然后选择类型为Grid By Cell Count,设置列数和行数,比如可以这里设置了25 23,这里的列数行数需要根据你自己整图的排版而定
    在这里插入图片描述

  • 我们可以看到,整图生成了一张张小格子纹理图:
    在这里插入图片描述

2、创建瓦片画板

2.1 创建文件夹存放画板文件

先创建一个TipleMap文件夹,用于下面存放画板文件。
在这里插入图片描述

2.2 打开平铺调色板

接着点击菜单:窗口>2D ->Tile Palette(平铺调色板)
在这里插入图片描述

2.3 创建瓦片调色板

此时会打开平铺调色板窗口,点击创建新调色板按钮,输入画板名字,比如New Palette,点击创建按钮,就保存在刚才创建的TipleMap文件夹下。

注意:后面会单独介绍每种瓦片的具体使用,这里先用矩形网格举例。
在这里插入图片描述
瓦片调色板我们可以创建多个,然后在这里进行切换
在这里插入图片描述

2.4 创建瓦片调色器相关参数

在这里插入图片描述

(1) Name:瓦片调色器的名称
(2) Grid:瓦片的网格布局

在这里插入图片描述

  • Rectangle:矩形瓦片

  • Hexagon:六边形瓦片。选择这个下面会多出一个参数。Hexagon Type:六边形瓦片地图类型,决定了六边形的旋转位置。
    在这里插入图片描述

    • Point Top:点朝顶部的六边形
      在这里插入图片描述

    • Flat Top:面朝顶部的六边形
      在这里插入图片描述

  • Isometric:等距瓦片,单元格为菱形
    在这里插入图片描述

  • Isometric Z as Y:等距瓦片并且将单元格 Z 轴转换为局部 Y 坐标
    在这里插入图片描述

(3) Cell Size:瓦片绘制到单元格的大小

这里unity的翻译有点问题
在这里插入图片描述

  • Automatic:基于瓦片资源的精灵大小自动设置
  • Manual:自定义大小

3、创建瓦片

3.1 创建文件夹存放瓦片文件

先创建一个Tiles文件夹,用于存放下面的瓦片文件。
在这里插入图片描述

3.2 生成瓦片文件

将整图拖入Tile Palette窗口中,选择瓦片保存目录为Tiles,即可将图片添加到画板中,并且生成瓦片文件。
在这里插入图片描述

3.3 单独保存某张瓦片

我们也可以只拖某张小图到画板中,单独保存某张瓦片,像这样子:
在这里插入图片描述

3.4 生成的瓦片文件参数介绍

在这里插入图片描述

(1) Preview:预览图
(2) Sprite:瓦片关联的精灵纹理
(3) Color:瓦片色调颜色
(4) Collider Type:碰撞器类型

在这里插入图片描述

  • None:不生成碰撞器
  • Sprite:基于精灵轮廓生成碰撞器形状
  • Gird:基于瓦片单元格生成碰撞器形状
(5) unity6新增的属性
  • GameObject to Instantiate 要实例化的GameObject:置于瓦片地图上时要实例化的GameObject。
  • Flags 标志:现在我也不清楚是干什么用的,官方文档也没写,后面有用到了再来补充
    在这里插入图片描述

4、TilePalette瓦片调色板窗口基本操作技巧

4.1 单击瓦片——选择瓦片

在这里插入图片描述

4.2 在多个瓦片上移动——选择多个瓦片

在这里插入图片描述

4.3 Alt+鼠标左键拖动、按住鼠标右键、按住滚轮键拖动——平移

在这里插入图片描述

4.4 旋转滚轮键——放大/缩小

在这里插入图片描述

4.5 编辑瓦片

注意:点亮Edit编辑按钮才能编辑
在这里插入图片描述
复制删除
在这里插入图片描述
移动
在这里插入图片描述

在这里插入图片描述

  • 选择工具(S)
  • 移动工具(M)
  • 画笔工具(B):使用选取器吸了一个图后,会自动切换到画笔工具,单个填充。点击格子会放置吸收的图。
  • 框填工具(U):使用选取器吸了一个图后,再切换到框填工具,画一个框框进行范围填充
  • 选取器工具(I):选取填充样本,相当于吸管吸一个图
  • 橡皮擦工具(D)或者使用画笔工具时按住Shift,按住ctrl批量框这清除:单个擦除
  • 填充工具(G):使用选取器后再切换到填充工具,批量填充

5、创建网格

5.1 创建

在Hierarchy视图空白处右键鼠标,点击菜单2D对象 -> 瓦片地图

ps:可以看到这里的参数是和前面瓦片画板的Grid(网格)参数类型是对应的,因为前面我们创建的是矩形画板,这里也选择矩形。
在这里插入图片描述

此时就会在场景中创建一个Grid / Tilemap节点,此时在Scene场景中就可以看到一个个网格了。
在这里插入图片描述

5.2 Grid参数介绍

在这里插入图片描述

(1) Cell Size:网格单元格的大小

改成2x2效果
在这里插入图片描述

在这里插入图片描述

(2) Cell Gap:网格之间的间隔大小

间隙改成1x1
在这里插入图片描述

在这里插入图片描述

(3) Cell Layout:网格单元的形状和排列

如果前面创建时选错了类型,可以在这修改
在这里插入图片描述

  • Rectangle:矩形瓦片
  • Hexagon:六边形瓦片
  • Isometric:等距瓦片,单元格为菱形
  • Isometric Z as Y:等距瓦片并且将单元格 Z 轴转换为局部 Y 坐标
(4) Cell Swizzle:Unity 将 XYZ 单元格坐标重新排序为你选择的类型

在这里插入图片描述

5.3 Tilemap参数介绍

在这里插入图片描述

(1) Animation Frame Rate 动画帧速率

播放瓦片动画的速率,相当于倍速

(2) Color 颜色

瓦片色调颜色

(3) Tile Anchor 平铺锚

瓦片的锚点偏移

(4) Orientation 方向

瓦片地图上瓦片的方向,相当于 2D 平面使用的是 Unity 中的哪两个轴
在这里插入图片描述

5.4 Tilemap Renderer参数介绍

在这里插入图片描述

(1) Sort Order 排序次序

设置所选瓦片地图上的瓦片排序方向,其实就是选择原点在哪。

(2) Mode 模式

选择渲染器的渲染模式。
在这里插入图片描述

  • Chunk:按位置对瓦片进行分组,并将瓦片精灵一起批处理进行渲染,性能较好。
  • Individual:单独渲染每个瓦片,会考虑它们的位置和排序顺序。会让瓦片精灵和场景中其他渲染器或自定义排序轴进行交互。
  • SRP Batch:选择此模式可以使瓦片渲染器组件与可脚本渲染管线批处理程序兼容,一旦满足兼容性要求。注意:此模式仅在通用渲染管线版本 15 及以上版本中受支持。此渲染模式按瓦片的位置和它们精灵使用的纹理对瓦片进行分组,然后批量渲染。只有当具有相同纹理的组按照渲染器排序顺序选择的方位顺序排列时,才会动态地将它们批量在一起。
(3) Detect Chunk Culling Bounds 检块剔除边界

渲染器如何剔除瓦片地图的边界,就是超出瓦片的范围不渲染的方式。
在这里插入图片描述

  • Auto 自动:渲染器会自动检查瓦片使用的精灵,以确定要使用的扩展剔除边界。
  • Manual 手动:用于扩展瓦片地图块裁剪边界的值是手动设置的,而不是使用编辑器的自动检测。
    • Chunk Culling Bounds 区块剔除边界
      仅当将检测块裁剪边界设置为手动时,此属性才可见。

其他参数都和SpriteRenderer组件一样,具体可以参考:【零基础入门unity游戏开发——2D篇】SpriteRenderer精灵渲染器组件

6、在网格上刷瓦片

6.1 画出瓦片

打开刚刚的Tile Palette画板窗口,点击画笔(顶部第三个按钮,快捷键B),然后选中你要绘制的瓦片,在场景的格子中按住鼠标拖动即可在网格中连续画出瓦片了,如下:
在这里插入图片描述
不过这里我们发现了一个问题,瓦片图片并没有铺满一个格子,这是为什么呢?
在这里插入图片描述

6.2 解决瓦片没有占满格子的问题

瓦片图片没有铺满格子的问题,是因为在Unity中,一个单元格绘制多少像素是由图片本身设置决定的,我们选择瓦片整图,可以看到Pixels Per Unit是100,它表示一个单元格显示100个像素。
在这里插入图片描述
而我们一个瓦片图片的尺寸是16 x 16,
在这里插入图片描述
所以,想要让瓦片铺满一个格子,我们把Pixels Per Unit设置为16即可。
在这里插入图片描述
可以看到,现在瓦片刚好铺满一个格子了。
在这里插入图片描述

6.3 解决瓦片之间有缝隙的问题

方法一 像素风素材

虽然瓦片铺满了格子,但是它们之间是有缝隙的,而且图片模糊,我们在Game视图中观察可能会更清楚一点,如下:
在这里插入图片描述

解决办法是把瓦片整图的Filter Mode设置为点(无过滤器),
在这里插入图片描述
可以看到现在没有缝隙了,图片也清晰了
在这里插入图片描述

方法二 非像素风素材

使用Tilemaps时的一个常见问题是图块之间显示的间隙
在这里插入图片描述
如果你不是像素风的素材,我们还可以创建了一个Sprite Atlas来将Spritesheet拖入其中
在这里插入图片描述
把你的瓦片素材拖入
在这里插入图片描述
效果
在这里插入图片描述

6.5 旋转和翻转瓦片快捷键

旋转瓦片:[ ]
在这里插入图片描述
翻转瓦片:shift + [ ]
在这里插入图片描述

7、擦除瓦片

画瓦片的时候,可能不小心画错了,需要擦除。

我们只需在画板工具上点击橡皮擦按钮(快捷键D),然后在网格中点击即可擦除对应的瓦片,如下:
在这里插入图片描述

8、区域瓦片绘制

我们可以在画板找那个选中一个区域的瓦片,就可以直接在网格中一次画出来了,如下:
在这里插入图片描述

9、瓦片吸取

我们可以在画板中选择瓦片然后在网格中画,我们也可以直接在网格中通过吸取工具(快捷键I)选择对应的瓦片,如下:
在这里插入图片描述

10、填充瓦片

我们可以给一个闭包的区间填充瓦片(快捷键G),选中瓦片,然后在一个闭包的区域点击一下即可填充,如下:
在这里插入图片描述

11、瓦片分层(渲染顺序)

瓦片地图中有多层时,可以再这里选择层级进行绘制
在这里插入图片描述
我们可以创建多个Tilemap,比如我创建了一个Tilemap2用来绘制柱子,
在这里插入图片描述
我们可以看到柱子的层与地面的层的渲染顺序不对
在这里插入图片描述
我们希望地面的层在前面,只需要选择地面的Tilemap把Order in Layer调大即可,比如调成1。(柱子层的Order in Layer是0)。
在这里插入图片描述
现在渲染顺序就对了,
在这里插入图片描述

12、添加碰撞体

12.1 添加Tilemap Collider 2D碰撞体

注意:想要生成碰撞器的瓦片 Collider Type(及前面每个瓦片的碰撞器类型) 类型要进行设置,不能为 None
在这里插入图片描述

我们的主角需要能够站在地面上,所以地面层的Tilemap需要添加碰撞体,我们给地面层的Tilemap节点添加Tilemap Collider 2D组件,如下:
在这里插入图片描述
我们可以看到地面层的瓦片都带上了碰撞体。
在这里插入图片描述

12.2 合并碰撞体

我们可以看到,碰撞体是一格一格的,为了提升性能,建议把碰撞体进行合并,只需要在地面层的Tilemap节点再挂一个Composite Collider 2D组件(它会自动再挂一个Rigidbody 2D组件)。
在这里插入图片描述
将Rigidbody 2D组件的Body Type设置为Static(静态),否则地面会受到重力往下掉。

将Tilemap Collider 2D组件的Used By Composite(使用复合)勾选上,这样碰撞体格子会进行合并。
在这里插入图片描述
合并后的碰撞体如下:
在这里插入图片描述

12.3 自定义编辑图片的物理碰撞区域

默认的瓦片碰撞可能并不是你想要的,这时候就需要去编辑图片的物理形状了
在这里插入图片描述
调整完选刷新才会生效
在这里插入图片描述

效果
在这里插入图片描述

12.4 去除部分瓦片碰撞效果

有些瓦片我们可能不需要碰撞效果,比如花草等,这时我们可以打开对应的tile修改碰撞类型为none即可
在这里插入图片描述

13、瓦片透视排序

参考:【unity小技巧】unity排序问题的探究

我想要站在它后面的选项,以给人一种深度的错觉。

为此,我们将使用Y轴而不是Z轴排序。这样,屏幕上的资产越高,它就会渲染到最后面

根据您的渲染管线,打开它的渲染首选项,将透明度排序模式设置为自定义轴并切换Z和Y值。
在这里插入图片描述
如果是URP项目,URP项目的配置和前面其实类似,只不过配置文件信息被放到Renderer 2D Data文件中了而已
在这里插入图片描述

在最右边的Tilemap Renderer:将Mode设置为Individual
在这里插入图片描述
把对应图片的轴心放在底部
在这里插入图片描述
为了使其更加准确,我们可以更改角色的轴心位置也在底部
在这里插入图片描述
并修改角色的精灵排序点为轴心
在这里插入图片描述
效果,可以看到,角色在栅栏上角色在后,角色在栅栏前角色在前
在这里插入图片描述

三、 Isometric Z as Y 的等距瓦片调色板

素材来源:https://github.com/Unity-Technologies/2d-techdemos

1、什么是等距瓦片?

等距瓦片地图为六边形瓦片,但是它将瓦片分为了两部分,一部分用于表示地面,一部分用于表示高度。
在这里插入图片描述
像是上图这种形式的瓦片,白色部分用于表示地面,而棕色部分则是代表高度,并且这些瓦片的高度可以进行堆叠,实现类似2.5d的效果。
在这里插入图片描述
这是Unity给出的示例,实际上是用下面这种等距瓦片绘制的。
在这里插入图片描述

2、 创建模式为 Isometric Z as Y 的瓦片调色板

在这里插入图片描述

3、导入等距瓦片素材及配置

将资源拖入其中,拖拽资源进去,会发现资源和瓦片格子不适配。
在这里插入图片描述
原因是在调色板中默认会将图片的中心点和菱形的中心点重合,我们这里需要在 Sprite Editor 窗口中调整 Sprite 的中心点(轴心)的位置在菱形的中心即可
在这里插入图片描述

调整好后,方块的上表面即可与菱形平面对齐
在这里插入图片描述

4、创建等距瓦片地图网格

在Hierarchy视图空白处右键鼠标,点击菜单2D 对象 -> 瓦片地图 -> 等距z作为Y
在这里插入图片描述

5、绘制等距瓦片

5.1 直接绘制

直接把等距的瓦片进行绘制上去,会发现有点奇怪。
在这里插入图片描述

5.2 自定义排序模式

因为 Unity 内部设置的原因,我们需要修改URP项目的配置文件,修改透明度排序模式为自定义渲染,调整透明度排序轴为(0, 1, -0.26)(这是一个固定的数值)。
在这里插入图片描述
如果是非URP项目,则在项目设置里修改
在这里插入图片描述

5.3 修改瓦片渲染器模式

改了之后还是不起作用,因为我们还把瓦片地图的瓦片渲染器中修改模式为individual。渲染顺序就会作用生效了。
在这里插入图片描述

5.4 效果

可以看到渲染表现正常了
在这里插入图片描述

6、绘制更改瓦片z轴位置

假如不改变瓦片原始精灵图片的轴心点的话。

可以把下方的框拉起。取消勾选锁定z轴位置,为每一张图片手动设置高度。
在这里插入图片描述
吸住瓦片丢到场景中去的时候,按+号或者-号调整其中的位置。蓝色的框代表当前瓦片z的位置。
在这里插入图片描述
这样我们就可以完全不改变瓦片原始精灵图片的轴心点,而是在绘制时动态的去手动设置高度,或者在瓦片调色板为每一张图片手动设置高度。
在这里插入图片描述
这里加入了一个模拟z轴的概念。可以在同一个砖块,放不同z轴的瓦片。相当于在同一砖块中,是存在z轴的。在同一个砖块的不同z轴是可以同时渲染的。橡皮擦也会受z轴影响。比如擦z=0的平面的时候擦不到z=1的平面的瓦片。

三、Tilemap Extras官方拓展包

1、安装Tilemap Extras扩展包

如果没有安装的,先去安装Tilemap Extras扩展包,并导入相关示例,方便我们后面学习使用。
在这里插入图片描述
拓展包为 Tilemap 添加新的瓦片类型,帮助我们更加方便的编辑 2D 场景
在这里插入图片描述
记得使用都是拖入我们配置的瓦片进入调色板,就可以和前面一样绘制了
在这里插入图片描述

2、规则瓦片 Rule Tile(重要

在这里插入图片描述
实战参考:

  • 【实现100个unity游戏之20】制作一个2d开放世界游戏,TileMap+柏林噪声生成随机地图
  • 【unity实战】手戳一个类似星露谷物语的建筑系统
  • 【用unity实现100个游戏之13】复刻类泰瑞利亚生存建造游戏——包括建造系统和库存系统

2.1 Default Sprite:默认图片

不满足任何四面八方规则时显示的图片。

2.2 Default GameObject:默认游戏对象

默认瓦片可以关联游戏对象,但是一般不会关联。

实战参考:【unity实战】2d血液飞溅喷射到墙上和TileMap上,留下血迹的效果
在这里插入图片描述

2.3 Default Collider 默认碰撞器规则

在这里插入图片描述

  • None:不生成碰撞器
  • Sprite:基于精灵轮廓生成碰撞器形状
  • Gird:基于瓦片单元格生成碰撞器形状

2.4 Tiling Rules:平铺规则,可以自己添加删除

在这里插入图片描述

(1) 单一瓦片

瓦片规则的设置特别简单,就是设置那个九宫格。

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

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

九宫格中间可以设置旋转,这样我们就不用自己设置旋转之后的规则了。

例如下面的规则,当该瓦片上边和左边没有瓦片,且下边和右边有瓦片时,显示右侧精灵图。如果旋转该瓦片之后也符合规则,则旋转精灵图并显示。
在这里插入图片描述

再比如下面的规则,如果四边都没有瓦片,就显示该精灵图。并且没有设置旋转。
在这里插入图片描述
实例
在这里插入图片描述
效果演示,绘制会按配置的九宫格自动选择对应的瓦片填充区域
在这里插入图片描述

(2) 随机瓦片

适合做一些地图加工,比如随机添加花草树木
在这里插入图片描述
绘制效果
在这里插入图片描述

(3) 动画效果瓦片

这个和下面的Animated Tile,实现的效果其实是一样的,比如下面做的形成2d水流瀑布的效果
在这里插入图片描述
在这里插入图片描述

2、动画瓦片 Animated Tile

可以指定序列帧,产生可以播放序列帧动画的瓦片,比如下面做的形成2d水流瀑布的效果。其实前面RuleTile的动画效果瓦片实现一样的效果。
在这里插入图片描述

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

效果演示
在这里插入图片描述
运行,我们流动的瀑布效果就实现啦!
在这里插入图片描述

3、规则覆盖瓦片 Rule Override Tile

在规则瓦片的基础上,改变已经设置的规则对应的图片
在这里插入图片描述

4、高级规则覆盖瓦片 Advanced Rule Override Tile

在规则瓦片的基础上,改变已经设置的规则与对应的图片,可以通过选择已有Rule Tile,启动禁用进行批量替换,是上面的更高级用法
在这里插入图片描述

四、笔刷类型

在这里插入图片描述

1、GameObject Brush 游戏对象笔刷

可以在场景中选择和擦除游戏对象,仅限于选定的游戏对象的子级。
在这里插入图片描述

  • 勾选改变z轴的选项后按+或-也可以改变z轴。

遇到比较大的瓦片,如何绘制呢?比如房子,树等等
在这里插入图片描述
当然,把房子分成几部分,分开绘制也是可以的,但是我建议是先把它弄成一个预制体
在这里插入图片描述
并将瓷砖Pallete的笔刷更改为GameObject笔刷
在这里插入图片描述
效果
在这里插入图片描述

2、Group Brush 组合笔刷

可以设置参数,当点击一个瓦片样式时,会自动取出一个范围内的瓦片。
在这里插入图片描述

  • 吸取的范围根据Gap和Limit确定。
    • Gap决定x、y、z遇到几个空格之后就不继续扩充吸取的范围。
    • Limit决定最大的吸取范围,从0开始。

比如下图,Limit xyz填3会x和y最多吸4个格子,Gap空格数满足x小于1y小于2就会被连接起来纳入吸收的范围。
在这里插入图片描述
在这里插入图片描述

3、Random Brush 随机笔刷

可以指定瓦片进行关联,随机刷出对应瓦片。
在这里插入图片描述

  • Tile Set Size瓦片大小,是设置刷瓦片时一次刷几个格子。

设置随机图片数量和格子数量。选择关联的图片。假如XY填22的话下面每个TileSet就有4个图要关联,一次性画四个。
在这里插入图片描述

4、Line Brush 线性笔刷

决定起点和终点画一条线出来。
选择线性笔刷后点击画笔可以在瓦片地图中点击确定起点和终点,会用选择的瓦片连成线。
在这里插入图片描述

在这里插入图片描述

  • Line Start Active 是否以上一次绘制的起点作为新的起点。
  • Fill Gaps 自动填充,会把线画的更粗。
    在这里插入图片描述
  • 勾选改变z轴的选项后按+或-也可以改变z轴。

四、代码管理 Tilemap

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

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

  • Grid 组件:用于坐标转换

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

using UnityEngine;
using UnityEngine.Tilemaps;

public class TileMap : MonoBehaviour
{
    // 瓦片地图信息 可以通过它得到瓦片格子
    public Tilemap map;
    // 格子位置相关控制 可以通过它 进行坐标转换
    public Grid grid;
    // 瓦片资源基类通过它可以得到瓦片资源
    public TileBase tileBase;
    
    void Start()
    {
        // 1.清空瓦片地图
        // map.ClearAllTiles();
        
        // 2.获取指定坐标格子
        TileBase tmp = map.GetTile(new Vector3Int(-2, 0, 0));

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

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

        // 5.世界坐标转格子坐标
        // 传入的参数是世界坐标
        Debug.Log(grid.WorldToCell(new Vector3(0, 1, 0)));
    }
}

运行效果
在这里插入图片描述

源码

https://gitcode.net/unity1/unity2d-tilemap
在这里插入图片描述

专栏推荐

地址
【零基础入门unity游戏开发——C#篇】
【零基础入门unity游戏开发——unity通用篇】
【零基础入门unity游戏开发——unity3D篇】
【零基础入门unity游戏开发——unity2D篇】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架/工具集开发】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述

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

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

相关文章

vector的介绍与代码演示

由于以后我们写OJ题时会经常使用到vector,所以我们必不可缺的是熟悉它的各个接口。来为我们未来作铺垫。 首先,我们了解一下: https://cplusplus.com/reference/vector/ vector的概念: 1. vector是表示可变大小数组的序列容器…

ubuntu 22.04 解决LXC 报错CGroupV1 host system

解决CGroupV1 host system 报错 echo "cgroupv1 environment" sed -i s/^GRUB_CMDLINE_LINUX.*/GRUB_CMDLINE_LINUX_DEFAULT"quiet splash systemd.unified_cgroup_hierarchy0" / /etc/default/grub update-grub reboot 下载oracle 7 Linux 容器测试 l…

JavaEE初阶复习(JVM篇)

JVM Java虚拟机 jdk java开发工具包 jre java运行时环境 jvm java虚拟机(解释执行 java 字节码) java作为一个半解释,半编译的语言,可以做到跨平台. java 通过javac把.java文件>.class文件(字节码文件) 字节码文件, 包含的就是java字节码, jvm把字节码进行翻译转化为…

MINIQMT学习课程Day9

获取qmt账号的持仓情况后,我们进入下一步,如何获得当前账号的委托状况 还是之前的步骤,打开qmt,选择独立交易, 之后使用pycharm,编写py文件 导入包: from xtquant import xtdata from xtqua…

动态规划似包非包系列一>组合总和IIV

目录 题目分析:状态表示:状态转移方程:初始化填表顺序返回值:代码呈现: 题目分析: 状态表示: 状态转移方程: 初始化填表顺序返回值: 代码呈现: class Soluti…

Java 二叉树非递归遍历核心实现

非递归遍历的核心是用栈模拟递归的调用过程,通过手动维护栈来替代系统栈,实现前序、中序和后序遍历。以下是三种遍历的代码实现与关键逻辑分析: 一、二叉树遍历 1.1、前序遍历(根 → 左 → 右) 核心逻辑:…

【力扣hot100题】(052)课程表

什么人一学期要上2000节课啊jpg 看了非常久都没思路,主要是数据结构还没复习到图论,根本没思路怎么储存一个图…… 唯一记得的就是两种存储方法,一种是二维数组法,记录每一条边的有无,一种是只记录有的边&#xff0c…

SpringBoot配置文件多环境开发

目录 一、设置临时属性的几种方法 1.启动jar包时,设置临时属性 ​2.idea配置临时属性 3.启动类中创建数组指定临时属性 二、多环境开发 1.包含模式 2.分组模式 三、配置文件的优先级 1.bootstrap 文件优先: 2.特定配置文件优先 3.文件夹位置优…

RSA和ECC在密钥长度相同的情况下哪个更安全?

​现在常见的SSL证书,如:iTrustSSL都支持RSA和ECC的加密算法,正常情况下RAS和ECC算法该如何选择呢?实际上在密钥长度相同的情况下,ECC(椭圆曲线密码学)通常比RSA(Rivest-Shamir-Adle…

Dive into Deep Learning - 2.4. Calculus (微积分)

Dive into Deep Learning - 2.4. Calculus {微积分} 1. Derivatives and Differentiation (导数和微分)1.1. Visualization Utilities 2. Chain Rule (链式法则)3. DiscussionReferences 2.4. Calculus https://d2l.ai/chapter_preliminaries/calculus.html For a long time, …

9.进程信号

信号量 信号量是什么? ​ 本质是一个计数器,通常用来表示公共资源中,资源数量多少的问题。 ​ 公共资源:可以被多个进程同时访问的资源。 访问没有保护的公共资源会导致数据不一致问题 什么是数据不一致问题 ​ 由于公共资源…

python爬虫:小程序逆向(需要的工具前期准备)

前置知识点 1. wxapkg文件 如何查看小程序包文件 打开wechat的设置: .wxapkg概述 .wxapkg是小程序的包文件格式,且其具有独特的结构和加密方式。它不仅包含了小程序的源代码,还包括了图像和其他资源文件,这些内容在普通的文件…

PGSQL 对象创建函数生成工具

文章目录 代码结果 代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>PGSQL 函数生成器</tit…

查询当前用户的购物车和清空购物车

业务需求&#xff1a; 在小程序用户端购物车页面能查到当前用户的所有菜品或者套餐 代码实现 controller层 GetMapping("/list")public Result<List<ShoppingCart>> list(){List<ShoppingCart> list shoppingCartService.shopShoppingCart();r…

八、重学C++—动态多态(运行期)

上一章节&#xff1a; 七、重学C—静态多态&#xff08;编译期&#xff09;-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146999362?spm1001.2014.3001.5502 本章节代码&#xff1a; cpp/dynamicPolymorphic.cpp CuiQingCheng/cppstudy - 码云 - 开源中…

饮食助力进行性核上性麻痹患者,提升生活质量

进行性核上性麻痹是一种少见的神经系统变性疾病&#xff0c;患者会出现姿势不稳、眼球运动障碍等症状。合理的饮食对于维持患者身体机能、延缓病情发展有重要意义。 高蛋白质食物是饮食结构的重要部分。像瘦肉、去皮禽肉、鱼类、豆类及其制品&#xff0c;还有低脂奶制品等&…

bun 版本管理工具 bum 安装与使用

在使用 node 的过程中&#xff0c;我们可能会因为版本更新或者不同项目的要求而频繁切换 node 版本&#xff0c;或者是希望使用更简单的方式安装不同版本的 node&#xff0c;这个时候我们一般会用到 nvm 或者类似的工具。 在我尝试使用 bun 的时候&#xff0c;安装前第一个想到…

木马学习记录

一句话木马是什么 一句话木马就是仅需要一行代码的木马&#xff0c;很简短且简单&#xff0c;木马的函数将会执行我们发送的命令 如何发送命令&#xff06;发送的命令如何执行? 有三种方式&#xff1a;GET&#xff0c;POST&#xff0c;COOKIE&#xff0c;一句话木马中用$_G…

决策树实战:用Python实现智能分类与预测

目录 一、环境准备 二、数据加载与探索 三、数据预处理 四、决策树模型构建 五、模型可视化&#xff08;生成决策树结构图&#xff09; 六、模型预测与评估 七、超参数调优&#xff08;网格搜索&#xff09; 八、关键知识点解析 九、完整项目开发流程 十、常见问题解…

Crond任务调度

今天我们来看看任务调度,假如我们正在睡觉,突然有个半夜两点的任务要你备份一下数据库,你怎么办&#xff1f;难道从被窝中爬起来吗&#xff1f;显然不合理,此时就需要我们定时任务调度程序了. 原理图&#xff1a; crontab 进行定时任务的调度 概述. 任务调度:是指系统在某个…