首页 > 解决方案 > 为相机移动器添加平滑

问题描述

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

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值,但我不知道如何:(

标签: unity3dmathcamerasmoothing

解决方案


有一个target半径,您的current半径可以顺利移动。

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

这么远(例如在一个大的、快速的变化之后)= 非常快(平滑的开始很快),但非常接近 = 非常慢(所以平滑的结束很慢)。

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

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


推荐阅读