Unity入门计划利用Cinemachine实现简单的相机跟随&设置相机边界

Posted 九九345

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity入门计划利用Cinemachine实现简单的相机跟随&设置相机边界相关的知识,希望对你有一定的参考价值。

目录

使用情景

1 从Packages载入Cinemachine

2 创建2D Camera的Cinemachine

3 设置摄像机跟随玩家角色

4 设置主摄像机边界 

5 加上相机跟随和边界的效果


使用情景

Cinemachine是Unity中用于操作Unity camera的模块。解决了跟踪目标、合成、混合和镜头之间切换的复杂的逻辑,简化我们的操作。通过使用虚拟摄像机,在每个虚拟摄像机上选择不同设置,告诉Main Camera当前哪个虚拟摄像机处于活动状态,以便复制设置。它可以实现摄像机跟随人物移动的效果。还可以与多个Camera配合使用,并根据游戏的需要在多个摄像机之间进行切换,例如在游戏对话中前后视角镜头来回切换等。

本篇博客只是根据教程初期接触Cinemachine,只简单实现相机跟随和设置相机边界,更复杂的操作目前先不涉及。

1 从Packages载入Cinemachine

Window菜单栏 -> Package Manager -> 从资源搜索Cinemachine并install即可。 

2 创建2D Camera的Cinemachine

在Hierarchy窗口右键 -> Create -> Cinemachine -> 选择2D Camera,就创建了一个虚拟摄像机。

3 设置摄像机跟随玩家角色

创建出来的虚拟2D摄像机的属性窗口中,选择Follow的对象为玩家角色即可。

4 设置主摄像机边界 

在属性栏中Add Extension选择CinemachineConfiner,选择Cinemachine Confiner

在Hierarchy窗口中创建新的空对象,并添加Polygon Collider 2D组件,围着场景的范围给他围起来

把IsTrigger勾选上,再赋给Cinemachine Confiner的Bounding Shape 2D就完成了!

5 加上相机跟随和边界的效果

Unity中实现高级相机操作——Cinemachine插件

一:前言

Cinemachine可以快速实现各种相机效果,例如跟随、分镜、推拉式镜头等,配合Timeline可以创建Cinemachine Track实现动画融合


二:执行流程

从PackageManager上可以下载Cinemachine插件,它有以下几种类型的虚拟相机可以创建

Cinemachine在性能上非常高效,因为创建出来的是VirturalCamera,它只是一个数据类只存储数据而不是真实的相机

无论创建哪一种VirturalCamera,都会为Camera上添加一个CinemachineBrain脚本,CinemachineBrain每帧通过VirturalCamera计算真实相机的数据,并同步到真实相机上(添加CinemachineBrain后真实相机的部分参数被锁定,由VirturalCamera托管),之后调整VirturalCamera上的参数去实现相机效果


三:CinemachineBrain

CinemachineBrain是挂在相机对象上去真正修改相机位置的脚本。负责通过VirtualCamera来计算真实相机的数据

——Live Camera:当前正在拍摄的虚拟相机
——Show Debug Text:在Game窗口显示当前拍摄的虚拟相机
——Show Camera Frustun:显示虚拟相机的轨迹
——Update Method:更新方式(Fixed Update、Late Update)


四:Virtual Camera

几乎创建任何类型的虚拟相机都会创建此组件

——Solo:点击后可以在场景中激活此虚拟相机
——Save During Play:运行状态下编辑是否自动保存
——Priority:优先级(与Camera的Depth类似)

——Follow:跟随的物体
——Look At:朝向的物体
——Lens:与相机的相关设置一致(
视野范围,远/近平面等
——Body:跟随相关参数
——Aim:朝向相关参数
——Noise:相机抖动相关参数(选择不同的Noise Profile)


五:Dolly Camera With Track(推轨相机—相机沿着轨道运行)

推轨相机顾名思义,就是电影拍摄中的相机沿着设置好的轨道运行。创建后有两个游戏物体,一个是Virtual Camera,一个是DollyTrack(轨道设置)

——Looped:是否循环(轨道头尾相连)
——Waypoints:路径点(位置和旋转)


推轨相机的Virtual Camera的Body类型选择的是Tracked Dolly

Path:设置的轨道DollyTrack
Path Position:路径点下标,对应DollyTrack的下标


六:Dolly Track With Cart(推轨相机—物体沿着轨道运行)

推轨相机顾名思义,就是电影拍摄中的相机沿着设置好的轨道运行。它与Dolly Camera With Track不同的是创建后有多了一个游戏物体:DollyCart(身上挂载了CinemachineDollyCart脚本,这个脚本实现了此游戏物体沿着轨道移动),其实可以删除掉这个游戏物体,将CinemachineDollyCart脚本挂载到需要沿着轨道移动的对象

——Path:设置的轨道DollyTrack
——Speed:速度


七:Clear Shot(切镜相机)

Clear Shot可以实现物体遮挡后的切镜效果。创建后有一个CM ClearShot(主控制)和Virtual Camera(每个Virtual Camera上都需要挂载Cinemachine Collider组件)

——Default Blend:切镜的融合模式
——Virtual Camera Children:将不同机位的虚拟相机添加到列表中,CinemachineClearShot会计算是否有遮挡并选择最佳拍摄位置的相机


八:FreeLook Camera(自由观察相机)

FreeLook Camera应用于第三人称的控制。创建后有一个CM FreeLook,它拥有Virtual Camera的一些基础设置,FreeLook Camera有上中下三条机位轨道,可以分别调整参数


九:State-Driven Camera(状态驱动相机)

State-Driven Camera可以根据不同的动画切换不同的相机。创建后有一个CM StateDrivenCamera(主控制)和Virtual Camera

——Animated Target:目标对象的Animator
——Default Blend:切换不同的相机的融合模式
——状态设置:选择每个状态对应的虚拟相机
——Virtual Camera Children:将不同机位的虚拟相机添加到列表中,Cinemachine StateDrivenCamera会根据不同的动画状态切换不同的相机


十:Target Group Camera(跟随组相机)

Target Group Camera可以跟随多个物体,并根据物体的距离远近进行相机视野的调整。创建后有两个游戏物体,一个是Virtual Camera,一个是CM TargetGroup(组设置)

组设置:每个目标物体对应的权重


十一:2D Camea(2D游戏相机)

2D Camere可以实现2D游戏中相机参数设置。创建后有一个Virtual Camera,Body模式选择的是Framing Transposer

可以配合Cinemachine Confiner组件限定相机边界

——Confine Mode:类型,2D or 3D
——Bounding Shape2D/Volume:碰撞器(2D必须使用Polygon Colldier 2D)


十二:Blend List Camera

Blend List Camera与State-Driven Camera相似,Blend List Camera是根据设置的时间切换不同的相机。创建后有一个CinemachineBlendListCamera(主控制)和Virtual Camera

——相机设置:设置每个相机持续的时间、混合模式
——Virtual Camera Children:将不同机位的虚拟相机添加到列表中,CinemachineBlendListCamera会根据时间切换不同的相机


十三:Mixing Camera

Mixing Camera可以实现多个相机的混合。创建后有一个CM MixingCamera(主控制)和Virtual Camera,将需要混合的虚拟拖拽到CM MixingCamera下作为子物体

——Child Camera Weights:每个相机的权重

以上是关于Unity入门计划利用Cinemachine实现简单的相机跟随&设置相机边界的主要内容,如果未能解决你的问题,请参考以下文章

Unity中实现高级相机操作——Cinemachine插件

Unity中实现高级相机操作——Cinemachine插件

旧版本金庸群侠传3D新Unity重置修复版入门-lua”脚本“

Unity2020新增的插件Cinemachine在timeline中的作用

如何在 Unity / C# 中访问 Cinemachine 的相机距离值?

Unity 2D 中 Pixel Perfect Camera 和 Cinemachine 的问题