多年来一直试图解决这个问题。 试图找到一种方法,让我的操纵杆在向任何方向移动时都代表图像上在该方向上显示的数字。 我本质上希望我的玩家移动速度是棍子方向上的值。
我只是想要一些正确方向的指导。
如果我正确理解你输入的是什么
maxValue
)minValue
)所以你可以使用的是输入和Vector2.Dot
(=完全Y方向)之间的
Vector2.up
乘积
var input = new Vector2(userInputX, userInputY).normalized;
var dot = Vector2.Dot(input, Vector2.up);
这将是
Mathf.Lerp
中的一个因子,它可以在给定因子的两个值之间进行插值
您只需将
-1
和1
内的点的给定范围映射到0
和1
之间的插值因子范围,例如
// Remap the range -1 to 1 into the factor 0 to 1
var factor = (dot + 1f) / 2f;
var result = Mathf.Lerp(minValue, maxValue, factor);
如果左/右值也是给定值 - 假设这是因为图形中的值不匹配,因为 3 和 1.5 的左/右值实际上是 2.25 - 您基本上可以使用相同的
dot
从上面计算,然后检查一下
float result;
if(dot >= 0) // dot is directly a factor 0 to 1
{
result = Mathf.Lerp(middleValue, maxValue, dot);
}
else // dot is directly a negative factor -1 to 0
{
result = Mathf.Lerp(middleValue, minValue, -dot);
}