Cinemachine初体验

Cinemachine初体验一、安装可以直接从packagemanager里面安装(踩过的坑:导入samples时可能会出现sample和当前使用的unity版本不兼容的情况,更换版本即可)二、cinemachine使用说明场景中需要已存在一个unitycamera,然后在该相机上挂载CinemachineBrain组件(ps:如果不是在timeline中使用虚拟相机的话,这两个属性会决定多个虚拟相机之间切换的方式)或者直接使用cinemachine新建相机,这样会自动在原有的unitycamera上挂载Cinema

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

一、安装

可以直接从package manager里面安装(踩过的坑:导入samples时可能会出现sample和当前使用的unity版本不兼容的情况,更换版本即可)

二、cinemachine使用说明
场景中需要已存在一个unity camera,然后在该相机上挂载CinemachineBrain组件
(ps:如果不是在timeline中使用虚拟相机的话,这两个属性会决定多个虚拟相机之间切换的方式)
在这里插入图片描述

或者直接使用cinemachine新建相机,这样会自动在原有的unity camera上挂载CinemachineBrain组件。步骤:
在这里插入图片描述

在timeline中能够用到的是红框中的两种相机。

1、Visual Camera:

在这里插入图片描述

(ps:如果不使用timeline,priority属性高的虚拟相机会被优先启用,所以在调整相机视角时需要点击solo按钮激活当前要调整的虚拟相机)

Follow属性和body属性(follow是指相机要跟随的物体,body里选择虚拟相机跟随物体的跟随算法):
在这里插入图片描述

LookAt属性和Aim属性(类似follow和body):
在这里插入图片描述

Lens Vertical FOV:和普通unity相机一样

Noise:相机抖动的算法

总结:可以创建多个Visual Camera,调好参数以后在timeline中对相机进行融合即可

2、Dolly Camera with Track:新建一个这种相机,会生成一个虚拟相机和一条路径,运行时相机会在这条路径上移动。

在这里插入图片描述

在这里插入图片描述
勾选enabled,这样就会在相机要跟随的物体移动的时候,相机自动在路径上移动。(如果相机跟随的物体不动的话,相机是不会动的)
在这里插入图片描述

路径的设置方法:可以在场景中选中路径点调整,也可以在inspector里直接调整参数

三、cinemachine和timeline
先打开一个timeline窗口(一定要从当前场景的物体上创建或者打开timeline窗口,不然无法将虚拟相机拖到track上。因为timeline有asset和实例的概念,从场景中打开那么打开的就是一个timeline的实例,而要是选中timeline asset打开,那么打开的就只是一个asset,不会建立起和当前场景的关联),然后将带有CinemachineBrain的相机拖到timeline窗口的左侧区域中,并添加cinemachine track:
在这里插入图片描述

在这里插入图片描述

然后将设置好参数的虚拟相机拖到timeline轨道上:

以第一种方式切换相机时,相机是以过渡的方式切换的;以第二种方式切换相机时,相机是直接切换的(踩过的坑:以第二种方式切换相机时,可能会因为HDRP管线的bug导致场景闪白)。

可以将前后两个clip重叠1帧来解决这个问题;目前测试了两个修改volumeprofile的方法也可行:
一、对于有Fog的,关闭Fog在这里插入图片描述
二、把Exposure调成auto
在这里插入图片描述
以上,大概就是在timeline创建cinemachine的过程。
但是这样的问题就是这个timeline绑定到了场景中的某个物体上。如果项目里有一个timelinemanager这样的东西,就希望timeline是动态加载的。那么先可以先按照上面制作完一个timeline asset,然后在代码中进行绑定操作。

绑定操作可以参考:
timeline的动态绑定
cinemachine的动态绑定

在第二篇文章中博主说有两种绑法
在这里插入图片描述
在第二种绑法中用到了 PlayableDirector.playableGraph.GetResolver() API。这里要注意playableGraph是只有在PlayableDirector处于播放状态时才会存在(参见unity 论坛
在这里插入图片描述
第二种方法的SetResolver没找到太多相关资料,赋值一直不起作用。
看到这个,还没试

推荐第一种方法,能少踩几个坑

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 第一范式、第二范式、第三范式[通俗易懂]

    第一范式、第二范式、第三范式[通俗易懂]范式:英文名称是NormalForm,它是英国人E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中

    2022年7月2日
    19
  • [已解决]踩过的坑之mysql连接报“Communications link failure”错误

    [已解决]踩过的坑之mysql连接报“Communications link failure”错误目录前言第一种方法:第二种方法第三种方法(适用于项目和数据库在同一台服务器)第四种方法第五种方法(项目和数据库不在同一台服务器)总结前言先给大家简述一下我的坑吧,(我用的是mysql,至于oracle有没有这样的问题,有心的小伙伴们可以测试一下哈),在自己做个javaweb测试项目的时候,因为买的是云服务器,所以数据库连接的是用ip地址,用IDE开发好…

    2022年5月18日
    56
  • qtcpsocket多线程_qtcpsocket接收数据

    qtcpsocket多线程_qtcpsocket接收数据简述最近在写有关网络传输的项目,使用了Qt封装的QTcpSocket,但是发现很多的跨线程导致死机的问题,也许是我了解的不够深入吧。最开始是自己继承一个线程然后把套接字传递到线程使用遇到程序崩溃;否决后使用了QObject::moveToThread()的方式,虽然程序可以正常发送接收数据但是对于QTcpSocket(moveToThread后属于子线程)与主线程的交互并不是很友好,还是存在一些问题;最后是考虑到了QTcpSocket跨线程崩溃说明它本身内置了一些发送或者接收的线程,这样…

    2025年10月14日
    2
  • MacPorts安装卡住不动,解决方法[通俗易懂]

    MacPorts安装卡住不动,解决方法[通俗易懂]MacPorts安装卡住不动,解决方法就是开vpn;保持全局翻墙状态

    2022年9月21日
    3
  • js获取当前域名

    js获取当前域名

    2021年10月28日
    50
  • Python报错:pandas.errors.ParserError: Error tokenizing data. C error: Expected 3……

    Python报错:pandas.errors.ParserError: Error tokenizing data. C error: Expected 3……报错信息用Python做数据处理时,报如下错误:pandas.errors.ParserError:Errortokenizingdata.Cerror:Expected3fieldsinline28,saw4错误原因首先我们先看一下报错:pandas.errors.ParserError:Errortokenizingdata.Ce…

    2022年6月30日
    94

发表回复

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

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