Я понимаю, что вы хотите масштабировать между некоторыми границами.Допустим, он начинается в масштабе 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);
В функцию, которую вы должны передатьположение указателя, мыши, пальца и т. д., а второй параметр - это значок или цель, которую вы хотите масштабировать.В основном вам нужно знать коэффициент расстояния между обоими, и с этим коэффициентом интерполировать между минимальным масштабом и максимальным масштабом.Я надеюсь, что это то, что вы хотели, и если нет, скажите мне.