You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity 2D UI元素OnMouseOver/OnMouseEnter悬停检测位置偏移问题求助

问题原因

OnMouseEnter类API是为世界空间的3D/2D物体设计的,依赖物体上挂载的Collider/Collider2D进行边界检测。UGUI元素的显示位置会受Canvas缩放、屏幕适配规则动态调整,但Collider的世界坐标边界不会同步适配,因此会出现检测位置和UI实际显示位置不匹配的偏移,属于接口使用场景不匹配导致的问题。

正确实现方案

UGUI原生提供了专用于UI交互的事件接口,无需额外添加Collider,适配所有Canvas缩放模式,不会出现偏移问题,实现步骤如下:

  • 确认目标Image组件已勾选Raycast Target选项(默认开启)
  • 确认场景中存在EventSystem对象(新建UI元素时Unity会自动生成,缺失可手动右键创建:UI → Event System)
  • 修改Node脚本,实现IPointerEnterHandler和IPointerExitHandler接口即可,参考代码如下:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class Node : MonoBehaviour, IDropHandler, IPointerEnterHandler, IPointerExitHandler
{
    [HideInInspector] private Color32 canPlaceColor = new Color32(159, 255, 159, 255);
    private Color32 originalColor;

    private void Awake()
    {
        originalColor = GetComponent<Image>().color;
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        GetComponent<Image>().color = canPlaceColor;
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        GetComponent<Image>().color = originalColor;
    }

    public void OnDrop(PointerEventData eventData)
    {
        // 保留原有拖放逻辑即可
    }
}

内容的提问来源于stack exchange,提问作者eligolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:57:00