¿Cómo detectar el mouse sobre la imagen de la interfaz de usuario en Unity 5?

9

Tengo una imagen que he configurado para mover y acercar y alejar. El problema es que el zoom se puede hacer desde cualquier lugar de la escena, pero solo quiero que se amplíe cuando el mouse esté sobre la imagen. He intentado usar OnMouseEnter, OnMouseOver, disparadores de eventos, los tres sin colisionador, con un colisionador, con un colisionador de disparador, y todo eso en la imagen misma y en un objeto de juego vacío. Sin embargo, ninguno de ellos ha funcionado ... Así que estoy absolutamente perplejo ... ¿Podría alguien ayudarme aquí?

Aquí está mi guión:

    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;
    }
señor-mate
fuente

Respuestas:

12

Puede implementar IPointerEnter e IPointerExitinterfaces y mantener booleano para 'sobre estado':

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