Твой класс реализует только IPointerDownHandler, но не реализует IPointerUpHandler. Для отслеживания момента отпускания кнопки, тебе нужно также реализовать интерфейс IPointerUpHandler.
В методе Update ты пытаешься изменить размер объекта, но у тебя стоит нулевое значение умножения. Также, постоянно увеличивать или уменьшать размер в Update может привести к непредсказуемым результатам из-за разных скоростей обновления кадров. Если ты хочешь плавно изменять размер, нужно использовать плавное изменение размера (Lerp).
Увеличивать и уменьшать localScale на фиксированное значение может привести к нежелательным эффектам, особенно если ты начинаешь с неединичного масштаба.
Попробуй так:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class DrugoyButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
private bool isPressed = false;
public GameObject objectToScale;
public GameObject ga;
public void OnPointerDown(PointerEventData eventData)
{
if (eventData.pointerEnter == ga)
{
isPressed = true;
StartCoroutine(ScaleOverTime(objectToScale.transform, objectToScale.transform.localScale * 1.2f, 0.5f));
}
}
public void OnPointerUp(PointerEventData eventData)
{
if (eventData.pointerEnter == ga && isPressed)
{
isPressed = false;
StartCoroutine(ScaleOverTime(objectToScale.transform, objectToScale.transform.localScale / 1.2f, 0.5f));
}
}
private IEnumerator ScaleOverTime(Transform targetTransform, Vector3 targetScale, float duration)
{
Vector3 originalScale = targetTransform.localScale;
float time = 0f;
while (time < duration)
{
targetTransform.localScale = Vector3.Lerp(originalScale, targetScale, time / duration);
time += Time.deltaTime;
yield return null;
}
targetTransform.localScale = targetScale;
}
}
Теперь твой класс сможет правильно обрабатывать события нажатия и отпускания кнопки.
Используется корутина для плавного изменения размера объекта, что более надежно и красиво, чем прямое изменение в Update.
Проверка isPressed в OnPointerUp предотвращает нежелательные изменения размера при неверных событиях.
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class DrugoyButton : MonoBehaviour, IPointerDownHandler
{
private bool isPressed = false;
public GameObject objectToScale;
public GameObject ga;
public void OnPointerDown(PointerEventData eventData)
{
if (eventData.pointerEnter == ga)
{
isPressed = true;
objectToScale.transform.localScale += new Vector3(1.2f, 1.2f, 1.2f);
}
}
public void OnPointerUp(PointerEventData eventData)
{
if (eventData.pointerEnter == ga)
{
isPressed = false;
objectToScale.transform.localScale -= new Vector3(1.2f, 1.2f, 1.2f);
}
}
private void Update()
{
if (isPressed)
{
objectToScale.transform.localScale += new Vector3(0, 0 * Time.deltaTime, 0);
}
}
}