Cinemachine是官方提供的摄像机工具组件,这个工具的用处还蛮大的,不过我们这里就简单说一下在2D游戏里面怎么实现镜头跟踪的效果,这里我们用Cinemachine代替使用Main Camera

我们想要让我们的镜头跟随我们的角色移动,包括跑步,跳跃等动画,当然用脚本控制Main Camera也可以实现,思路就是让Main Camera的transform里面的position实时的设置成角色的position即可

但是这样做的话我们可能会看到我们背景的边界,通过Cinemachine可以很方便的解决这个问题,可以精准的控制我们镜头的边界以及跟随问题

我们在Hierachy栏创建一个空组件,命名为Background,表示背景,然后从外面拖入一张图片用来做背景图片,这个可以自己找一张大一点的图片就行,把这个图片放在Background的下面当背景图片用

PS:如果需要这张图的话可以在这里取:https://pan.baidu.com/s/17zyG6etLABXqJuOmg0IjnQ

提取码:yjsl

unity3d通过移动相机拖拽物体 unity3d相机移动位置_unity3d通过移动相机拖拽物体

 

unity3d通过移动相机拖拽物体 unity3d相机移动位置_图层_02

 这时候发现角色和地图不见了,因为被这个背景图片挡住了,类似于ps的图层一样,我们点击background,右边属性栏,在sprite Renderer(精灵渲染器)有一个sorting layer,这里我们可以设置图层渲染的顺序,越在上面的会先渲染

unity3d通过移动相机拖拽物体 unity3d相机移动位置_unity_03

 我们创建player,Map,background,collection,Enemy五个图层顺序,我们把角色的Sorting layer设置成player,地图的的sorting layer在Tilemap Renderer那里,设置成Map,背景图片设置成background,collection和Enemy图层留着后面用

unity3d通过移动相机拖拽物体 unity3d相机移动位置_图层_04

 接下来我们就要使用Cinemachine了,windows->Package Manager,打开package之后,左上角选择unity Registry,找到Cinemachine然后install即可

unity3d通过移动相机拖拽物体 unity3d相机移动位置_unity_05

 安装完之后我们就可以在上面的Component找到Cinemachine了

unity3d通过移动相机拖拽物体 unity3d相机移动位置_游戏_06

 我们在Hierachy界面右键创建一个2D的camera

unity3d通过移动相机拖拽物体 unity3d相机移动位置_unity_07

 

unity3d通过移动相机拖拽物体 unity3d相机移动位置_ide_08

 这个CM vcam1就是我们创建的2Dcamera,我们有了这个camera,原来那个Main camera的参数就没用了,我们设置一下这个CM vcam1

unity3d通过移动相机拖拽物体 unity3d相机移动位置_ide_09

 通过设置这个Follow就可以设置我们的摄像头跟随哪个角色了,我们把player拖过来即可

然后还可以在Body调整它别的参数,在这里不在赘述,感兴趣的可以去试试

之后我们运行一下就可以发现我们镜头已经跟随我们角色在移动了

但是我们还没解决角色跳出边界的问题,这时候我们要为2Dcamera添加额外的一个组件,选中这个2Dcamera,在右边属性栏在最下面有一个Extensions(扩展),我们选择CinemachineConfiner,这个组件可以帮我们找到边界的位置

unity3d通过移动相机拖拽物体 unity3d相机移动位置_unity3d通过移动相机拖拽物体_10

 选择之后我们还需要一个2D的collider(碰撞器)来确定镜头移动的范围,所谓我们给我们的Background添加一个collider,我们在Hierachy选中Background

unity3d通过移动相机拖拽物体 unity3d相机移动位置_游戏_11

 在右边属性栏,添加一个Polygon Collider 2D(2D多边形碰撞器),因为2Dcamera需要的就是Polygon Collider 2D

unity3d通过移动相机拖拽物体 unity3d相机移动位置_游戏_12

 添加之后我们设置一下它的位置就行,直接拖拽多边形的顶点到合适的位置就行,如果你不需要某个顶点,按住ctrl,点击就能删掉了。如果你想拖得很精细的话可以放大

unity3d通过移动相机拖拽物体 unity3d相机移动位置_unity3d通过移动相机拖拽物体_13

 调整好之后我们把这个碰撞器传给我们的2Dcamera

unity3d通过移动相机拖拽物体 unity3d相机移动位置_unity3d通过移动相机拖拽物体_14

 点击运行之后发现我们的角色会直接掉落下去,因为我们给Background添加的是一个碰撞体,会和我们的游戏角色产生碰撞将我们的游戏角色弹走,所以我们给Polygon Collider 2D勾选is Trigger,is Trigger就是一个开关,如果勾选就可以把这个collider当做一个触发器而不是一个碰撞体,就不会和我们游戏角色发生冲突了

unity3d通过移动相机拖拽物体 unity3d相机移动位置_unity_15

 我们再运行一下发现角色跳起来会卡顿,这是因为我们的镜头没有调整好,我们把镜头拉近一点

unity3d通过移动相机拖拽物体 unity3d相机移动位置_游戏_16

 我们在CM vcam1属性栏那里调整Ortho Size的大小就可以调整镜头离角色的距离,把Ortho Size调整到合适的大小,然后再运行就会发现没有卡顿的感觉了