(C#)Unity2D中制作角色的相机跟随Camera Follow
前言
关于相机跟随方面,本文介绍两种实现方法。
一种为脚本控制Unity初始的相机,一种为调用Unity中相机插件。
1.需求分析和实现目标
a.2D视角,相机需要始终将玩家放在可见屏幕内。
b.相机不能生硬地把玩家放在屏幕正中间,最好体现一种视角跟随的效果。
c.在超出原本绘制的地图边界的时候,不能让相机可视范围出界,简而言之设置相机的移动边界。
2.用脚本控制
a.我们主要用到三个函数
(1)GameObject中的FindGameObjectWithTag,用于我们寻找到相应的对象,给对象设置好标签,再通过该函数来确定对象,方便调用修改该对象的参数等。
(2)Mathf.Clamp,夹逼函数,用于把数值控制在一定范围内,具体用法 Mathf.Clampp(vlue,min.max).
(3)Vector2.Lerp,一个二维跟随,具体用法 Vector2.Lerp(起始点,终点,移动速度)。
b.基本逻辑
创建相机的跟随速度(建议设置比玩家的移动速度略慢一些),相机所能到达的最大,最小坐标(移动边界),相机的目标位置,在初始化时获取玩家所在位置,并为相机初始位置,在LateUpdate(它会在Update之后被调用)中限制相机边界,同时设置跟随。
c.代码实现
public float followSpeed = 2.0f;public float minX;public float maxX;public float minY;public float maxY;private Transform PlayerTransform;prive Vector2 targetPosition;void start{ PlayerTransform = GameObject.FindGameObjectWithTag("Player").transform;//提前在外面把Player标签给对象挂上 transform.position = PlayerTransform.position;}private void LateUpdate{ if(PlayerTransform != null) { targetPosition.x = Mathf.Clamp(PlayerTransform.position.x,minX,maxX); targetPosition.y = Mathf.Clamp(PlayerTransform.position.y,mixY,maxY); transform.position = Vector2.Lerp(transfrom.position,targetPosition,followSpeed*Time.deltaTime); }}
3.使用Cinemachine插件实现跟随
- 可以从Windows里面的package Manager里面搜索到,直接下载即可。
图3.1
- 当我们下载好后就可以直接在工程栏创建新的VirtualCamera,其基本界面(图3.3),在Follow一栏添加我们的角色对象,它就可以自动跟随了。
图 3.2
图3.3
- 实际上这个插件还可以实现更多功能,比如我们有时候想要玩家在一定范围内活动时不受相机跟随的影响,当走出这个范围,相机再进行跟随,就可以调整下面这个参数(图3.2)。
3.4
- 调整后(图3.3),玩家对象走出中间范围,相机才会进行一个跟随的动作。
3.5
4.总结
实际上我们在游戏制作时,大多还是使用Cinemachine插件,它实现的功能更加方便,但实际上预设封装好的插件或是函数或是引擎都具有它的局限性,而我们的思绪是无限的,所以无论做什么或是用什么,了解它背后的运行原理,过程都是最重要的,更多时候是要自己去实现它。相信自己也是最重要的。