Comment détecter la souris pour l'image de l'interface utilisateur dans Unity 5?

9

J'ai une image que j'ai configurée pour me déplacer et effectuer un zoom avant ou arrière. Le problème est que le zoom peut être effectué de n'importe où dans la scène, mais je veux seulement qu'il zoome lorsque la souris survole l'image. J'ai essayé d'utiliser OnMouseEnter, OnMouseOver, des déclencheurs d'événements, tous les trois sans collisionneur, avec un collisionneur, avec un collisionneur déclencheur, et tout cela sur l'image elle-même et sur un objet de jeu vide. Mais aucun de ceux-là n'a fonctionné ... Donc je suis absolument perplexe ... Quelqu'un pourrait-il m'aider ici!

Voici mon script:

    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
la source

Réponses:

12

Vous pouvez implémenter IPointerEnter et IPointerExitinterfacer et garder un booléen pour «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;
    }
}
Exerion
la source