Unity之无代码开发摄像头跟随,使用Unity自带Cinemachine插件

        最近在进行Unity2D开发的时候遇到了摄像机视角跟随角色移动不流畅的问题,想要在正常的角色跟随上加上一些视角平滑切换效果,或是设定死区,角色触碰死区边缘视角才移动的效果。但是一想到各种相关脚本的修改就头疼的很,于是上网查了一下发现了Unity自带Cinemachine插件能很完美的解决这个问题,并且做到无代码开发,故在此分享一下。

        先放一下之前的摄像机跟随脚本,简单至极,无任何技术可言。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    [SerializeField] private Transform player;


    // Update is called once per frame
    void Update()
    {
        transform.position = new Vector3(player.position.x, player.position.y, transform.position.z);
    }
}

        设置摄像机坐标与player坐标一致,在Unity组件中添加player即可。

        现在我们进入正题,导入Cinemachine插件并进行配置。

1.导入Cinemachine插件

        从Unity左上方"Window"—>"Package Manager"打开Unity的包管理器,在包管理器的左上角Package下拉栏处选择 "Unity Rigistry"后搜索Cinemachine。

        这里因为我已经导入过了,所以显示的是Remove,没导入过显示的应该是Download,点击Download,在下载完并自动导入之后,我们在场景点击右键新建对象的时候,就会出现Cinemachine的选项了。

        

2.Cinemachine插件使用详解

       在上述最后一张图中可以看到有各式各样的Camera选项,因为我做的项目是2D项目,所以这里选择2D Camera。

        

        可以发现在创建后我们多出了一个新的Virtual Camera,并且原来Main Camera的后边多了一个摄像头的标志。我们点击Virtual Camera,查看它的组件属性。

这里的参数从上向下依次是:

Status:Live Solo:用于调试。选中这个按钮时,此虚拟相机会直接控制Unity相机显示在Game窗口中,用于相机的调试。

Game Window Guides:勾选时,Game窗口会显示辅助线,用于设置虚拟相机的各个属性。

Save During Play:虚拟相机的属性在运行时的修改可以被保存下来,退出Play状态时不会被重置。

Priority:虚拟相机的重要程度,用于Live镜头的选择。数值越高代表优先级越高。Cinemachine Brain会根据这个属性从所有激活的虚拟相机中选择活动的虚拟相机。

Follow:选择场景中的物体后,虚拟相机会跟随这个物体移动。Body属性基于这个目标物体更新Unity相机的位置。

Look At:镜头瞄准的物体目标,使相机镜头一直对准这个物体。

Standby Update:待命时的更新方式,当虚拟相机物体没有被禁用,但是优先级不足时,虚拟相机处于待命状态。这个属性会影响性能,通常设置为Never是最好的,但是有时候可能需要虚拟相机更新来做一些镜头相关的计算判断。在它的下拉栏中:

  • Never 不更新
  • Always 每帧更新
  • Round Robin 循环更新:所有的待命虚拟相机循环更新,每帧更新一个相机(例如有10个待命的相机,第一帧更新第一个相机,第2帧更新第2个相机,....,第11帧更新第1个相机,以此类推)

Lens:对应Unity相机中的属性,也可以从Preset中选择或者从现有的设置创建新的Preset。

  • Dutch镜头旋转。这个属性在Unity相机中是没有的,可以用来控制镜头的旋转。(在屏幕空间的旋转)

Transitions:相机转换的相关设置

Blend Hint:混合方式,在他的下拉栏中:

  • None 无,默认线性混合
  • Spherical Position 根据Look At的物体球面旋转混合
  • Cylindrical Position 根据Look At的物体柱面旋转混合(水平方向圆弧,垂直方向线性)
  • Screen Space Aim When Target 在屏幕空间瞄准目标

Inherit Positon: 下一个相机变成活动相机时,从上一个相机继承位置,即保持两个相机位置相同。

On Camera Live:事件,相机变为活动时会触发对应的事件。

Body:对相机本身的设置,在他的下拉栏中:

Do Nothing:不移动虚拟相机
Framing Transposer:跟随目标移动,并在屏幕空间保持相机和跟随目标的相对位置。
Hard Lock to Target:虚拟相机和跟随目标使用相同位置。
Orbital Transposer:相机和跟随目标的相对位置是可变的,还能接收用户的输入。常见于玩家控制的相机。
Tracked Dolly:相机沿着预先设置的轨道移动。
Transposer:跟随目标移动,并在世界空间保持相机和跟随目标的相对位置固定

Lookahead Time:根据目标的运动,调整虚拟相机与“跟随”目标的偏移量。Cinemachine预测目标在未来数秒之内到达的位置并提前设置Unity相机的位置。这个功能对微动的动画敏感,并且会放大噪点,导致非预期的相机抖动。如果不能接受目标运动时的相机抖动,减小这个属性可能会使相机动画更流畅。
Lookahead Smoothing:预测算法的平滑度。较大的值可以消除抖动但会使预测滞后。
Lookahead Ignore Y:如果选中,在预测计算时会忽略沿Y轴的移动。

X Damping:相机在X轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。每个轴使用不同的设置可以制造出各种类型相机的行为。
Y Damping:相机在Y轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。
Z Damping:相机在Z轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。

Screen X:目标的水平屏幕位置。相机移动的结果是使目标处于此位置。
Screen Y:目标的垂直屏幕位置,相机移动的结果是使目标处于此位置。
Camera Distance:沿摄像机Z轴与跟随目标保持的距离。
Dead Zone Width:当目标在此位置范围内时,不会水平移动相机。
Dead Zone Height:当目标在此位置范围内时,不会垂直移动相机。
Dead Zone Depth:当跟随目标距离相机在此范围内时,不会沿其z轴移动相机。

Unlimited Soft Zone:如果选中,Soft Zone没有边界
Soft Zone Width:当目标处于此范围内时,会水平移动相机,将目标移回到Dead Zone中。Damping属性会影响摄像机的运动速度。
Soft Zone Height:当目标处于此范围内时,会垂直移动相机,将目标移回到Dead Zone中。Damping属性会影响摄像机的运动速度。
Bias X:Soft Zone的中心与目标位置的水平偏移。
Bias Y:Soft Zone的中心与目标位置的竖直偏移。

Center On Active:选中时,虚拟相机激活时会将镜头中心对准物体。不选中时,虚拟相机会将目标物体放置在最近的dead zone边缘。

此后的AimNoise暂时还未涉及到

Extension:可以给虚拟相机添加额外的扩展。

3.设置摄像头跟随(不需要详解可跳至此)

        如果我们只是需要一个简单摄像头跟随效果,或加些镜头平滑切换效果,则只需将你需要的跟随的游戏物体挂载至CinemaCamera的Follow与Lookat处

如上设置好两个物体对象,我们的摄像机跟随就完成了。再进入游戏后,摄像头就会跟随物体移动了。

4.设置摄像头移动效果

        虽然设置好了摄像头移动,但是我们会发现摄像头实际上是缓慢跟随物体移动的,会有一个平滑的延迟效果。这时我们要修改以下Body内的参数以达到能及时跟随移动。

        这里的三个值指的是我们摄像头在三个坐标方向的阻力系数,将他们设置为0,就可以使摄像头能及时跟随物体移动,数值越大,阻力越大,摄像头移动越缓慢。

        以上就是使用Cinemachine插件控制摄像头跟随物体的全过程了,此插件我才接触不久,还需更多时间去学习和使用,如有疑问,欢迎来讨论

参考链接:

【Cinemachine智能相机教程】VirtualCamera(二):Body属性_framing transposer-CSDN博客

【Cinemachine】VirtualCamera虚拟相机详解(一) - 知乎 (zhihu.com)

如果想要学习更多的Cinemachine插件相关内容,也可以看一下这两位的博客,讲解更详细也具专业性。

  • 38
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用DOTween插件Unity中实现摄像机跟随路径运动的示例代码: 1. 首先,您需要安装DOTween插件。您可以在Unity Asset Store中搜索“DOTween”并安装它。 2. 创建一个空对象并将其命名为“CameraPath”。 3. 将路径上的所有点作为子对象添加到“CameraPath”对象中。每个子对象应该包含一个Transform组件,指定该点的位置。 4. 在“CameraPath”对象上添加一个脚本组件,并使用以下代码: ```csharp using UnityEngine; using DG.Tweening; public class CameraPathController : MonoBehaviour { public Transform[] waypoints; // 存储路径上的所有点 public float duration = 10.0f; // 动画持续时间 public Ease easeType = Ease.Linear; // 动画插值类型 void Start() { Camera.main.transform.DOPath(GetWaypoints(), duration, PathType.CatmullRom).SetEase(easeType); // 创建路径动画 } Vector3[] GetWaypoints() { Vector3[] path = new Vector3[waypoints.Length]; // 创建路径数组 for (int i = 0; i < waypoints.Length; i++) // 将路径上的所有点添加到路径数组中 { path[i] = waypoints[i].position; } return path; } } ``` 在此示例中,我们使用DOTween的DOPath方法来创建路径动画。我们将路径上的所有点存储在“waypoints”数组中,并使用GetWaypoints方法将它们转换为一个Vector3数组。我们还可以指定动画的持续时间和插值类型。 5. 将摄像机添加到场景中,并将其设置为“CameraPathController”脚本中使用的摄像机。 6. 运行场景并观察摄像机沿着路径移动的效果。 请注意,您可以根据需要调整路径点的数量和位置,并在“CameraPathController”脚本中调整动画的持续时间和插值类型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值