这似乎是一个重复的问题。我有一根钓竿和一根杆子。我点击屏幕,根据点击的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 );
}
该功能在规模上给出了奇怪的输出。
有人可以帮忙。已经坚持了一段时间。非常感谢你。
编辑:添加图片以更好地了解问题。
答案 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 );