SRPG游戏开发(五)第三章 绘制地图 - 二 绘制一张简单地图
第三章 绘制地图
一 导入素材
二 绘制一张简单地图
这一节我们来看如何绘制一张地图。
1 新建Grid与Tilemap
在Hierarchy面板中,点击Create/2D Object/Tilemap,这样就多了一个名叫“Grid”的GameObject,而子对象有一个Tilemap,这就是我们地图的基础。Unity中Tilemap组件是依赖于Grid的。而Grid才是一个地图,而Tilemap其实可以看作是层(Map Layer)。当你选中Grid或Tilemap时,在Scene面板中可以看到Cell的分布情况。
1.1 Grid组件
图 3 - 7 Grid组件
- Cell Size:格子的大小;
- Cell Gap:格子的间距;
- Cell Swizzle:格子平面的方向,如果你要做3D游戏,也可选XZY。
其中注意Cell Size是指Unity的Unit而不是像素。你应该注意到这与Pixels Per Unit有关。每个Cell的像素为:
Horizontal Pixels(宽度像素数) = Pixels Per Unit * Cell Size.x
Vertical Pixels(高度像素数) = Pixels Per Unit * Cell Size.y
举个例子,你有两个地形素材。素材1拆分后,每个地形为25*50(像素);素材2拆分后,每个地形为30*60(像素)。那么推荐的做法是:
把素材1的Pixels Per Unit设置成25;
把素材2的Pixels Per Unit设置成30;
Cell Size的X设置成1,Y设置成2。
如果你的素材是成套的,而且非常规范标准,那么推荐将所有贴图Pixels Per Unit设置成1,Cell Size设置成地形的宽和高。
注意:你的其它地图对象素材也要修改Pixels Per Unit以配合地形。
1.2 Tilemap组件与建立层级关系
图 3 - 8 Tilemap组件与Tilemap Renderer组件
- Animation Frame Rate:全局动画播放速度,如果你的Tile有动画;
- Color:颜色;
- Tile Anchor:每个Cell的参考点,默认是中心;
- Sort Order:Tile的渲染顺序,如果Tile的大小超出Cell的Size,可以改变它更改遮挡顺序;
- Sorting Layer与Order in Layer:这与Sprite Renderer是一样的。
我们先来创建几个层级,为我们以后做准备。首先选择Sorting Layer/Add Sorting Layer。添加Background、TilemapBackground、Terrain、MapObjectBackground、MapObject、MapObjectForeground、TilemapForeground、UI和UIForeground。
图 3 - 9 Sorting Layers
根据你的项目决定,并不用完全一致,我们也可能不会全用到。
- MapObjectBackground与MapObjectForeground是为了显示某些特效的。比如2D中地面上火圈,如果直接渲染,有可能会全部在人物前面或后面,这就不是我们要的了。
- TilemapForeground是用来绘制前景。比如建筑物的上半部分,建筑物背面可以走动,你可能需要用建筑物遮挡人物。再比如大树除了根部的上半身。
你可能会问,为什么我没有用Order in layer。在Map Object中就算在同层级也可能会造成遮挡,我们要用它来计算同层级之间遮挡关系,因为Map Object往往会超出一个Cell的范围。
然后再来建立我们可能会用到的物体与Tilemap,并依次重命名,Background,TilemapBackground,Terrain,MapObject,TilemapForeground,然后设置对应名称的Sorting Layer。然后将改好名字的Grid放入新建的Prefab文件夹内。
图 3 - 10新建层级
- Background:Sprite Renderer,单张图片背景,比如地图很小,占不满整个屏幕,虽然几率很小;
- TilemapBackground:Tilemap,用Tile绘制的背景,任意Tile;
- Terrain:Tilemap,用于计算的Tile层,使用我们自己的Tile;
- MapObject:空GameObject,地图对象的父对象;
- TilemapForeground:Tilemap,用Tile绘制的前景,任意Tile。
2 创建Tile Palette和第一个Tile
Tile Palette是我们的“调色盘”,就像颜色调色盘一样,颜色调色盘中有许多颜色供我们选择,而Tile Palette是有许多Tile供我们选择,都是选取一种进行绘画创作。要打开Tile Palette面板,找到菜单Window/TilePalette打开Tile Palette面板。
图 3 - 11 Tile Palette面板
先来介绍下上面的东西(下划线为快捷键):
- 选择(Select):选择Cell,在Inspector面板中显示Cell信息;
- 移动(Move):用Select选择一个Tile,再Move可移动;
- 笔刷(Brush):绘制地图的主要工具;
- 矩形(U Box):用Brush选择Tile,再选择Box填充矩形;
- 吸管(Ctrl/CMD):吸取Tile,同颜色吸管;
- 橡皮(Shift Erase):擦出Tile;
- 油漆桶(Gradient Flood Fill):用Brush选择Tile,再选择油漆桶进行范围填充,和Photoshop中的一样;
- Active Tilemap:正在绘制的层(Tilemap)。
要创建一个新的Tile Palette,点击Create New Palette,调出创建面板,输入Name为“TerrainPalette”,点击“Create”,选择我们的文件夹Tile/Palette。
新创建的Palette中并没有如图中所示的网格,那是因为我们还没有将Tile拖入。在Tile/Texture文件夹中找到我们的贴图,选择需要的Sprites,按住左键拖入到Tile Palette区域中,选择好位置,保存在Tile/Asset文件夹内,并重命名它们。这种方式创建的是Unity的内置Tile,也就是最基本的Tile,同样你也可以找到菜单Assets/Create/Tile创建这种Tile并手动拖入Sprite。
顺带一提,Unity对Tile旋转按键盘上的中括号“[”与“]”。
3 开始绘制
首先,我们将Active Tilemap选择成TilemapBackground。
然后,选择笔刷工具(Brush),在Tile Palette中点选刚才创建的Tile,再将鼠标移动Scene面板中,你就会看到我们的Tile随着鼠标移动。按下鼠标左键就可以进行绘制的;不满意的,可以用其它工具辅助调整。矩形工具与油漆桶工具可以更好的帮助你进行大范围的相同绘制。
最后,保存场景,这样我们就完成了一个简单地图的绘制。
如果你想重新开始绘制,可以将整个Tilemap的GameObject删除,重新建立一个。
4 更改Tile Palette中Tile的布局
要更改Tile Palette中的布局,请点击面板中的“Edit”按钮,然后和在Scene面板的绘制操作一样,在Tile Palette进行绘制,擦除等工作。
图 3 - 12更改Tile Palette的布局
当Tile Palette面板被改变了,Edit按钮会多一个星号“Edit*”。如果要保存更改请按“Ctrl + S”(直接点击“Edit*”的情况,有时候会保存失败,这可能是个小bug),然后点击Edit退出更改模式。