Unity 利用Cinemachine快速创建灵活的相机系统

在第一或第三人称ACT和FPS游戏中,相机的运动需求是多种多样的,Unity内置的Cinemachine包可以助你快速实现不同相机功能,例如范围追踪,边界设置等。

例如,考虑这样一个功能,这在很多游戏中都是非常常用的:

1.在屏幕中心的一定范围内摄像机追踪一个主角单位,但这是一个惰性相机,当且仅当主角快要离开屏幕中心向屏幕边缘移动时相机才跟随过去。

2.当摄像机运动到了地图边缘时,它不再继续追踪目标,也就是说,相机还需要界定一个运动范围。

观察上图,图中黄色的点为摄像机跟踪的目标,淡蓝色的框为屏幕相机追踪的过渡区域,只有当追踪目标移动到淡蓝色的框中时,摄像机才开始朝角色的运动方向追踪,角色运动停止后,摄像机会保证追踪的主角停止在淡蓝色框内,红色框外。

图中主角已经运动到地图的边缘,所以摄像机不会继续向上或向右运动,这是因为利用碰撞盒子设置了摄像机的运动范围。

如上图,摄像机已经运动到了黄色碰撞盒子的边界,它无法再继续向上或向右运动,这样可以保证摄像机的视野范围不会超出地图的边缘。

 

知道了这些后,再来了解Cinemachine的功能将变得非常容易。

Cinemachine的功能看上去非常之多,但最终还是离不开虚拟摄像机这一组件。

 

我们可以利用菜单栏先创建一个虚拟摄像机:

 

虽然后面有各种各样的摄像机组件可以选择,但其实都是虚拟摄像机的不同设置而已,只要弄清楚了这一个组件的用法,其他都可以利用设置或自定义脚本来实现。

基本模块中比较重要的就是Follow和Look At,Follow是追踪的主角Transform,也可以运行后动态设置。

Look At根据需要选择是否设置,如果摄像机需要需要进行视角方位的旋转变换,则需要有一个Look At的目标,可以根据该目标的朝向来进行视角的旋转;只是跟随主角在固定的视角方向进行平移运动的话,就可以不用设置Look At。

 

Body模块主要功能是处理场景中相机和它的目标之间的位置关系。

 

 

用的比较多的是Ransposer和Framing Transposer,Framing Transposer可以很方便的实现惰性相机,里边有一个参数是Dead Zone区域设置,默认情况下是零,这时相机始终跟随目标位置反复移动,当Dead Zone扩大后,相机在屏幕中间的区域就会变得非常懒,就像死了一样,只有角色移动出死亡区域后相机才重新开始追踪目标。(如最上面图中的全透明区域)

 

Extentions提供了额外的扩展组件功能:

 

本例中增加了摄像机的区域设置,选择之后会自动增加一个脚本:

通过该脚本组件可以指定一个2D或3D的碰撞盒子作为作为摄像机的运动范围,利用该组件可以快速控制摄像机只在地图视野范围内运动。

官方参考:

https://connect.unity.com/p/li-yong-cinemachinekuai-su-chuang-jian-you-xi-zhong-de-xiang-ji-xi-tong

posted @ 2019-11-08 15:39  汐夜  阅读(...)  评论(...编辑  收藏