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

C# 统一增加游戏对象的规模不起作用?,c#,unity3d,virtual-reality,C#,Unity3d,Virtual Reality,游戏对象: 我有一个具有以下属性的游戏对象“球体”: 起始刻度为1.5(x,y,z) 确保比例介于0和150之间的脚本 我有什么: 现在,我已经实现了一个功能,用户可以使用HTC Vive控制器缩放游戏对象(我们使用的是虚拟现实) 此函数用于检查控制器之间的距离(通常介于-1和1之间,以确定是否要放大或缩小对象) 因此,当这个值介于-1和1之间时,我将按灵敏度的倍数来缩放游戏对象(这在Unity编辑器中是可编辑的) 我想要什么: 这工作得很好,不过,我想以一种非硬编码的方式随时间增加灵敏度。

游戏对象:

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

  • 起始刻度为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这样的tweening库,那么使用该库的功能应该可以很容易地做到这一点。如果没有,可以尝试使用三次bézier方程,这是一种更简单的曲线:


这只是
y=x^3
,因此,您可以尝试
ObjectMaximumScale.x*currentPercentage*currentPercentage*currentPercentage
获取一个从0到
ObjectMaximumScale.x
的值,当分别输入一个介于0和1之间的值时。

您需要显示您的代码。。如果显示您的示例,则更容易理解您做错了什么代码。@BugFinder添加了代码。@Norse我添加了代码,希望它足够清晰,它有点复杂。就像unity中的所有东西一样,平滑缩放通常需要deltatime。。我使用transform.localScale=Vector3.Lerp(currentsize、newsize、lerppos);并将lerpos设置为+=1*time.deltaTime;很有魅力