Como detectar o mouse sobre a imagem da interface do usuário no Unity 5?


9

Eu tenho uma imagem que eu configurei para mover e aumentar e diminuir o zoom. O problema é que o zoom pode ser feito de qualquer lugar da cena, mas eu só quero que o zoom se passe o mouse sobre a imagem. Tentei usar OnMouseEnter, OnMouseOver, gatilhos de eventos, todos os três sem colisor, com colisor, com colisor de gatilho e tudo isso na própria imagem e em um objeto de jogo vazio. No entanto, nenhum deles funcionou ... Então, eu estou absolutamente perplexo ... Alguém poderia me ajudar aqui!

Aqui está o meu 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;
    }

Respostas:


12

Você pode implementar IPointerEnter e fazer IPointerExitinterfaces e manter booleano para '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;
    }
}

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.