GameObject:
我有一个具有以下属性的gameObject“ Sphere”:
我拥有什么:
现在,我实现了一个功能,用户可以使用HTC Vive控制器(我们正在使用虚拟现实)来缩放GameObject。
此功能检查控制器之间的距离(通常在-1和1之间,以决定是否要放大或缩小对象)。
因此,当该值介于-1和1之间时,我将GameObject缩放为灵敏度的倍数(可在Unity编辑器中进行编辑)。
我想要什么:
这很好用,尽管我想以一种非硬编码的方式随着时间的推移提高灵敏度。因此,当GameObject非常小时,缩放比例将非常缓慢。当GameObject很大时,缩放比例会很快。
我尝试过什么:
我有这个值(介于-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);
有人知道如何进行这种缩放吗?
谢谢。
答案 0 :(得分:1)
如果我正确理解了这个问题,那么您正在寻找一种方法来指定缩放比例的变化率,以使其在接近最大比例时变化更快,这听起来像是easing function的工作。
如果您的项目已经使用了补间库(如DOTween),则应利用该库的功能轻松完成此操作。如果没有,您可以尝试使用三次贝塞尔曲线方程,这是较为简单的曲线之一:
这仅仅是y = x^3
,因此当分别输入介于0和1之间的值时,您可以尝试ObjectMaximumScale.x * currentPercentage * currentPercentage * currentPercentage
获得从0到ObjectMaximumScale.x
的值。