【问题标题】:Add smoothing to camera mover为相机移动器添加平滑
【发布时间】:2020-06-23 12:32:00
【问题描述】:

您好,我有一个脚本可以统一调整相机的距离,以确保对象始终完全在相机的视野中。我这样做是这样的:

Vector3 characterSize = UpdateBounds(totalPoints).size;
float objectSize = Mathf.Max(Mathf.Max(characterSize.x / 2, characterSize.y / 2), characterSize.z / 2);
float cameraView = 2f * Mathf.Tan(0.5f * Mathf.Deg2Rad * Camera.main.fieldOfView);   
float rigRadius = cameraPadding * objectSize / cameraView;

在这种情况下,rigRadius 是与主体的距离,以确保相机视图包含整个对象。

我遇到的问题是,当对象在相对较小的时间段内大小发生很大变化时。相机运动感觉生涩,一点也不顺畅。

那么我该如何调整这段代码来添加某种平滑值呢?我似乎无法弄清楚。

据我所知,我需要平滑rigRadius 值,但我不知道如何:(

【问题讨论】:

标签: unity3d math camera smoothing


【解决方案1】:

有一个target 半径,您的current 半径可以平滑地移向。

为了获得最佳(-ish)结果,请使用一个公式,其中平滑的“速度”取决于当前情况与目标情况的距离(注意:在这种情况下,情况 = 半径)。也就是说,缩放速度取决于当前的缩放状态,而不是一个固定的起点。

到目前为止(例如在大而快速的变化之后)= 非常快(平滑开始很快),但非常接近 = 非常慢(所以平滑结束很慢)。

这里有一个不错的 2D 教程:https://youtu.be/AvnrywsoTe0

注意 lerp 如何使用当前相机正交尺寸而不是固定的“起始”正交尺寸来应用缩放,有效地实现了我所描述的效果,其中缩放速度取决于当前缩放及其与目标缩放的“距离”。

【讨论】:

  • 所以,嗯...为什么这被否决了?插入[你为什么嘘我?我是对的!] 模因在这里。
猜你喜欢
  • 2012-09-17
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
相关资源
最近更新 更多