SRPG游戏开发(五)第三章 绘制地图 - 二 绘制一张简单地图

 

返回目录

第三章 绘制地图


一 导入素材


点击进入


二 绘制一张简单地图


这一节我们来看如何绘制一张地图。


1     新建GridTilemap


Hierarchy面板中,点击Create/2D Object/Tilemap,这样就多了一个名叫“Grid”的GameObject,而子对象有一个Tilemap,这就是我们地图的基础。UnityTilemap组件是依赖于Grid的。Grid才是一个地图,而Tilemap其实可以看作是层(Map Layer)当你选中GridTilemap时,在Scene面板中可以看到Cell的分布情况。


1.1      Grid组件


SRPG游戏开发(五)第三章 绘制地图 - 二 绘制一张简单地图

3 - 7 Grid组件

  • Cell Size:格子的大小;
  • Cell Gap:格子的间距;
  • Cell Swizzle:格子平面的方向,如果你要做3D游戏,也可选XZY


其中注意Cell Size是指UnityUnit而不是像素。你应该注意到这与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(像素)。那么推荐的做法是:

把素材1Pixels Per Unit设置成25

把素材2Pixels Per Unit设置成30

Cell SizeX设置成1Y设置成2


如果你的素材是成套的,而且非常规范标准,那么推荐将所有贴图Pixels Per Unit设置成1Cell Size设置成地形的宽和高。


注意:你的其它地图对象素材也要修改Pixels Per Unit以配合地形。


1.2      Tilemap组件与建立层级关系


SRPG游戏开发(五)第三章 绘制地图 - 二 绘制一张简单地图

3 - 8 Tilemap组件与Tilemap Renderer组件


  • Animation Frame Rate:全局动画播放速度,如果你的Tile有动画;
  • Color:颜色;
  • Tile Anchor:每个Cell的参考点,默认是中心;
  • Sort OrderTile的渲染顺序,如果Tile的大小超出CellSize,可以改变它更改遮挡顺序;
  • Sorting LayerOrder in Layer:这与Sprite Renderer是一样的。


我们先来创建几个层级,为我们以后做准备。首先选择Sorting Layer/Add Sorting Layer。添加BackgroundTilemapBackgroundTerrainMapObjectBackgroundMapObjectMapObjectForegroundTilemapForegroundUIUIForeground


SRPG游戏开发(五)第三章 绘制地图 - 二 绘制一张简单地图

3 - 9 Sorting Layers


根据你的项目决定,并不用完全一致,我们也可能不会全用到。

  • MapObjectBackgroundMapObjectForeground是为了显示某些特效的。比如2D中地面上火圈,如果直接渲染,有可能会全部在人物前面或后面,这就不是我们要的了。
  • TilemapForeground是用来绘制前景。比如建筑物的上半部分,建筑物背面可以走动,你可能需要用建筑物遮挡人物。再比如大树除了根部的上半身。


你可能会问,为什么我没有用Order in layer。在Map Object中就算在同层级也可能会造成遮挡,我们要用它来计算同层级之间遮挡关系,因为Map Object往往会超出一个Cell的范围。


然后再来建立我们可能会用到的物体与Tilemap,并依次重命名,BackgroundTilemapBackgroundTerrainMapObjectTilemapForeground,然后设置对应名称的Sorting Layer。然后将改好名字的Grid放入新建的Prefab文件夹内。


SRPG游戏开发(五)第三章 绘制地图 - 二 绘制一张简单地图

3 - 10新建层级


  • BackgroundSprite Renderer,单张图片背景,比如地图很小,占不满整个屏幕,虽然几率很小;
  • TilemapBackgroundTilemap,用Tile绘制的背景,任意Tile
  • TerrainTilemap,用于计算的Tile层,使用我们自己的Tile
  • MapObject:空GameObject,地图对象的父对象;
  • TilemapForegroundTilemap,用Tile绘制的前景,任意Tile


2     创建Tile Palette和第一个Tile


Tile Palette是我们的“调色盘”,就像颜色调色盘一样,颜色调色盘中有许多颜色供我们选择,而Tile Palette是有许多Tile供我们选择,都是选取一种进行绘画创作。要打开Tile Palette面板,找到菜单Window/TilePalette打开Tile Palette面板。


SRPG游戏开发(五)第三章 绘制地图 - 二 绘制一张简单地图

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


顺带一提,UnityTile旋转按键盘上的中括号“[”与“]”。


3     开始绘制


首先,我们将Active Tilemap选择成TilemapBackground


然后,选择笔刷工具(Brush),在Tile Palette中点选刚才创建的Tile,再将鼠标移动Scene面板中,你就会看到我们的Tile随着鼠标移动。按下鼠标左键就可以进行绘制的;不满意的,可以用其它工具辅助调整。矩形工具与油漆桶工具可以更好的帮助你进行大范围的相同绘制。


最后,保存场景,这样我们就完成了一个简单地图的绘制。


如果你想重新开始绘制,可以将整个TilemapGameObject删除,重新建立一个。


4     更改Tile PaletteTile的布局


要更改Tile Palette中的布局,请点击面板中的“Edit”按钮,然后和在Scene面板的绘制操作一样,在Tile Palette进行绘制,擦除等工作。


SRPG游戏开发(五)第三章 绘制地图 - 二 绘制一张简单地图

3 - 12更改Tile Palette的布局


Tile Palette面板被改变了,Edit按钮会多一个星号“Edit*”。如果要保存更改请按“Ctrl + S”(直接点击“Edit*”的情况,有时候会保存失败,这可能是个小bug),然后点击Edit退出更改模式。