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
。