> 文档中心 > (C#)Unity2D中制作角色的相机跟随Camera Follow

(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里面搜索到,直接下载即可。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6K6w6Zi_5qWg5ZCM5a2m6buR5Y6G5Y-y55qE5bCP5YaM5a2Q,size_18,color_FFFFFF,t_70,g_se,x_16

图3.1

  • 当我们下载好后就可以直接在工程栏创建新的VirtualCamera,其基本界面(图3.3),在Follow一栏添加我们的角色对象,它就可以自动跟随了。

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6K6w6Zi_5qWg5ZCM5a2m6buR5Y6G5Y-y55qE5bCP5YaM5a2Q,size_16,color_FFFFFF,t_70,g_se,x_16

图 3.2

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6K6w6Zi_5qWg5ZCM5a2m6buR5Y6G5Y-y55qE5bCP5YaM5a2Q,size_9,color_FFFFFF,t_70,g_se,x_16

 图3.3

  • 实际上这个插件还可以实现更多功能,比如我们有时候想要玩家在一定范围内活动时不受相机跟随的影响,当走出这个范围,相机再进行跟随,就可以调整下面这个参数(图3.2)。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6K6w6Zi_5qWg5ZCM5a2m6buR5Y6G5Y-y55qE5bCP5YaM5a2Q,size_8,color_FFFFFF,t_70,g_se,x_16

 3.4

  • 调整后(图3.3),玩家对象走出中间范围,相机才会进行一个跟随的动作。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6K6w6Zi_5qWg5ZCM5a2m6buR5Y6G5Y-y55qE5bCP5YaM5a2Q,size_10,color_FFFFFF,t_70,g_se,x_16

 3.5

 

 4.总结

实际上我们在游戏制作时,大多还是使用Cinemachine插件,它实现的功能更加方便,但实际上预设封装好的插件或是函数或是引擎都具有它的局限性,而我们的思绪是无限的,所以无论做什么或是用什么,了解它背后的运行原理,过程都是最重要的,更多时候是要自己去实现它。相信自己也是最重要的。