需求分析
在UGUI下,提前知道两点(设为A、B)之间的距离,以及他们的屏幕坐标。
现在想要实现,鼠标从A点出发移动的偏移值映射到两点之间距离的区间中(即将鼠标相对A点的偏移数据处理到AB距离的范围内,以达到模拟真实测量的效果。
(例如:让玩家点击A点后出现,从A点延申到鼠标上有一条线,通过拉线来实现测量的效果。)
时间有点紧迫,也没有细想这样实现的可用性啥的。真诚希望有大佬指教!
归一化公式
使用的公式出处:将数据归一化到任意区间范围的方法_数据 处理到 指定范围内-CSDN博客
代码实现
归一化函数:
/// <summary>
/// 将测量结果归一化
/// </summary>
/// <param name="min">样本数据的最小值</param>
/// <param name="max">样本数据的最大值</param>
/// <param name="left">区间的左边界</param>
/// <param name="right">区间的有边界</param>
/// <param name="value">需要归一化的测量结果</param>
public float MeasureNormalization(float min,float max,float left,float right,float value)
{
float temp;
if (min>max)
{
temp = min;
min = max;
max = temp;
}
if (left>right)
{
temp = left;
left = right;
right = temp;
}
return left + (right - left) / (max - min) * (value - min);
}
调用举例:
//将鼠标的坐标转为屏幕坐标系的坐标
RectTransformUtility.ScreenPointToLocalPointInRectangle( UI的画布RectTransform, 鼠标自己坐标系下的当前坐标, null, out 接收鼠标在屏幕坐标系下的坐标的变量);
//归一化后的结果
ans = MeasureNormalization( 0, AB点屏幕坐标下的距离, 0, AB点认为规定要测量出来的距离, 鼠标在屏幕坐标系下的坐标);