Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换

2023-11-18

Cinemachine在2017版中正式加入,结合Timeline可以轻松的制作出一下相机动画。相比Unity自带的标准相机,这个Cinemachine插件可操作的变量更多,不同虚拟相机(用来控制相机的)可以平滑转换等,具体可以参考上篇《Unity Cinemachine插件学习笔记,结合Timeline实现简单场景动画》。

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[i] = new CinemachineTargetGroup.Target() { target = targets[i], weight = 1f, radius = 1f };
        targetGroup.m_Targets = cmTargets;  //将创建的列表赋给目标对象组。
    }

 
(上面粒子有Bug,是更新2017版本后出现的,不要在意。)

单个目标 和 多个目标之间切换

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

    // 多目标转换到单目标
    cmFollowCameraRig.followVitualCamera.enabled = true;            // 激活单个目标虚拟相机组件
    cmMultiTargetCameraRig.multiVirtualCamera.enabled = false;      // 关闭多目标虚拟相机组件
    // 单目标转换到多目标,与上面相反
    cmFollowCameraRig.followVitualCamera.enabled = false;
    cmMultiTargetCameraRig.multiVirtualCamera.enabled = true;   

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

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

 

转自:https://gameinstitute.qq.com/community/detail/121084

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换 的相关文章

  • Unity3D之MonoBehaviour

    Unity3D中的MonoBehaviour是一种基于组件的编程架构 用于开发游戏和应用程序 它是Unity引擎中用于创建行为的基类之一 并且可以让你通过重写其方法来定义对象在游戏运行时的行为 首先 在Unity中创建一个游戏对象并向其添加
  • VS2017调试unity没有解决方案

    1 VS2017之前的版本调试unity 需要下载 Visual Studio Tools for Unity 2 VS2017内置了Visual Studio Tools for Unity 3 首先打开 帮助 gt 关于 已安装程序中查
  • Unity3D方向键控制人物移动的代码

    代码 var v Input GetAxis Vertical var h Input GetAxis Horizontal transform Translate transform forward Time deltaTime move
  • unity中通过touch旋转、放大和缩小物体以及滑动方向的判断

    unity中通过touch旋转 放大和缩小物体以及滑动方向的判断这个需求在游戏开发中也是非常频繁 话不多说直接上代码 using System Collections using System Collections Generic usi
  • Unity的Text Mesh Pro文字显示重叠处理

    在使用Text Mesh Pro的时候 出现文字重叠 如图 在编辑器内显示是正确的 最后发现是换行造成的 原本的文字是从pdf中复制过来 就会重叠 在记事本中删除换行用回车再次换行就能正确显示
  • Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换

    Cinemachine在2017版中正式加入 结合Timeline可以轻松的制作出一下相机动画 相比Unity自带的标准相机 这个Cinemachine插件可操作的变量更多 不同虚拟相机 用来控制相机的 可以平滑转换等 具体可以参考上篇 U
  • 离散仿真引擎基础作业与练习

    作业内容 一 简答题 1 解释 GameObjects 和 Assets 的区别与联系 2 下载几个游戏案例 分别总结资源 对象组织的结构 3 使用 debug 验证 MonoBehaviour 基本行为或事件触发条件 4 了解 GameO
  • unity3d实现简单的打飞碟游戏

    游戏内容 游戏有n个round 每个round发射10次trial 每个trial的飞碟都可能不同 包括速度角度得分等 使用鼠标进行射击 点中即表示射击成功 游戏要求 使用带缓存的工厂模式来管理飞碟的生产与再利用 工厂使用单例模式 游戏的设
  • Unity编辑器界面概述

    了解界面 如果您对编辑器界面没有非常地了解 那么请花一些时间查看并熟悉 Editor 编辑器 界面 Editor 主窗口由选项卡式窗口组成 这些窗口可重新排列 因此 Editor 的外观可能因项目或者开发者而异 具体取决于个人偏好 Wind
  • HLSL 偏导数 ddx / ddy

    HLSL ddx ddy 在光栅化的时刻 GPUs会在同一时刻并行运行很多Fragment Shader 但是并不是一个pixel一个pixel去执行的 而是将其组织在2x2的一组pixels分块中 去并行执行 偏导数就正好是计算的这一块像
  • Unity笔记:修改代码执行的默认打开方式

    使用 External Tools 偏好设置可设置用于编写脚本 处理图像和进行源代码控制的外部应用程序 External Script Editor 选择 Unity 应使用哪个应用程序来打开脚本文件 Unity 会自动将正确的参数传递给内
  • JPush极光推送Unity插件iOS设备无法获取DeviceToken

    前言 最近在使用JPush进行极光推送 Unity插件GitHub地址https github com jpush jpush unity3d plugin 问题描述 但是发现了一个问题 按照官方文档操作 最终仍然无法获取DeviceTok
  • unity本地分数排行榜简单解决方案(Json)

    具体效果 大体方法 创建一个分数类Score和一个分数类的容器List
  • Unity动画系统详解5:BlendTree混合树是什么?

    摘要 Animator中有一个功能 用来解决多个动画之间的混合 经常用于移动动画之间的混合 这个功能叫做BlendTree 混合树 洪流学堂 让你快人几步 你好 我是跟着大智学Unity的萌新 我叫小新 这几周一起来复 yu 习 xi 动画
  • Unity里清除Console控制台Log的函数

    Log输出部分转发来自 http blog sina com cn s blog 13c4bf4b40102wz0r html 在控制台输出中 是开发者常用到的一种函数 通过Debug类来实现 打印字符串 Debug Log log 如果有
  • unity粒子特效附上贴图后播放动画

    转自 http jingyan baidu com article f96699bbb1a0d6894f3c1b77 html 参考 http www unitymanual com thread 2993 1 1 html dsign a
  • Unity3D 官方文档 平台特殊化之Standalone和多显示器的处理

    版本 unity 5 6 语言 C 总起 Standalone 我一眼看下去的理解就是PC机平台 官方文档中说该平台指的是Mac Windows和Linux 这篇文章主要讲的是Standalone平台下的设置 通过点击菜单栏的File gt
  • Unity3D如何修改Button显示的文字以及深入了解Button组件

    在创建了一个Button后 结构如图 先仔细观察一下Button的Inspector视图 发现其中竟然有一个叫Button的脚本组件 新建脚本 代码如下 并将该脚本绑定给Canvas组件 using UnityEngine UI using
  • [3dsMax]2018版下拉菜单项的子菜单无法选中

    软件自身问题 安装更新补丁即可解决 不想更新补丁也可以使用键盘的方向键进行选中 补丁百度云链接 https pan baidu com s 1LDxRFwQnR0GSONuz7wcEfA 提取码 6gpk
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制

随机推荐

  • Android 组件逻辑漏洞漫谈

    前言 随着社会越来越重视安全性 各种防御性编程或者漏洞缓解措施逐渐被加到了操作系统中 比如代码签名 指针签名 地址随机化 隔离堆等等 许多常见的内存破坏漏洞在这些缓解措施之下往往很难进行稳定的利用 因此 攻击者们的目光也逐渐更多地投入到逻辑
  • QT4信号连接与QT5的区别

    QT4信号连接与QT5的区别 QT4信号与槽 1 申明槽函数必须增加public slots 2 SIGNAL SLOT 将函数转为字符串 不进行错误检查 connect中信号和槽需要增加SIGNAL 和SLOT 3 槽函数和信号一致 参数
  • 常用的表格正则验证 + 省份选择 JS JQ

    常用的表格正则验证 轮子 let receiverNameReg u4e00 u9fa5 2 6 reg 收货人姓名 let receiverName receiverName val 收货人姓名 let phoneNumberReg d
  • TCP的几个状态 SYN, FIN, ACK, PSH, RST, URG

    2019独角兽企业重金招聘Python工程师标准 gt gt gt TCP的几个状态对于我们分析所起的作用 在TCP层 有个FLAGS字段 这个字段有以下几个标识 SYN FIN ACK PSH RST URG 其中 对于我们日常的分析有用
  • 数据挖掘技术-绘制散点图

    绘制散点图 前置步骤 准备数据guomin npz 下载数据guomin npz到Linux本地的 course DataAnalyze data目录 绘制散点图 绘制2000 2017年各季度的国民生产总值散点图 如代码 41所示 代码
  • 【华为OD机试真题 JAVA】执行时长

    JS版 华为OD机试真题 JS 执行时长 标题 执行时长 时间限制 1秒 内存限制 262144K 语言限制 不限 为了充分发挥GPU算力 需要尽可能多的将任务交给GPU执行 现在有一个任务数组 数组元素表示在这1秒内新增的任务个数且每秒都
  • Python脚本报错AttributeError: ‘module’ object has no attribute’xxx’解决方法

    最近在编写Python脚本过程中遇到一个问题比较奇怪 Python脚本完全正常没问题 但执行总报错 AttributeError module object has no attribute xxx 这其实是 pyc文件存在问题 问题定位
  • #C++矩阵类的实现

    C 矩阵类的实现 环境 Win10 VS2017 最近老师布置一个简单的C 作业 实现一个矩阵类 并且实现矩阵运算 主要实现运算为矩阵的加 减 乘 除以及求行列式 伴随矩阵 代数余子式和逆矩阵等 在参考网上的一些前辈的代码后 写出了这些运算
  • 信号与系统复习题

    选择题 2分 题 1 频谱与时域的关系 时域压缩 频域展宽 时域有限 频域无限 2 填空题 20分 2分 空 1 冲击信号的性质 抽样性 尺度变换性 奇偶性 2 线性时不变的概念 线性 齐次性 输入夸大多少倍 输出扩大多少倍 可加性 相应的
  • HFP协议

    通话专题HFP协议学习总结 一 配置和角色 二 HFP的连接 2 1服务级连接建立 2 1 1 服务发现和RFCOMM的连接 2 1 2 支持的特性交换 2 1 3 codec协商 2 1 4 HF指示器 2 1 5 AG指示器 2 1 6
  • ctfshow 文件上传 web151~170

    目录 web151 web 152 web 153 web 154 web 155 web 156 web 157 159 web 160 web 161 web 162 163 web 164 web 165 web 166 web 16
  • STM32F030C8T6 多通道ADC采集

    void adc init void ADC InitTypeDef ADC InitStructure GPIO InitTypeDef GPIO InitStructure RCC ADCCLKConfig RCC ADCCLK PCL
  • 动态规划算法解决背包问题(Java实现)

    文章收藏的好句子 你在书本上花的任何时间 都会在某一个时刻给你回报 目录 1 动态规划算法的概述 2 背包问题 3 动态规划算法解决背包问题 3 1 不可重复装入商品 3 2 思路分析 1 动态规划算法的概述 1 动态规划算法的思想是 将大
  • Python psycopg2使用SimpleConnectionPool数据库连接池以及execute_batch批量插入数据

    有关快速插入大量数据到数据库的一个比较好的博文如下 Fastest Way to Load Data Into PostgreSQL Using Python 其中文末还有提到几种不同方式的对比 效率十分的震撼 可以看看 1 连接池和批量插
  • MYSQL 安装

    MySQL8安装Installer 图文教程 编程宝库 Windows10 MySQL Installer 安装 编程宝库
  • shell提取字符串中的数字保存到变量中

    1 提取数字到变量 temp echo helloworld20180719 tr cd 0 9 echo temp 输出 20180719 2 重定向到文件 echo helloworld20180719 tr cd 0 9 gt mid
  • 【数据结构与算法】--排序

    目录 一 排序的概念及其运用 二 常见的排序算法 2 2选择排序 2 3 交换排序 2 3 4 1 快速排序优化 一 排序的概念及其运用 1 1 排序的概念 排序 所谓排序 就是使一串记录 按照其中的某个或某些关键字的大小 递增或递减的排列
  • [OpenAirInterface实战-14] :OAI nFAPI VNF/PNV持续集成测试的xml配置文件详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 120850348 目录 1 nFAPI
  • 23种设计模式之装饰模式

    装饰模式 一个简陋的房子 它可以让人在里面居住 为人遮风避雨 但如果给它进行装修 那么它的居住环境就更加宜人了 程序中的对象也与房子十分类似 首先有一个相当于 房子 的对象 然后经过不断装饰 不断对其增加功能 它就变成了使用功能更加强大的对
  • Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换

    Cinemachine在2017版中正式加入 结合Timeline可以轻松的制作出一下相机动画 相比Unity自带的标准相机 这个Cinemachine插件可操作的变量更多 不同虚拟相机 用来控制相机的 可以平滑转换等 具体可以参考上篇 U