首页 > 其他分享 >Unity--Cinemachine官方实例详解

Unity--Cinemachine官方实例详解

时间:2022-11-29 20:39:42浏览次数:46  
标签:Camera -- 物体 相机 Unity 虚拟 设置 Cinemachine


1.2D Camera

搭建一个快速场景,MainCamera选择Orthographic。在Cinemachine下有Create 2D Camera,在生成的相机中设置follow,同时注意body的设置,如下图所示

Unity--Cinemachine官方实例详解_Cinemachine

在虚拟相机中还需要添加Cinemachine confiner组件,点击下图中的Add Extension,在弹出的下拉列表中,选择Cinemachine Confiner。用来后处理虚拟相机的位置,限定虚拟相机位置到特定的范围内。

Unity--Cinemachine官方实例详解_ide_02

为我们的虚拟相机添加一个边界的碰撞形状。目前的碰撞只支持PloygonCollider。给一个2D物体添加一个PloygonCollider,拖入即可。

2.Blendlist Camera

在Cinemachine下有Create BlendList Camera,在BlendList Camera下默认有两个虚拟相机。其实你还可以手动添加其他虚拟相机。分别设置Blendlist下相机的照射位置,Blendlist Camera通过时间来切换不同相机的播放,按照顺序从上往下播放。

Unity--Cinemachine官方实例详解_优先级_03

Hold 表示激活下一个虚拟相机,等待的时间,单位秒;

sec 表示混合动画的时间,单位也是秒。

3.Dolly

Dolly有两种设置,一个是轨道相机,一个是轨道物体

1.轨道相机,Create Dolly Camera With Track。系统会生成两个物体,一个是虚拟相机,一个是轨道设置。

Unity--Cinemachine官方实例详解_ide_04

Unity--Cinemachine官方实例详解_ide_05

勾选Auto Dolly,会让虚拟相机控制主相机自动跟随物体,并尽可能的接近跟随物体,会在下图中的绿色轨道上移动。

点击+号,创建新的路径点。

Unity--Cinemachine官方实例详解_ide_06


2.轨道物体 Create Dolly Track With Cart,系统会生成两个物体,一个是轨道路径DollyTrack2,和上面的一样,一个是带有Cinemachine Dolly Cart脚本的DollyCart1,把要按轨道行驶的物体放到DollyCart1节点下就可以了,同时在DollyCart1节点设置速度即可。

Unity--Cinemachine官方实例详解_ide_07

Unity--Cinemachine官方实例详解_ide_08

4.Single follow Camera

1. 简单的跟随。这个比较简单,设置虚拟相机,并设置follow对象,如图

Unity--Cinemachine官方实例详解_Cinemachine_09

2.固定视角跟随。也就是固定Fov跟随,如图,在虚拟相机添加一个Cinemachine Follow Zoom组件

Unity--Cinemachine官方实例详解_优先级_10

5.Target Group Camera

多目标追踪相机,Create Target Group Camera

在TargetGroup下添加Target,并可设置权重和半径,在虚拟相机中的Follow和Look At都设置为TargetGroup,并把Aim模式设置为Group Composer,如图所示。

Unity--Cinemachine官方实例详解_2d_11

Unity--Cinemachine官方实例详解_ide_12

6.FreeLook Camera

Create FreeLook Camera,设置第三人称,比较简单,可以虚拟相机随着鼠标的移动而控制主相机移动。


7.Mixing Camera

Create Mixing Camera, 生成的虚拟相机子物体还有两个虚拟相机,成像是两个子虚拟相机共同的结果

Unity--Cinemachine官方实例详解_2d_13

8.ClearShot Camera

ClearShot Camera可以管理一组子虚拟相机。如果子相机具有CinemachineCollider扩展,他们将进行分析目标障碍场景,最佳目标距离等项目,并对其进行评估将镜头质量返回给ClearShot,然后他会选择最好的一个。如果多个子相机具有相同的镜头质量,则具有最高优先级的相机将是选择。

Unity--Cinemachine官方实例详解_Unity_14

上面的例子是,首先设置一个虚拟相机LookAt这个Cube物体,设置优先级priority为12,当Cube被白色的墙挡住时,切换一个虚拟相机,设置优先级priority为11,当Cube移动一段距离,又可以被之前的虚拟相机看到时,因为第一个虚拟相机优先级更高,会再切换到第一个虚拟相机。

Unity--Cinemachine官方实例详解_Unity_15

Unity--Cinemachine官方实例详解_优先级_16

8.StateDriven Camera

Create StateDriven Camera,激活特定镜头时进入特定的动画状态,结合Animator动画系统来使用。

Unity--Cinemachine官方实例详解_Unity_17

Unity--Cinemachine官方实例详解_优先级_18

在控制角色移动时,当改变动画状态,虚拟相机也会相应切换。

Unity--Cinemachine官方实例详解_优先级_19

Unity--Cinemachine官方实例详解_2d_20

这是Demo的Github地址https://github.com/aaBaO/DemoRepository中的WhatIsCinemachine文件夹


标签:Camera,--,物体,相机,Unity,虚拟,设置,Cinemachine
From: https://blog.51cto.com/u_6871414/5896963

相关文章

  • C#--序列化和反序列化
    序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。它的主要用途是保存对象的状态,以便能够在需要时重新创建对象。反向过程称为“反序列......
  • C#--泛型委托Action<T>、Func<T>、Predicate<T>的解析和用法
    C#中的委托(Delegate)类似于C或C++中函数的指针。委托是保存对某个方法引用的一种引用类型变量。若要引用的方法,具有两个参数没有返回值,使用Action<T1, T2>委托,则不需要......
  • Unity Animator -- Apply Root Motion
    Animator.ApplyRootMotion这个属性是用来控制物体在播放骨骼动画的时候是否应用骨骼根节点的运动参数。一、当没有骨骼根节点的情况时,比如只是一个Cube立方体,如果勾选了Appl......
  • 【详细解析版】Unity UGUI Mask组件实现原理
    MaskingisimplementedusingthestencilbufferoftheGPU.即Mask是利用了GPU的模板缓冲来实现的,关于模板,打个简单的比方,就像一个面具,可以挡住一部分“脸”的显示一样。......
  • Unity-利用SkinnedMeshRenderer和Mesh的BindPose实现骨骼动画
    SkinnedMeshRenderer蒙皮网格渲染器。蒙皮是指将Mesh中的顶点附着(绑定)在骨骼之上,而且每个顶点可以被多个骨骼所控制。骨骼是皮肤网格内的不可见对象,它们影响动画过程中网格......
  • Unity判断对象是否在视野内
    判断对象是否在视野内,有两种方式:第一种:不设置固定的目标,使用LayerMask,设置寻找对象的Layer,使用Physics.OverlapSphere方法,以给定的位置为圆心,按照设定距离投射一个球体,返回......
  • Unity--Physics.OverlapSphere的参数LayerMask和GameObject的layer
    Layer介绍:Unity中是用int32来表示32个Layer层。int32表示二进制一共有32位(0—31)在Unity中每个GameObject都有Layer属性,默认的Layer都是Default。在Unity中可编辑的Layer共......
  • C#数据结构--Dictionary、HashTable、List、HashSet区别
    在.Net  模仿java的过程中,抛弃了HashMap,所以我们今天分析下Dictionary、HashTable、HashSet区别。处理碰撞,即碰撞到同一个Bucket槽上:Hashtable和Dictionary从数据结构上......
  • C#设计模式读书笔记之设计模式的设计原则
    设计模式的设计原则:(重要性从上往下排列)开闭原则:对扩展开放,对修改关闭依赖倒转原则:高层模块不应该依赖底层模块,它们都应该依赖抽象;要针对抽象层编程,而不要针对具体类编程。......
  • lua获取数组的长度
    获取数组的长度对于一个数组我们通常可以使用#来获取其长度tabletest={1,2,3,5,7}print(#tabletest)------》5使用这两种方法都能得到这个数组的长度,但是如果tabletest=......