在一个方向上缩放钓鱼竿

时间:2015-03-04 02:40:49

标签: c# unity3d game-engine scaling unity3d-2dtools

这似乎是一个重复的问题。我有一根钓竿和一根杆子。我点击屏幕,根据点击的y索引,我将我的钩子移动到该位置。所以说例如我的钩子当前在(2,3)如果我点击(400,9)我将我的钩子移动到(2,9)。所以我只是根据点击垂直移动它。

这很好用。现在根据钩子的位置,我想相应地缩放我的钓竿。所以一旦我完成定位我的钩子,我调用以下ScaleRod()。棒形精灵在左上方有一个枢轴,而不是中心。我想只在垂直方向上进行缩放。以下是我的相同代码:

         void scaleRod() {
         //get current size of the fishing rod
         var rodLength = System.Math.Abs(renderer.bounds.size.y); 
         //Get distance between the hook and the rod based on y coordinates.
         float hookRodDistance = (System.Math.Abs(transform.position.y) + rodLength) - System.Math.Abs(hookObject.transform.position.y);
         hookRodDistance =  System.Math.Abs(hookRodDistance);
         //Calculate the scale factor
         float scaleFactor = hookRodDistance / rodLength;
         //Scale  the rod        
         transform.localScale = new Vector3(transform.localScale.x, scaleFactor * transform.localScale.y, transform.localScale.z );
        }

该功能在规模上给出了奇怪的输出。

有人可以帮忙。已经坚持了一段时间。非常感谢你。

编辑:添加图片以更好地了解问题。

Initial setup

First Click

Second Click

1 个答案:

答案 0 :(得分:0)

我认为你的数学已关闭,让我们在你的代码中插入一些数字。假设杆的枢轴点为Y 0(因此transform.position.y将为0),杆长度为1,钩子为Y 2.目前,hookRodDistance为1, scaleFactor为1,而localScale根本不会改变大小,尽管棒的单位太短了。

相反,你可以计算出你想要杆的长度,并将localScale Y设置为该长度:

var desiredLength = System.Math.Abs(transform.position.y - hookObject.transform.position.y);
transform.localScale = new Vector3(transform.localScale.x, desiredLength, transform.localScale.z );