统一增加游戏对象的规模不起作用?



GameObject:

我有一个具有以下属性的游戏对象"球体":

  • 起始比例为 1.5 (x, y, z)。
  • 确保小数位数介于 0 和 150 之间的脚本。

我有什么:

现在,我已经实现了一个功能,用户可以通过使用HTC Vive控制器(我们正在使用虚拟现实)来扩展游戏对象。

这个函数检查控制器之间的距离(通常在 -1 和 1 之间,以决定我们是要放大还是缩小对象)。

因此,当我的这个值介于 -1 和 1 之间时,我将按灵敏度倍的值缩放游戏对象(这在 Unity 编辑器中是可编辑的)。

我想要什么:

这工作得很好,不过,我想随着时间的推移以非硬编码的方式提高灵敏度。因此,当游戏对象非常小时,缩放速度会非常慢。当游戏对象非常大时,缩放将很快。

我试过什么:

我有这个值(在 -1 和 1 之间),然后我将这个值乘以灵敏度。

然后我将乘以当前比例/最大比例。

但是,这会导致放大比缩小更快的问题。

我使用的代码如下所示:

float currentControllerDistance = Vector3.Distance(LeftHand.transform.position, RightHand.transform.position);
float currentZoomAmount = currentControllerDistance - ControllersStartPostionDifference; // Value is between -1 and 1.
currentZoomAmount = currentZoomAmount * ScalingSensitivity; // Multiplying by the value in the Unity Editor.
float currentPercentage = ObjectToScale.transform.localScale.x / ObjectMaximumScale.x; // Current scale percentage in comparison to the maximum scale.
currentZoomAmount = currentZoomAmount * currentPercentage; // Changing the ObjectToScale by adding the currentZoomAmount.
ObjectToScale.transform.localScale = new Vector3(ObjectCurrentScale.x + currentZoomAmount, ObjectCurrentScale.y + currentZoomAmount, ObjectCurrentScale.z + currentZoomAmount);

有人知道如何进行这种缩放吗?

谢谢转发。

如果我正确理解了这个问题,您正在寻找指定缩放率变化率的方法,以便在接近最大比例时变化更快,这听起来像是缓动函数的工作。

如果您的项目已经使用了补间库(如 DOTween),则应使用该库的功能轻松完成此操作。如果没有,您可以尝试使用三次贝塞尔方程,这是更简单的曲线之一:

立方贝塞尔

这很简单y = x^3,因此您可以尝试ObjectMaximumScale.x * currentPercentage * currentPercentage * currentPercentage获取一个值,该值分别介于 0 和 1 之间时从 0 到ObjectMaximumScale.x

最新更新