好吧,我使用https://bitbucket.org/beksomega/unityuiscrollsnaps/src全向滚动,并且我进行了以下设置:拖动框将框锁定到中间的紫色框:
我希望“选择”的元素或最接近目标的任何元素都可以按比例放大,例如Apple的手表应用程序:
在脚本中,我有很多功能,例如:
private Vector2 FindClosestSnapPositionToPosition(Vector2 position)
{
EnsureLayoutHasRebuilt();
Vector2 selected = Vector2.zero;
float shortestDistance = Mathf.Infinity;
foreach (Vector2 snapPosition in m_SnapPositions)
{
float distance = Vector2.Distance(snapPosition, position);
if (distance < shortestDistance)
{
shortestDistance = distance;
selected = snapPosition;
}
}
return selected;
}
并且可以打印所选或最接近的项目。如何根据与目标的接近程度进行缩放?
答案 0 :(得分:1)
我知道您想在某些范围内进行缩放。可以说它开始于比例尺1,并且您想要达到尺寸S。我们可以定义一个距离D,相对于指针与对象之间的距离,对象开始按比例缩放。 你可以做这样的事情。
/* Constants */
const float S = 2.0f; // The maximum size you want to get when closest
const float D = 5.0f; // The distance where you start to scale
const float E = 1.0f; // The distance where the object will not scale more (i.e. reached the maximum)
float GetIconSize(Vector2 pointer, Vector2 icon)
{
// Get the value between 0 and 1 from the distance between
float factor = Mathf.InverseLerp(D, E, Vector2.Distance(pointer, icon));
// Return the interpolated value size depending on the distance
return Mathf.Lerp(1.0f, S, factor);
}
然后将其应用于对象(我假设它被称为“图标”)
float size = GetIconSize(Vector2 pointer, Vector2 icon);
icon.transform.localScale = new Vector2(size, size);
该功能必须传递指针,鼠标,手指等的位置,第二个参数是要缩放的图标或目标。 基本上,您需要了解两者之间的距离因数,并使用该因数在最小比例尺和最大比例尺之间进行插值。 我希望这就是您想要的,否则,请告诉我。