Unity之2D摄像机跟随

在2D游戏制作过程中,摄像机的跟随主角移动是必不可少的。有代码实现,也有插件实现。下面分别讲述两种方法。

Unity中提供了专属的摄像机插件进行使用:

  • 官方Cinemachine插件(后面有相关组件介绍):

首先从unity中的window中的package manage中添加Cinemachine插件,完成后会出现Cinemachine如图:

并且在Cinemachine菜单中创建相关相机;

Cinemachine中的Virtual Camera(虚拟相机)可以说是最核心的组件。使用Cinemachine时,你需要记住一个准则:场景中一般只有一个Unity相机(除了需要制作分屏、画中画等效果的时候),上面挂着CinemachineBrain脚本;其他相机都是使用Cinemachine中的虚拟相机,可以有很多个。(平常使用这个较多)

菜单栏,选择Cinemachine > Create Virtual Camera。Unity会在场景中添加一个。Unity会在场景中添加一个GameObject,上面有一个Virtual Camera组件。如果你的Unity相机上没有CinemachineBrain脚本,Cinemachine也会自动添加CinemachineBrain脚本到Unity相机上。创建后如图:

如果相机需要跟随物体移动,指定一个物体到Follow属性上。虚拟相机会自动将Unity相机的位置和Follow物体保持相对位置,包括Follow物体移动的时候。:

将所需要跟随的物体拖拽到此即可

接着是边缘的检测:

相机的边缘检测需要添加Cinemachine Confiner组件,并且创建一个空物体来进行Polygon Collider的存放:

并且添加Polygon Collider 2D组件将需要显示的范围进行框起来:

接着回到虚拟相机中添加Confiner组件并将控制可视范围的空物体拖拽其上面:

即可实现边缘检测,超出边缘不可见。

代码实现:

代码实现方法是最常用的方法之一,方便后续管理维护:

首先创建一个C#脚本,命名为CameraFollow:

接着创建一个空物体,并将脚本挂在空物体,且将相机作为其子物体。

其原理是将摄像机固定在一定范围,并且利用Lerp函数进行跟随目标移动,相关代码如下:

public class CamerFollow : MonoBehaviour
{public Transform target;public float smoothing;//定义两个位置进行限制相机移动public Vector2 minPosition;public Vector2 maxPosition;// Start is called before the first frame updatevoid Start(){}void Update(){}void LateUpdate(){if (target != null){Vector3 targetPos = target.position;targetPos.x = Mathf.Clamp(targetPos.x, minPosition.x, maxPosition.x);targetPos.y = Mathf.Clamp(targetPos.y, minPosition.y, maxPosition.y);transform.position = Vector3.Lerp(transform.position, targetPos, smoothing);}}
}

拖拽需要跟随的目标,并且进行范围设定,此处范围限制可根据具体情况进行设定。如上即可代码实现摄像机跟随。

关于Lerp函数的使用,可以查看手册进行学习。

至此,实现摄像机的两种方法均已经实现,若有不足,望大家评论改正。

CinemachineVitualCamera组件的属性解读:

Solo:用于调试。选中这个按钮时,此虚拟相机会直接控制Unity相机显示在Game窗口中,用于相机的调试。(忽略优先级,但是需要所在GameOjbect是激活状态)
Game Window Guides:勾选时,Game窗口会显示辅助线,用于设置虚拟相机的各个属性。
Look At属性设置了物体,Aim设置为Composer或Group Composer或 Follow属性设置了物体,Body设置为Framing Composer
Save During Play:虚拟相机的属性在运行时的修改可以被保存下来,退出Play状态时不会被重置。
Priority优先级:虚拟相机的重要程度,用于Live镜头的选择。数值越高代表优先级越高。Cinemachine Brain会根据这个属性从所有激活的虚拟相机中选择活动的虚拟相机。在Timeline上使用时这个属性不生效。
Follow跟随目标:虚拟相机会跟随这个物体移动。Body属性基于这个目标物体更新Unity相机的位置。如果你想让相机保持它自己的位置不变,不要设置这个属性。
Look At瞄准:镜头瞄准的物体目标。Aim属性使用这个属性来更新Unity相机的旋转。如果你想相机保持原来的角度,不要设置这个属性。
Standby Update 待命时的更新方式,当虚拟相机物体没有被禁用,但是优先级不足时,虚拟相机处于待命状态。这个属性会影响性能,通常设置为Never是最好的,但是有时候可能需要虚拟相机更新来做一些镜头相关的计算判断。
  • Never 不更新
  • Always 每帧更新
  • Round Robin 循环更新:所有的待命虚拟相机循环更新,每帧更新一个相机(例如有10个待命的相机,第一帧更新第一个相机,第2帧更新第2个相机,…,第11帧更新第1个相机,以此类推)
Lens镜头设置:对应Unity相机中的属性,也可以从Preset中选择或者从现有的设置创建新的Preset。
Dutch镜头旋转。这个属性在Unity相机中是没有的,可以用来控制镜头的旋转。(在屏幕空间的旋转)

ens镜头设置:对应Unity相机中的属性,也可以从Preset中选择或者从现有的设置创建新的Preset。

Dutch镜头旋转。这个属性在Unity相机中是没有的,可以用来控制镜头的旋转。(在屏幕空间的旋转)
Transitions相机转换的相关设置:

Blend Hint混合方式:
None 无,默认线性混合
Spherical Position 根据Look At的物体球面旋转混合
Cylindrical Position 根据Look At的物体柱面旋转混合(水平方向圆弧,垂直方向线性)
Screen Space Aim When Target 在屏幕空间瞄准目标
Inherit Positon 下一个相机变成活动相机时,从上一个相机继承位置,即保持两个相机位置相同。
On Camera Live事件,相机变为活动时会触发对应的事件。
Body、Aim、Noise后面深入学习。
Extension:可以给虚拟相机添加额外的扩展。后面深入学习。

Unity之2D摄像机跟随相关推荐

  1. 【Unity】2D摄像机跟踪

    2D游戏中摄像机跟随角色移动只需要考虑X轴 float playerNowPositionX = transform.position.x; //相机只需要水平移动即可Camera.main.tran ...

  2. unity 3D场景摄像机跟随人物

    3D场景摄像机跟随人物 2d场景和3d场景跟随不一样,但是有些还是相同的,就因为3d场景中人物旋转方向导致摄像机不能始终和人物方向一致很麻烦.所以下面提供一种挺不错的方法来帮助你. 效果如下: 效果就 ...

  3. [Unity]俯视角摄像机跟随

    ... public Transform followTarget;//摄像机跟随的目标 ...public void cameraFollow(){if (followTarget != null) ...

  4. Unity中控制摄像机跟随人物主角的移动

    首先进入场景中,把摄像机挂载到人物主角的下方,先作为主角的一个子物体存在,然后新建一个脚本CameraFllow,用于控制摄像机跟随,然后把这个脚本挂载摄像机上面,打开脚本,并复制以下的代码: usi ...

  5. 项目实训--Unity多人游戏开发(十二、PUN框架--摄像机跟随)

    文章目录 相机跟随 单机游戏的相机跟随 多人游戏的相机跟随 相机跟随 上一篇是一个所有玩家固定视角的游戏.多人化不需要考虑相机跟随问题. 但如果想做一个2D.超级马里奥类型的跟随视角,或者3D.GTA ...

  6. 【0909】unity作业:2d箭头跟随指引物体方向,箭头始终在屏幕内。

    [0909]unity作业:2d箭头跟随指引物体方向,箭头始终在屏幕内. 第一步:对需要用到的箭头进行抠图: 上课老师说用Sprite Editor.不过那个,好像是用来切片的,不能抠图-参考了一篇文 ...

  7. unity 摄像头跟着鼠标移动_unity第三视角移动,摄像机跟随

    在以前的仿真项目中用到了第三人称视角的移动, W . S . A . D 控制角色的前后左右移动,摄像机跟随角色移动,并且摄像 机做了缓冲处理.鼠标右键长按旋转控制镜头旋转,中键滑轮控制镜头拉进拉远. ...

  8. Unity小地图映射到Canvas中去,并完成摄像机跟随物体。

    OK!这次的方式是通过Renderer Texture和Material来配合实现摄像机内容映射到Canvas的UI元素中,炒鸡简单. 适用于任何场景. 首先:摄像机映射 新建一个Camera 新建一 ...

  9. Unity制作2D动作平台游戏视频教程

    Metroidvania工具包:打造统一的2D行动平台 流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确 ...

最新文章

  1. 取出url中的字符_如何在JavaScript中解析URL:例如主机名,路径名,查询,哈希?...
  2. knowledgetree汉化出现错误
  3. Oracle中的rownum和rowid
  4. mybaits六:参数处理
  5. Core Java 第三章 Java基本的程序设计结构
  6. 开发资源库(repositiory)
  7. MySQL索引背后的数据结构及算法原理--转
  8. Java中 byte[]数组序列化和fastjson序列化区别
  9. mybatis-嵌套(关联)查询/ N+1 / 延迟加载
  10. 自动点击器如何设置最快_铁粉技巧 | iPhone如何设置自动开关机,iPhone更改字体...
  11. linux QT 结束当前进程_Linux常用使用命令梳理
  12. 以太坊技术架构/技术栈
  13. 五、Linux常用命令——帮助命令
  14. apache log分析
  15. 计算机网络可以划分几个阶段,计算机网络的发展可以划分为几个阶段.doc
  16. netapp linux ntfs,netapp存储常用命令
  17. python正则表达式实战——获取图片
  18. PTA 机工士姆斯塔迪奥 python
  19. python爬取推特图片_twitter图片视频批量下载
  20. 背景与小鸟--FlappyBird游戏开发教程之二

热门文章

  1. W: 校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。
  2. 为FireFox增加自定义搜索引擎
  3. Firefox 地址栏用法三: 搜索引擎
  4. 使用plotly画3d立方体
  5. 删除我的电脑中微云、百度网盘、酷我音乐等软件图标
  6. SQL 左连接中on后面加where和加and的区别
  7. 微软下一代掌上操作系统Microsoft Windows Mobile Crossbow(ZT)
  8. 手机控制云服务器文件,手机控制云服务器的app
  9. Qt程序报错:Socket notifiers cannot be enabled or disabled from another thread
  10. Linux下python环境搭建