unity3d - 为相机移动器添加平滑
问题描述
嗨,我有一个脚本可以统一调整相机的距离,以确保物体始终完全在相机的视野中。我这样做是这样的:
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
值,但我不知道如何:(
解决方案
有一个target
半径,您的current
半径可以顺利移动。
为了获得最佳(-ish)结果,请使用一个公式,其中平滑的“速度”取决于当前情况与目标情况的距离(注意:在这种情况下,情况 = 半径)。换句话说,变焦速度取决于当前的变焦状态,而不是一个固定的起点。
这么远(例如在一个大的、快速的变化之后)= 非常快(平滑的开始很快),但非常接近 = 非常慢(所以平滑的结束很慢)。
这是一个不错的 2D 教程:https ://youtu.be/AvnrywsoTe0
请注意 lerp 如何使用当前相机正交尺寸而不是固定的“起始”正交尺寸来应用缩放,从而有效地产生我所描述的效果,其中缩放速度取决于当前缩放及其与目标缩放的“距离”。
推荐阅读
- clang - Clang AST Matchers:如何从函数声明中找到函数体?
- javascript - 我正在尝试使用 mysql javascript API 删除数据库中的记录
- sql - 如何添加为每个 ID 重置的行数?
- node.js - 从 mongodb 获取数据并找到最接近的值
- python - 将 - 替换为:在 dict.values 中用于删除数据帧中的切片
- javascript - js - 多个 if 语句,如果条件不满足,则不检查以下 if 语句
- rest - 相同 API 的不同响应但不同的方法(GET 和 POST)
- jquery - 转换属性在退出我的 div 后隐藏我的 svg 图像
- android-studio - Android Studio 3.6 中的 Gradle 同步失败导致类型代码无效:85
- node.js - 使用 promise 等待 async.maplimit