Unity-根据与目标的接近程度缩放UI元素?

时间:2019-03-27 20:29:48

标签: c# user-interface unity3d

好吧,我使用https://bitbucket.org/beksomega/unityuiscrollsnaps/src全向滚动,并且我进行了以下设置:拖动框将框锁定到中间的紫色框:

enter image description here

我希望“选择”的元素或最接近目标的任何元素都可以按比例放大,例如Apple的手表应用程序:

enter image description here

在脚本中,我有很多功能,例如:

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;
        }

并且可以打印所选或最接近的项目。如何根据与目标的接近程度进行缩放?

1 个答案:

答案 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);

该功能必须传递指针,鼠标,手指等的位置,第二个参数是要缩放的图标或目标。 基本上,您需要了解两者之间的距离因数,并使用该因数在最小比例尺和最大比例尺之间进行插值。 我希望这就是您想要的,否则,请告诉我。