大家好,又见面了,我是你们的朋友全栈君。
以下都是转载内容,能够比较直观的学习一些基础内容。现在的Cinemachine更新了许多新的功能,但是Cinemachine插件都ExamplesScences,去看一下官方例子和文档来学习更佳
*版本要求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[i] = new CinemachineTargetGroup.Target() { target = targets[i], weight = 1f, radius = 1f };
-
targetGroup.m_Targets = cmTargets; //将创建的列表赋给目标对象组。
-
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
(上面粒子有Bug,是更新2017版本后出现的,不要在意。)
单个目标 和 多个目标之间切换
上图自定义混合变化包含两个虚拟相机的切换,在资源文件中创建(Create/Cinemachine/Blender/Settings),分别是单目标和多目标(其实这里加不加都一样,因为样式和默认的一样)。代码很简单,只要设置虚拟相机是否开启即可。
-
// 多目标转换到单目标
-
cmFollowCameraRig.followVitualCamera.enabled = true; // 激活单个目标虚拟相机组件
-
cmMultiTargetCameraRig.multiVirtualCamera.enabled = false; // 关闭多目标虚拟相机组件
-
// 单目标转换到多目标,与上面相反
-
cmFollowCameraRig.followVitualCamera.enabled = false;
-
cmMultiTargetCameraRig.multiVirtualCamera.enabled = true;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
游戏开始,多目标转换到单目标
主角死掉,单目标转多目标
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140119.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...