Come rilevare il passaggio del mouse per l'immagine dell'interfaccia utente in Unity 5?


9

Ho un'immagine che ho impostato per spostarmi e ingrandire e rimpicciolire. Il problema è che lo zoom può essere eseguito da qualsiasi punto della scena, ma voglio solo lo zoom quando il mouse passa sull'immagine. Ho provato a usare OnMouseEnter, OnMouseOver, trigger di eventi, tutti e tre quelli senza collider, con un collider, con un trigger collider, e tutto ciò sull'immagine stessa e su un oggetto di gioco vuoto. Comunque nessuno di quelli ha funzionato ... Quindi sono assolutamente perplesso ... Qualcuno potrebbe aiutarmi qui!

Ecco la mia sceneggiatura:

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

Risposte:


12

Puoi implementare IPointerEnter e IPointerExitinterfacciare e mantenere il valore booleano per "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;
    }
}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.