Jak wykryć najechanie myszką na obraz interfejsu w Unity 5?

9

Mam obraz, który mam skonfigurowany do poruszania się i powiększania i pomniejszania. Problem polega na tym, że powiększenia można dokonać z dowolnego miejsca na scenie, ale chcę, aby powiększał się tylko wtedy, gdy kursor myszy znajduje się nad obrazem. Próbowałem użyć OnMouseEnter, OnMouseOver, wyzwalaczy zdarzeń, wszystkie trzy bez zderzacza, ze zderzaczem, ze zderzaczem wyzwalaczy, a wszystko to na samym obrazie i na pustym obiekcie gry. Jednak żaden z nich nie zadziałał ... Więc jestem absolutnie zaskoczony ... Czy ktoś mógłby mi pomóc tutaj!

Oto mój skrypt:

    private float zoom;
    public float zoomSpeed;
    public Image map;

    public float zoomMin;
    public float zoomMax;

    void Update () {
        zoom = (Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * zoomSpeed);
        map.transform.localScale += new Vector3(map.transform.localScale.x * zoom, map.transform.localScale.y * zoom, 0);
        Vector3 scale = map.transform.localScale;
        scale = new Vector3(Mathf.Clamp(map.transform.localScale.x, zoomMin, zoomMax), Mathf.Clamp(map.transform.localScale.y, zoomMin, zoomMax), 0);
        map.transform.localScale = scale;
    }
mr-matt
źródło

Odpowiedzi:

12

Możesz wdrożyć IPointerEnter i IPointerExitinterfejsy oraz zachować wartość logiczną dla „over state”:

using System;
using UnityEngine;
using UnityEngine.EventSystems;

public class TestOver : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    public bool isOver = false;

    public void OnPointerEnter(PointerEventData eventData)
    {
        Debug.Log("Mouse enter");
        isOver = true;
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        Debug.Log("Mouse exit");
        isOver = false;
    }
}
Ćwiczenia
źródło