找回密码
 立即注册
查看: 706|回复: 0

lwj_unity_插件Cinemachine

[复制链接]
发表于 2020-12-1 15:08 | 显示全部楼层 |阅读模式
Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换

*版本要求Unity2017.1及以上。
参考资料:  [官方] Unity 2017.1正式版发布
Cinemachine插件:Cinemachine。
结合Timeline实现动画:Unity Cinemachine插件学习笔记,结合Timeline实现简单场景动画
官网教程:Timeline and Cinemachine (Cameras)
  Cinemachine在2017版中正式加入,结合Timeline可以轻松的制作出一下相机动画。相比Unity自带的标准相机,这个新相机插件可操作的变量更多,不同虚拟相机(用来控制相机的)可以平滑转换等,具体可见上方第一个链接。
Cinemachine





选项名说明Virtual Camera普通虚拟相机。最常用的相机设备。其实下面的都是虚拟相机。FreeLook Camera自由查看相机。可以保证镜头内出现头和身体,及相机的活动范围在目标周围圆柱(曲面的)表面,常用于第三人称视角。State-driven Camera状态驱动相机。添加虚拟相机列表,可以在不同的相机直接直接实现平滑切换,同时其子相机列表如果没有设置LookAt对象等,会直接使用这个父相机的对象。ClearShot Camera干净镜头相机。类似上一个相机,区别在于这个相机可以通过判断子相机的CinemachineCollider(如果有),看是否相机被场景物体阻碍,切换相机。具体可看其源码注释。Dolly Camera with Track可推拉的轨道相机。通过结合轨道路径,就可以模拟像拍电影般镜头轨道移动。Group Target Camera多目标相机。可以同时设置多个目标。
Cinemachine Brain

  相机的脑子,只有这个组件要添加到Camera上,才能实现任何虚拟相机的效果。




变量名说明Live Camera当前选择的虚拟相机。Live Blend当前的镜头转换名称。Show Debug Text在游戏画面左上角显示调试信息。Show Camera Frustum显示相机的视锥体,相比原来自带的边框,这个会裁切掉不在显示范围内的边线。World Up Override重载世界的向上方向(y轴),虚拟相机是通过这个来判断世界环境。Default Blend默认相机切换模式。Custom Blends自定义相机切换模式。Camera Cut Event相机立即切换时事件。Camera Activated Event相机混合(就是有切换变化,不是Cut时)切换时第一帧事件。
Cinemacine Virtual Camera





变量名说明Status : Live/Standby/Disable当前这个虚拟相机的状态。Live为正在使用,Standby为准备使用(没在用,但如果上一级停用了,可能会切换到当前虚拟相机),Disable为不能用。按Solo按钮会让相机切换到这个虚拟相机(包括Disable)。Priority虚拟相机的优先级,如果同时有多个虚拟相机,使用优先级最高的。如果多个同等级的,应该是按Hierarchy顺序找到第一个虚拟相机。Look At相机的视角目标。Follow相机的跟随目标。Lens镜头常用配置。视角区域,最近最远裁切平面, 镜头旋转角度。Aim瞄准设置,有三种:Hard constraint,固定距离,没有任何平滑效果。Composer,有平滑效果的瞄准目标。Group Composer,同时瞄准多个目标。Body相机本身。四种:Hard constraint,固定距离,相当于第一人称。 Orbital Transposer:轨迹转换器?似乎是模拟第三人称。 Tracked Dolly,轨道推拉,相机只能在轨道上移动(即使设置了Follow对象),需要轨道路径CinemachinePath。 Transposer,普通的镜头转换。Noise噪声。可以模拟相机手持抖动效果。


如上图配置,虚拟相机会找到带脑子的相机并控制他的位置角度,游戏画面中,黄点是目前目标坦克的位置(设置了z轴偏移量5,所以实际位置在坦克向前5个单位)。最里面黄色区域(Dead Zone)为黄点自由移动区域,在这个范围内 目标移动了并不会改变相机位置。第二层绿色区域(Soft Zone)为目标允许在的范围,不过随时间推移最后会限制在最里层。最外层红色区域为目标不允许停留范围,及坦克一旦脱离绿色以外的区域,会立即移动相机来保持目标不离开镜头范围。
单个目标



实际运行时,是使用Hard constraint。因为主角旋转幅度大,镜头变化大,使用Transposer的自由范围会产生不适。
多个目标





变量名说明Position Mode位置模式。Group Center,所有目标的中心(长方体中心)。 Group Average,所有目标位置和权重的平均值。Rotation Mode旋转模式。Manual,手动,就是根据虚拟相机身体设置。Group Average,所有目标旋转平均值。
因为目标不是简单的Transform,而是包含权重和半径的。所以在使用代码添加时,需要创建其结构体:CinemachineTargetGroup.Target。是在类内嵌的结构体,具体可见其源码。下面用代码实现添加对象组。
   public void SetTargets(params Transform[] targets)
    {
        if (targets.Length <= 0)
            return;
        CinemachineTargetGroup.Target[] cmTargets = new CinemachineTargetGroup.Target[targets.Length];
        for (int i = 0; i < targets.Length; i++)
            cmTargets = new CinemachineTargetGroup.Target() { target = targets, weight = 1f, radius = 1f };
        targetGroup.m_Targets = cmTargets;  //将创建的列表赋给目标对象组。
    }
    12345678910




(上面粒子有Bug,是更新2017版本后出现的,不要在意。)
单个目标 和 多个目标之间切换



上图自定义混合变化包含两个虚拟相机的切换,在资源文件中创建(Create/Cinemachine/Blender/Settings),分别是单目标和多目标(其实这里加不加都一样,因为样式和默认的一样)。代码很简单,只要设置虚拟相机是否开启即可。
   // 多目标转换到单目标
    cmFollowCameraRig.followVitualCamera.enabled = true;            // 激活单个目标虚拟相机组件
    cmMultiTargetCameraRig.multiVirtualCamera.enabled = false;      // 关闭多目标虚拟相机组件

    // 单目标转换到多目标,与上面相反
    cmFollowCameraRig.followVitualCamera.enabled = false;
    cmMultiTargetCameraRig.multiVirtualCamera.enabled = true;   
    1234567


游戏开始,多目标转换到单目标





主角死掉,单目标转多目标



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-12-22 14:58 , Processed in 0.109358 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表