Как обнаружить курсор мыши для изображения пользовательского интерфейса в Unity 5?


9

У меня есть изображение, которое я настроил для перемещения и увеличения и уменьшения масштаба. Проблема в том, что зум можно сделать из любой точки сцены, но я хочу, чтобы зум увеличивался только тогда, когда мышь наводит курсор на изображение. Я попытался использовать OnMouseEnter, OnMouseOver, триггеры событий, все три из которых без коллайдера, с коллайдером, с триггером-коллайдером, и все это на самом изображении и на пустом игровом объекте. Однако ни один из них не сработал ... Так что я абсолютно в замешательстве ... Может ли кто-нибудь помочь мне здесь!

Вот мой сценарий:

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

Ответы:


12

Вы можете реализовать IPointerEnter и IPointerExitинтерфейсы, и поддерживать логическое значение для состояния «over»:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.