Unity插件-Cinemachine

1.Virtual Camera 相机控制

创建Virtual Camera:鼠标右键(或点击上方的GameObject)-> Cinemachine -> Virtual Camera,创建完Virtual Camera后会发现场景原相机上会自动添加一个CinemachineBrain的组件

CinemachineBrain是Cinemachine中另一个核心组件(如图),可以称之为大脑。它挂载在Camera上,监控着场景中所有active状态(Live和Standby)的VirtualCamera。若一个inactive状态的VirtualCamera,其Priority值大于等于当前Live状态的VirtualCamera,当我们将其设置为active状态,那么CinemachineBrain就会选择它作为新的Live状态的VirtualCamera。我们可以使用这种方法来实现镜头的切换。

注:我们也可以使用Timeline来控制VirtualCamera,这种情况Timeline的处理逻辑会覆盖CinemachineBrain的。

下面对该组件的参数进行详细解释

Show Debug Text开启后会在Game视图中显示当前Live状态下的VirtualCamera的文本信息
Show Camera Frustum开启后在Scene视图中会始终显示Camera的视锥体。
Ignore Time Scale使VirtualCamera响应用户的输入和阻尼时忽视TimeScale的设置。
World Up Override用于指定VirtualCamera在世界空间中向上的向量,若为空,则为世界空间中Y轴的方向,即 (0, 1, 0)。否则使用设置的目标的Y轴的方向。使用好该设置对于避免万向节锁(gimbal-lock)非常重要
Update MethodVirtualCamera更新位置和旋转的方式
Update Method--Fixed UpdateVirtualCamera的更新与物理模块同步
Update Method--Late Update在MonoBehaviour的LateUpdate中更新
Update Method--Smart Update

每个VirtualCamera根据其目标的更新方式来更新,推荐使用。

注:Smart Update具体是通过UpdateTracker实现的。在一定时间内(UpdateStatus.kWindowSize = 30,即30帧内),通过调用UpdateTracker.OnUpdate(UpdateTracker.UpdateClock),可以计算出VirtualCamera的目标在fixedUpdate移动次数多还是在lateupdate移动的次数多,用来判断下一段时间用fixedUpdate还是lateUpdate。具体可以看UpdateTracker.OnUpdate方法。

Update Method--Manual UpdateVirtualCamera不会自动更新,必须我们手动的调用ManualUpdate()来更新(应该在Camera跟随或看向的目标移动后调用)
Blend Update Method主摄像机混合和更新的时机
Blend Update Method--Fixed Update仅在Update Method使用的是Fixed Update并且在混合时发现剧烈震动时使用
Blend Update Method--Late Update在MonoBehaviour的LateUpdate中出来,推荐使用
Default Blend用于设置两个VirtualCamera混合的方式,除Cut外,其它方式可在后面设置一个混合的持续时间。
Default Blend--Cut瞬切,立马显示下个VirtualCamera的画面
Default Blend--Ease In OutS型曲线,混合开始和结束时比较平滑(慢->匀速->慢)
Default Blend--Ease In混合结束时比较平滑(匀速->慢)
Default Blend--Ease Out混合开始时比较平滑,然后匀速到结束(慢->匀速)
Default Blend--Hard In混合开始时很很慢(从超级慢开始加速)
Default Blend--Hard Out混合结束时很很慢(从较快速度减速到超级慢)
Default Blend--Linear匀速移动
Default Blend--Custom自定义混合曲线
Custom Blends在前面的设置中,设置的是所有的VirtualCamera的混合方式,但是假如当我们的场景中有多个VirtualCamera,并且不同的VirtualCamera之间的混合方式不尽相同的时候,就需要通过该属性来设置不同VirtualCamera之间的混合方式了。会生成一个Asset用来存储数据.

需要注意的是,在From和To中设置的是VirtualCamera的名称,也就是一个字符串,而非是VirtualCamera的引用。我们可以通过设置内置的**ANY CAMERA**来代表任何一个VirtualCamera。

当要执行Blend操作时,首先会从Custom Blends中查找匹配项,若没有,则使用Default Blend的设置。若有多条匹配项,则优先选择最符合要求的。(例如vc1混合到vc2,一项是From:vc1,To:vc2,一项是From:vc1,To:ANY CAMERA,那么前面那项是更符合要求的,会被使用)若有多条最符合要求的,则选择最先找到的那一条。

Camera Cut Event当一个VirtualCamera变为Live状态,并且其混合方式为Cut的情况下触发
Camera Activated Event当一个VirtualCamera变为Live状态时触发,若带有混合,则触发在混合开始的第一帧。

点击创建的Virtual Camera对象,它身上有一个CinemachineVirtualCamera组件,下面对该组件的参数进行详细解释

Status:Live当前控制着Camera(带有CinemachineBrain组件)的VirtualCamera,即处于Live状态。当一个VirtualCamera混合到另一个时,该过程中,两个VirtualCamera都处于Live状态,当混合结束或者其他情况下,同一时刻内只会存在一个Live状态下的VirtualCamera。
Status:Standby  没有控制着Camera的VirtualCamera,即处于Standby状态。该状态下的VirtualCamera还是会一直跟随和看向设置的目标,并且每帧都会更新。该状态下的VirtualCamera属于激活状态(active与enable等于true),并且其 priority 的值小于或等于Live状态的VirtualCamera。 注:2.6.3新增StandbyUpdate设置,可以设置更新频率(详情见下)
Status:Disabled当VirtualCamera属于未激活状态(active或enable等于false),即处于Disable状态。该状态下没有任何的性能消耗,即不会控制Camera,不会跟随目标,不会每帧更新等。不过如果该VirtualCamera参与混合或者被Timeline调用,那么依旧可以控制Camera
Game Window Guides

开启后,会在Game视图中显示一些辅助线(如图1)。这些辅助线会在VirtualCamera看向(Look At)一个指定的GameObject并且Aim设置为ComposerGroup Composer或者跟随(Follow)一个指定的目标并且Body设置为Framing Transposer时出现。调整这些辅助线可以控制相机跟随时的反应区间。

图中的透明区域我们称之为dead zone,蓝色的区域称之为soft zone,红色的区域称之为no pass area,而图中的小黄点就是我们的target。我们可以在Game视图将鼠标放置在每个区域的分割线上,然后按住拖动,来调整每个区域的大小。也可以在Aim中进行更精确的设置,在后续的介绍中会提及到。

dead zone:当我们的target(小黄点)在这个区域时,VirtualCamera不会调整rotation值。适用于忽略target进行一些微小的移动的情况。

soft zone:当我们的target进入到这个区域时,VirtualCamera将会通过调整rotation值,重新把target放回到dead zone。这步操作的快慢,我们可以通过Damping来设置。

no pass area:我们的target永远不会进入到这个区域。

Save During Play

开启后,可以在运行状态下直接保存我们对VirtualCamera设置的修改,而不需要我们通过复制粘贴的方式来记住这些修改了的属性。

当我们停止运行时,会扫描我们修改过的属性进行保存,我们可以使用ctrl+z来回退这些修改。

Cinemachine为我们提供了一个标签 [SaveDuringPlay] ,可以支持上述特征。我们可以将这个标签加在我们的自定义组件中,来实现运行时保存修改。此外若我们组件中有些属性不想保存修改的值,可以在属性前面添加 [NoSaveDuringPlay] 来过滤

Priority

权重,值越大说明优先权越高。例如:一个非Live状态的VirtualCamera,当其Priority值大于等于当前Live状态下VirtualCamera并且自己属于激活状态,那么CinemachineBrain会选择它作为新的Live状态的VirtualCamera。

注:使用Timeline处理VirtualCamera时,该属性不起作用

Follow跟随目标,即VirtualCamera会跟着设置的目标移动而移动。会根据Live状态的VirtualCamera所设置的目标结合Body中的设置来更新Camera的Position。若不设置目标,Camera的Position就会与VirtualCamera同步。例如我们可以用Timeline来给VirtualCamera添加动画,然后Camera也会产生相同效果。
Look At看向目标,即Camera看向的目标(Transform.LookAt)。会根据Live状态的VirtualCamera所设置的目标结合Aim中的设置来更新Camera的Rotation。若不设置目标,Camera的Rotation就会与VirtualCamera同步。
Standby Update设置处于Standby状态的VirtualCamera的更新频率
Standby Update--Always每帧更新
Standby Update--Never不更新
Standby Update--Round Robin偶尔更新,具体更新频率取决于Standby状态的VirtualCamera数量
Lens如下三个设置和Camera中的相同设置所对应,Camera中的值会跟此同步。例如一个带有CinemachineBrain的Camera,当它对应的Live状态的VirtualCamera的FOV值改为77,那么Camera中的FOV值也会相应的变为77。
Lens-Vertical FOV(相机为透视模式下才有)FOV,控制Camera的视窗大小
Lens-Near Clip PlaneCamera最近能看见的距离
Lens-Far Clip PlaneCamera最远能看见的距离
Presets

在Vertical FOV右侧有个小的下拉框,点击Edit Presets可以新建或修改用做预设的Asset文件。Lens Presets Asset文件内容如图2,

Presets可以帮助我们快速的设置FOV等属性

Dutch用于修改Camera中Rotating的z轴值,取值范围 -180~180
Transitions--BlendHint从最开始的例子中可以看见,当一个VirtualCamera混合到另一个VirtualCamera的过程中,Camera会有一个行径的路线,并且伴随着Camera的旋转。该设置可以选择混合到该VirtualCamera或从该VirtualCamera混合到别的时的路线方式。
BlendHint--None坐标和朝向以一种标准的线性混合
BlendHint--SphericalPosition如果两个VirtualCamera有共同的LookAt目标,那么坐标的行径路线会像在圆的面上一样。
BlendHint--CylindricalPosition如果两个VirtualCamera有共同的LookAt目标,那么坐标的行径路线会像在圆柱的面上一样。
BlendHint--ScreenSpaceAimWhenTargetsDifferLookAt目标之间的标准线性位置混合、径向混合
Transitions--Inherit Position开启时,当VirtualCamera状态变为Live时,则会继承上一个Live状态的VirtualCamera的Position信息。
Transitions--On Camera Live回调
BodyBody的设置主要用于指定VirtualCamera的移动规则,主要有如下七大类,
Body--Do nothing不移动VirtualCamera
Body--3rd Person Follow适用于第三人称或第一人称的跟随效果
Body--Framing Transposer根据Follow设置的目标,以固定的屏幕空间关系移动
Body--Hard Lock To Target根据Follow设置的目标,以固定的关系移动
Body--Orbital Transposer根据Follow设置的目标,以可变的关系移动,例如可以选择接收玩家的输入
Body--Tracked Dolly沿着预先设置的路径移动
Body--Transposer根据Follow设置的目标,以固定的关系移动

Body--Binding Mode

该选项主要影响VirtualCamera的偏移(Offset)和阻尼(Damping)的计算方式,有以下几种坐标空间供选择,

注:单独测试跟随效果的时候最好不要设置Look At目标,以防干扰。

Binding Mode--Lock To TargetVirtualCamera相对于Follow目标的模型空间计算偏移,当目标旋转,Camera也会跟着旋转,保持偏移量不变。

Binding Mode--Lock To Target With World Up

与Lock To Target不同的是,该模式下会忽略模型的x和z的转动,只有y轴转动时,Camera才会跟着旋转

Binding Mode--Lock To Target No Roll

与Lock To Target不同的是,该模式下会忽略模型的z的转动,当x或y轴转动时,Camera会跟着旋转
Binding Mode--Lock To Target On Assign测试时感觉和Lock To Target没什么区别,待定。。。
Binding Mode--World SpaceVirtualCamera在世界坐标中相对于Follow目标原点的计算偏移,当目标旋转时,VirtualCamera的位置不会发生变化
Binding Mode--Simple Follow With World UpVirtualCamera在世界坐标中相对于Follow目标在世界坐标中移动的方向的计算偏移和阻尼(不受在Y轴移动影响),例如一开始Camera在目标的世界坐标z轴负方向位置,当目标向世界坐标x轴正方向移动时,Camera会慢慢移动到目标的世界坐标x轴负方向位置。类似于小弟在屁股后面跟着的效果
Body--Damping阻尼,数值越小,Camera响应的越快。当Damping设置为0时,Camera会和目标同步运动,若Damping大于0,Camera的运动会慢于目标。
Damping--X Damping维持offset的x轴值时的阻尼
Damping--Y Damping维持offset的y轴值时的阻尼
Damping--Z Damping维持offset的z轴值时的阻尼
Damping--Pitch Damping当目标沿自身x轴转动时,Camera跟随目标时的阻尼
Damping--Yaw Damping当目标沿自身y轴转动时,Camera跟随目标时的阻尼
Damping--Roll Damping当目标沿自身z轴转动时,Camera跟随目标时的阻尼

Aim

Aim的设置主要用于指定VirtualCamera的旋转规则,主要有如下六大类
Aim--Do nothing不对Virtual Camera做任何旋转
Aim--Composer保持Camera始终看向目标
Aim--Group Composer可以使Camera看向多个目标,如果看向的目标是Cinemachine Target Group,会自动调整Camera的FOV和距离,来确保组里的所有对象都能被看见
Aim--Hard Look At保持Look At的目标始终在屏幕中间,该选项没有额外的设置
Aim--POV通过用户输入来旋转Virtual Camera
Aim--Same As Follow TargetVirtual Camera的Rotation值保持和Follow目标的Rotation值相同(因此使用此模式必须设置Follow目标)。如果我们Body选择的是Hard Lock to Target,那么就可以通过Follow的目标来控制Camera的路径和旋转

Tracked Object Offset

在目标的对象空间中,相对于目标中心点的偏移。

Lookahead Time

基于目标的运动轨迹调整偏移,会估算未来几秒(即我们设置的这个时间)内目标的位置。该特征对噪点动画(noise)非常敏感,会放大噪声导致相机不正常的抖动。若无法接受该抖动,请关闭该属性,或者让目标的运动轨迹更加平滑。

Lookahead Smoothing

平滑值,较大的值可以使抖动预测的更加平滑,但是也会增加预测的延时。

Lookahead Ignore Y

计算时是否忽略Y轴上的移动。

Horizontal/Vertical Damping

水平或垂直的阻尼,这会影响到目标中心从soft zone到dead zone的速度。(有关soft zone和dead zone的信息可以看上面Game Window Guides相关的介绍)若Damping设置为0,则中心点永远不会到soft zone。

Screen X/Y

soft zone和dead zone在屏幕中的位置,使用的是屏幕空间。

Dead Zone Width/Height

调整dead zone的宽度和高度。

Soft Zone Width/Height

调整soft zone的宽度和高度。

Bias X/Y

soft zone相对于dead zone的偏移。

Center On Active

若开启,当VirtualCamera被激活时,强制目标在屏幕的中心点。

Noise

噪点,使用该属性可以利用Virtual Camera模拟Camera抖动的效果。Cinemachine中有一个名为 Basic Multi Channel Perlin 的组件,可以利用Perlin noise来移动Virtual Camera(Perlin noise是一种可以通过自然行为计算随机运动的技术)。

Pivot Offset

当相机因为抖动旋转时,偏移相机中心点的坐标。(2.6.3新增)

Amplitude Gain

振幅,该值会与Profile中设置的Amplitude值相乘,例如设置为1,等于使用Profile中设置的Amplitude。

Amplitude值越大,则抖动的幅度会越大。

Frequency Gain

频率,该值会与Profile中设置的Frequency值相乘,例如设置为1,等于使用Profile中设置的Frequency。

Frequency值越大,则抖动的速度会越快。

图1

图2

Cinemachine鼓励我们多创建VirtualCamera,因为VirtualCamera只会消耗很小的性能。我们可以将除了正在使用的VirtualCamera都关闭,来达到最佳的性能。

也建议一个镜头使用一个VirtualCamera,例如两个角色对话的过场动画,我们可以使用三个VirtualCamera,一个看向两个角色中间,另外两个分别给角色特写,然后利用Timeline来同步声音和VirtualCamera。例如一开始开启着看向屏幕中间的VirtualCamera,当其中一个角色需要单独特写的时候,再开启对应的VirtualCamera,当不需要特写的时候关闭,镜头就又会回到看向屏幕中间的VirtualCamera。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/140459.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

景联文科技语音数据标注:AUTO-AVSR模型和数据助力视听语音识别

ASR、VSR和AV-ASR的性能提高很大程度上归功于更大的模型和训练数据集的使用。 更大的模型具有更多的参数和更强大的表示能力,能够捕获到更多的语言特征和上下文信息,从而提高识别准确性;更大的训练集也能带来更好的性能,更多的数据…

分类预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络数据分类预测

分类预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络数据分类预测 目录 分类预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络数据分类预测…

小型内衣裤洗衣机哪个牌子好?内衣洗衣机测评

随着内衣洗衣机的流行,很多小伙伴在纠结该不该入手一款内衣洗衣机,专门来洗一些贴身衣物,答案是非常有必要的,因为我们现在市面上的大型洗衣机只能做清洁,无法对我们的贴身衣物进行一个高强度的清洁,而小小…

PyQt 问题记录

1.现成的组件不一定线程安全,(包括且不限于数据的修改竞争,和一些组件的崩溃 ) 对于PyQt 的线程使用,可能还需要更谨慎些 保存逻辑 QuestionBox("保存/Save")def Save(self):okFlagFalseerrFlagFalseWriteCmd{}for it in self.Mode…

【C++】415.字符串相加

题目描述: 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 BigInteger),也不能直接将输入的字符串转换为整数形式。 示例1&#x…

除静电感测型离子风棒在无尘车间中的应用

除静电感测型离子风棒是一种能够检测静电并及时释放离子的离子风棒,在无尘车间中应用非常广泛。以下是除静电感测型离子风棒在无尘车间中的应用: 防止静电干扰:在无尘车间中,静电干扰会影响电子元器件和仪器设备的正常工作&#x…

最新Discuz3.5论坛多合一聚合支付接口插件源码/支持支付宝和微信支付功能

最新Discuz3.5论坛多合一聚合支付接口插件源码/支持支付宝和微信支付功能,这个插件直接替换了自带的支付接口功能,增强了支付的扩展性,它挺方便实用的,自带了支持支付宝、微信、QQ 钱包官方支付,以及彩虹易支付、虎皮椒…

基于VCO的OTA稳定性分析的零交叉时差模型研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Ai数字人直播系统SaaS源码大开源,源码独立部署助力中小企业发展!

源码独立部署ai数字人直播系统,如果放在上半年的话没有数百万投资几乎是天方夜谭,连想做个数字人代理商少则投资十万多则数十万才能进得了代理门槛。在此期间,数字人市场一度出现了大批不良企业利用网上下载的视频合成源码二次包装后打着数字…

JVS-rules中的基础与复合变量:规则引擎的心脏

JVS-rules中的“变量”概念与编程语言中的变量类似,但它们通常在规则系统中处理条件判断、业务结果复制场景,如下所示: 条件判断:在规则引擎中,规则通常由两个部分组成:条件和分支。变量用于描述条件部分中…

哪个牌子的护眼灯防蓝光效果好?2023防蓝光护眼灯推荐

可以肯定的是,护眼灯一般可以达到护眼的效果。 看书和写字时,光线应适度,不宜过强或过暗,护眼灯光线较柔和,通常并不刺眼,眼球容易适应,可以防止光线过强或过暗导致的用眼疲劳。如果平时生活中需…

“创新启变 聚焦增长”极狐(GitLab)媒体沟通会,共话智能时代软件开发新生态

10 月 18 日 北京 昨日,全球领先 AI 赋能 DevSecOps 一体化平台极狐(GitLab) 在北京举办了主题为“创新启变 聚焦增长”的媒体沟通会。极狐(GitLab) CEO 柳钢就“中国企业数字化转型、软件研发、技术自主可控等热点问题,以及 AI 大模型时代下&#xff0c…