Cinemachine(三)自动选择/切换最适合的摄像头(Cinemachine Clear Shot Camera)「建议收藏」

Cinemachine(三)自动选择/切换最适合的摄像头(Cinemachine Clear Shot Camera)「建议收藏」在很多的解谜类游戏中,

大家好,又见面了,我是你们的朋友全栈君。

前言

在很多的解谜类游戏中,场景中往往会有很多密室,玩家需要在不同的房间中来回穿梭,除了第三人称摄像头外,我们也可以通过在不同的房间中布置不同的Camera,然后当角色到达指定房间后开启对应的Camera来处理。类似的效果如下图:

Cinemachine(三)自动选择/切换最适合的摄像头(Cinemachine Clear Shot Camera)「建议收藏」

从Gif中可以看出,当我们的角色到达不同的房间时,我们的Camera会自动实现切换来观察我们的角色。在以往,我们可能需要自己来写一些触发器来判断角色到了哪个房间,然后开启指定的Camera。但是有了Cinemachine后,我们就不需要那么麻烦的敲代码了,同样只需简单的进行一些配置,Cinemachine就会替我们自动实现上述的功能。

在该案例中,我们需要使用到Cinemachine的Clear Shot功能,接下来就先让我们来了解下Clear Shot。

Demo:https://github.com/luckyWjr/Demo Cinemachine文件夹下的DemoClearShot

 

Clear Shot

介绍

Clear Shot Camera属于一种管理类的Camera,在其根目录下会有一个或多个VirtualCamera,ClearShot会从中选择出针对被观察目标的最好画面质量的VirtualCamera。因此当场景中有很多Camera的时候使用该功能,可以保证我们的画面都可以清楚的看见我们的目标。

至于如何鉴别哪个VirtualCamera的画面质量更好,就需要用到我们上一篇文章所提到的Cinemachine Collider。它会分析画面中的障碍物得到ShotQuality的数值,以及根据我们设置的optimal target distance的数值等作参考,根据这些信息选出最好的作为当前Live状态的VirtualCamera。如果这些数值相同,那么会根据每个VirtualCamera在ClearShot中所设置的优先级(priority)来选择。

因此ClearShot下的每个VirtualCamera都必须带有Cinemachine Collider的组件,不过我们也可以通过给ClearShot Camera自身添加Cinemachine Collider来代替,这样就不需要给各个VirtualCamera添加了。

此外,我们依旧可以给ClearShot中每个VirtualCamera制定他们间的混合效果。

 

创建方法

在Unity工具栏中,选择Cinemachine->Create ClearShot Camera,可以创建我们的ClearShot Camera:

Cinemachine(三)自动选择/切换最适合的摄像头(Cinemachine Clear Shot Camera)「建议收藏」

创建好后场景中会生成一个CM ClearShot,同时在其根目录下会默认生成一个VirtualCamera:

Cinemachine(三)自动选择/切换最适合的摄像头(Cinemachine Clear Shot Camera)「建议收藏」

我们可以在ClearShot下继续添加VirtualCamera,在CinemachineClearShot组件中会自动识别它们,同时可以在此处设置每个VirtualCamera的优先级,值越大,优先级越高。

Cinemachine(三)自动选择/切换最适合的摄像头(Cinemachine Clear Shot Camera)「建议收藏」

这里会有一个黄色小警告的标准,在组件最上面同时也给出了对应的提示:

Cinemachine(三)自动选择/切换最适合的摄像头(Cinemachine Clear Shot Camera)「建议收藏」

这个问题就是我们前面所提到的,必须要需要给ClearShot或者ClearShot所包含的所有VirtualCamera添加Cinemachine Collider。

 

属性

由于ClearShot本身也是继承于CinemachineVirtualCameraBase,因此其属性基本与VirtualCamera相似,如下图:

Cinemachine(三)自动选择/切换最适合的摄像头(Cinemachine Clear Shot Camera)「建议收藏」

这里就不过多的介绍了,可以查看本系列的第一篇文章

需要注意的是,ClearShot的Look At和Follow属性。若VirtualCamera自身设置了这两个属性,那么就会使用VirtualCamera自身设置的值。若VirtualCamera没有设置,则使用ClearShot设置的值。

 

应用

我们首先创建一个简单的场景用来测试,然后添加一个胶囊体来当作我们的角色,同时给角色设置一个不同的Layer与我们的墙体作区分,例如本案例中的样子:

Cinemachine(三)自动选择/切换最适合的摄像头(Cinemachine Clear Shot Camera)「建议收藏」

然后我们添加一个ClearShot Camera,默认的VirtualCamera就可以看向我们角色当前的位置。然后在ClearShot下添加一些新的VirtualCamera,分别放置在各个房间中,看向属于自己的房间。由于ClearShot的工作原理是根据障碍物而计算的画面质量来选择当前的VirtualCamera。因此我们要尽量保证每个房间的VirtualCamera在转动过程中视线不会看见别的房间。例如我们角色从房间A跑到房间B的时候,此时房间A的相机还是能很清楚的看见在房间B的角色,那么ClearShot就不会启动房间B的VirtualCamera了。测试的时候我们可以把墙弄得高一点。

注:我们可以先在Scene窗口中调整好视角,然后再创建VirtualCamera,这样VirtualCamera的画面就会和我们当前Scene窗口中的画面一致。或者先创建好VirtualCamera,然后调整好Scene窗口的视角,接着选中我们的VirtualCamera,点击工具栏中的GameObject->Align With View来调整我们的相机位置。

接着,我们来配置我们的ClearShot。我们先为其添加CinemachineCollider,并且删除子VirtualCamera带有的CinemachineCollider组件。同时将ClearShot的Look At设置为我们的角色,先不要设置Follow属性,否则这些VirtualCamera都会跟着角色移动而脱离原本我们摆放的位置。

若想要每个房间内的Camera可以跟着角色移动,但是又不跟着跑到别的房间,我们可以给每个VirtualCamera添加CinemachineConfiner组件来处理。CinemachineConfiner可以给VirtualCamera添加一个活动范围,是Camera只能在这个范围内移动,具体的后续介绍。

上述步骤做好后,我们就可以移动我们的角色来观察相机的切换效果了,具体效果就像文章最开始的Gif类似。

 

Optimal Target Distance

从上一篇CinemachineCollider提到这个属性,到这一篇也提到了。那么这个属性到底有什么用呢?

我们先来看下面这种情况:

Cinemachine(三)自动选择/切换最适合的摄像头(Cinemachine Clear Shot Camera)「建议收藏」

我们的角色从房间A到了房间B,但是由于此时房间A的相机仍然可以很清晰的看见我们的角色,因此导致房间B的相机无法被启动。那么如何可以在这种情况下,启动我们房间B的相机呢?此时就可以运用到我们的Optimal Target Distance属性了。

前面介绍该属性的时候,说到当目标到Camera的距离越接近我们设置的值,则评分越高。这个评分就会影响到我们ClearShot的选择。上面例子中,当角色进入房间B时,此刻它距离房间B的Camera明显是更近的,假设此时距离为3。那么我们将Optimal Target Distance的值设置为3,在来看看情况,就会发现当角色房间B时,虽然两个Camera都可以很清楚的看见角色,但是房间B的Camera到角色的距离与3更接近,所以就会启用房间B的Camera。效果图如下:

Cinemachine(三)自动选择/切换最适合的摄像头(Cinemachine Clear Shot Camera)「建议收藏」

不过由于开启Optimal Target Distance功能会造成一定的性能压力,我们可以使用Priority来更好的解决这个问题。

 

Priority

上述情况除了可以通过设置Optimal Target Distance来解决外,我们还可以通过设置ClearShot中不同VirtualCamera的Priority属性来解决。

同样的道理,当房间A和房间B的Camera都可以清晰的看见角色时,也就是ShotQuality的值相同的情况下ClearShot会优先选择Priority值更高的那个VirtualCamera。因此我们只需要将房间B的VirtualCamera的Priority值设置的比房间A的高,就可以实现上述情况,角色进入房间B时,启用房间B的Camera了。

 

总结

Clear Shot可以帮助我们在多个Camera中选择效果最好的Camera来显示。但是由于即使没有使用到的VirtualCamera,也是会一直看向我们的目标,并且计算着ShotQuality,因此肯定会有一定的消耗。若在复杂场景中,且Clear Shot下有多个VirtualCamera,必然会造成一定的性能压力,因此需要看情况使用。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140382.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月8日 下午12:40
下一篇 2022年5月8日 下午1:00


相关推荐

  • 中缀表达式转换成前缀表达式和后缀表达式的极其简单方法

    中缀表达式转换成前缀表达式和后缀表达式的极其简单方法35 15 80 70 20 后缀表达方式 35 15 80 70 20 25 中缀表达方式 35 15 80 70 20 前缀表达方式人的思维方式很容易固定 正如习惯了 10 进制 就对 2 3 4 8 16 等进制不知所措一样 人们习

    2026年3月19日
    3
  • 使用PageOffice实现文档(word,excel,pdf)在线预览编辑[通俗易懂]

    使用PageOffice实现文档(word,excel,pdf)在线预览编辑[通俗易懂]最近发现一款不错的插件的PageOffice,地址是:http://www.zhuozhengsoft.com/Technical/他可以实现word,excel、pdf在线预览以及在线编辑。虽然商用的话需要收费,但是有免费的试用版,在实现自己毕业设计或是做样品的时候是一个不错的选择。他同时支持java\c#\php.一旦有了正真的项目花钱再买也可以。同时自己也可以熟悉如何使用。接着下面实现

    2022年5月3日
    134
  • 语雀—好用的文档编写、知识沉淀的工具

    发现一个好用的文档编写、知识沉淀的工具——语雀。语雀—好用的文档编写、知识沉淀的工具简单介绍「语雀」是一个「专业的云端知识库」,孵化自 蚂蚁金服,是 体验科技]理念下的一款创新产品,已是 10 万阿里员工进行文档编写、知识沉淀的标配。语雀诞生伊始,只是希望能给工程师提供一个好用的工具用来写技术文档,达成「用 Markdown 写文档」这个小目标。但在产品研发的过程中,我们发现其实身边的…

    2022年2月28日
    81
  • echart旭日图_海报级设计感的旭日图,就在 ECharts 4.0

    echart旭日图_海报级设计感的旭日图,就在 ECharts 4.02018年1月16日ECharts发布了4.0,其中包括一种新的图表系列——旭日图。普通旭日图:文艺旭日图:2B旭日图——这货真的长得像个旭日啊щ(゚Д゚щ):可能大家印象中的旭日图就只能做到上面“普通旭日图”的样子了,很难想象这么有设计感的作品,居然可以是通过配置项写出来的吧?(羡婆卖瓜~)因为这可是ECharts家的旭日图呀!除了颜值之外,我们还提供了丰富的功能使得旭…

    2026年4月13日
    4
  • 五大常用算法总结_常用的基本算法有

    五大常用算法总结_常用的基本算法有引言据说有人归纳了计算机的五大常用算法,它们是贪婪算法,动态规划算法,分治算法,回溯算法以及分支限界算法。虽然不知道为何要将这五个算法归为最常用的算法,但是毫无疑问,这五个算法是有很多应用场景的,最优化问题大多可以利用这些算法解决。算法的本质就是解决问题。当数据量比较小时,其实根本就不需要什么算法,写一些for循环完全就可以很快速的搞定了,但是当数据量比较大,场景比较复杂的时候,编写for循环

    2025年6月3日
    4
  • GPT-5.4深夜发布,最适合OpenClaw的天选模型登场了。

    GPT-5.4深夜发布,最适合OpenClaw的天选模型登场了。

    2026年3月14日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号