主要内容
在了解Tilemap之前先要了解五个相关概念:Sprite,Tile,Tile Palette,Brush和Grid。
1. Pipeline(管道) and Terrain(地形) Tiles
2. Animated(动画) Tiles
3. Random(随机)Tiles
Tilemap(瓦片地图)可以帮助我们快速设计一个关卡。
在了解Tilemap之前先要了解五个相关概念:Sprite,Tile,Tile Palette,Brush和Grid。
Tile(瓦片),它包含着属性Sprite(精灵),Color(颜色)和Collider Type(碰撞体类型)。
用Brush(画刷)将Tile刷在Tilemap上相当于在画布上涂色,而这个颜色包含着画面内容。在涂色之前,我们一般先将颜色刷在调色板上,观察或调试颜色,刷Tile也一样,要先把它们放入Tile Palette(调色板)中。
*需要注意的是,Tile可以通过Tile Palette生成——将需要的若干Sprite拖动到Tile Palette中,然后在Assets文件夹里新建一个文件夹用以保存Tiles资源。当然我们也可以通过Assets/ Creat/ Tile来创建,但同样需要新建一个文件夹来保存。
Brushs工具并不是在一个单独的窗口,它们显示在Tile Palette窗口中。
有关Tile的操作只能在Tilemap上进行。创建Tilemap——GameObject/ 2D Object/ Tilemap。Tilemap创建成功时,Hierarchy窗口上会自动生成对象Grid(网格),而Tilemap作为Grid的子对象生成。
想利用Tilemap设计地图关卡,我们还要在上面添加两个组件,Tilemap Collider 2D和Composite Collider 2D。
Tilemap Collider 2D会在整个Tilemap上添加碰撞体,使之能与主角发生接触,但这并不符合我们的游戏需求,因而我们还要添加Composite Collider 2D,只在含有Tile的网格上添加碰撞体。添加Composite Collider 2D后物体会自动添加Rigidbody 2D,使物体成为一个物理对象。
在Tilemap Collider 2D和Rigidbody 2D上做相应的设置后,Tilemap就可以作为正常地图使用了。
*Tilemap一样适用于3D游戏,只是在对象Grid和子对象Tilemap的组件中作相应的设置。
Rule Tile(规则瓦片)可以让我们更快地一键拖动生成地图。
*要使用Rule Tile,首先得在资源文件夹中导入插件2D-Extras。
(下载地址:https://github.com/Unity-Technologies/2d-extras)
创建方式——Assets/ Creat/ Rule Tile
1. Pipeline(管道) and Terrain(地形) Tiles
属性Output设置为Single,九宫格中的箭头表示瓦片的该侧可以有其他瓦片,叉叉表示没有。虽然设置规则比较繁琐,但用上的时候真的非常方便!磨刀不误砍柴工嘛~
2. Animated(动画) Tiles
属性Output设置为Animation,设置后规则属性栏会增加Speed和Size。九宫格中的前头表示瓦片的移动方向,很容易理解,Speed表示移动的速度,而Size则表示在动画中有多少个瓦片参与。
如果想一次性调整多个瓦片的Speed,可以直接在Tilemap上的组件设置数值。
*有时候我们会遇到若干种瓦片需要在Grid中的同一个网格显示的情况,这时候我们就要在Grid下添加一个新的Tilemap,然后在Tile Palette上选择“作画”的瓦片地图,再刷上新的Tile。
3. Random(随机)Tiles
属性Output设置为Random,设置后会自动添加两个新属性,Noise和Size。Noise的属性值默认为0.5,而且不方便直接设置,一般情况不用调整。Size和Animated Tiles的道理相同,表示参与随机抽取的瓦片的数量。
*除了Rule Tile,插件2D-Extras还给了我们其他类型的Brushs,至于这些画刷能用出什么样的效果,这里就不一一说明了。
Cinemachine(自动推拉相机)可以帮助我们轻松管理相机,实现更好的镜头移动。
创建途径——Component/ Cinemachine/ Creat 2D Camera。
将需要镜头跟随的对象拖入Follow框中,Main Camera(主摄像机)就会聚焦在物体上。
我们可以发现,物体移动了一定距离时镜头才会跟随着平滑地移动,这与Camera的Dead Zone有关。
需要注意的是,在大多数闯关游戏中,镜头并不是一直跟随着主角就可以了。有时候主角会掉落到我们想要的场景之外,如果在这种情况下镜头还一直跟随着,这就不符合我们想要的效果了。
因此我们需要用到Camera的Extension组件——Cinemachine Confiner。Confine的中文意思是界限,很容易理解。该组件需要一个Collider 2D的引用来告诉它,它可以移动的范围在哪,所以我们只需要给场景背景添加一个碰撞体,再将背景对象拖入引用框中即可。
还需要注意的是,碰撞体要勾选Is Trigger属性,不然游戏开始时主角会被弹到碰撞体之外。
2D to 3D By Camera 利用相机在2D游戏中实现3D效果。
主摄像机的组件Camera中有一项名为Target Texture的引用。
当我们在这(Target Texture)添加一个(新建的)Render Texture时,可以看到Render Texture的内容从左图变为右图,原因是主摄像机原先拍摄的内容被它给包含了。
→
与此同时,主摄像机不再对游戏视图进行渲染。
因此我们需要添加一个新的摄像机。此时我们可以不让新摄像机继续拍摄游戏场景,而是通过另一种方式来显示游戏视图。
首先,在Camera下建立一个3D Object,比如示例中的Cylinder(圆柱体),并调整两者之间的位置。
然后新建一种Material(命名为Cylinder)。由于从2D转为3D不需要考虑光照的影响,所以要将属性Shader设置为Unlit/ Texture。再把刚才的Render Texture拖入红色箭头所指的框框。
最后将材质拖到3D Object(Cylinder)中就大功告成了!
路过的圈毛君:“给美工(艺术生)的建议,多观察别人的地图或关卡,在清楚自己的作品能起怎样的作用后,体会那种设计的思路,并尝试设计地图。”
举两个栗子_(:з」∠)_