unity ui中鼠标移进或者移出的触发方式与2d、3d的不同,2d、3d物体使用的是onmouseover,ui使用的是OnPointerEnter。需要实现以下两个接口。
public class TrackMouse: MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { // Called when the pointer enters our GUI component. // Start tracking the mouse public void OnPointerEnter( PointerEventData eventData ) { StartCoroutine( "TrackPointer" ); } // Called when the pointer exits our GUI component. // Stop tracking the mouse public void OnPointerExit( PointerEventData eventData ) { StopCoroutine( "TrackPointer" ); } IEnumerator TrackPointer() { var ray = GetComponentInParent<GraphicRaycaster>(); var input = FindObjectOfType<StandaloneInputModule>(); if( ray != null && input != null ) { while( Application.isPlaying ) { Vector2 localPos; // Mouse position RectTransformUtility.ScreenPointToLocalPointInRectangle( transform as RectTransform, Input.mousePosition, ray.eventCamera, out localPos ); // local pos is the mouse position. yield return 0; } } else UnityEngine.Debug.LogWarning( "Could not find GraphicRaycaster and/or StandaloneInputModule" ); } }
原文出自unity官方论坛,详情可以查看https://forum.unity.com/threads/problem-with-onmousedown-onmouseover-in-ui.326096/