NOHEADLITTLEGBG 2022-08-04 22:32 采纳率: 100%
浏览 54
已结题

UGUI+UnityEventSystem实现UI的拖拽功能但是UI 物件拖拽到空白区时报出空引用异常,如何解决?

Unity版本2020.3
使用 UGui 和 UnityEventSystem实现 UI 格子的拖拽效果
运行后 UI 格子在空白区域放下时报空引用异常,其他时候没有报错

代码如下:

public void OnEndDrag(PointerEventData eventData)
    {
        //GameObject endPoint = eventData.pointerCurrentRaycast.gameObject;
        //Slot endPointSlot = endPoint.GetComponentInParent<Slot>();
        //以上这两个语句放在  if  语句之前当 UI 物件被拖到空白区时,报空引用异常:对象引用没有设置到对象实例

        if (eventData.pointerCurrentRaycast.gameObject != null && eventData.pointerCurrentRaycast.gameObject.GetComponentInParent<Slot>() != null)
        {
            //放进来后就不报了不知为何
            GameObject endPoint = eventData.pointerCurrentRaycast.gameObject;
            Slot endPointSlot = endPoint.GetComponentInParent<Slot>();

            this.ItemImage.sprite = endPointSlot.itemImage.sprite;
            this.itemCount.text = endPointSlot.itemCount.text;

            endPointSlot.ItemImage.sprite = drag.gameObject.GetComponentInChildren<Image>().sprite;
            endPointSlot.ItemCount.text = drag.gameObject.GetComponentInChildren<Text>().text;


        }
        //drag是用于显示拖拽物件的
        Destroy(drag);
    }

  • 写回答

1条回答 默认 最新

  • 周周的Unity小屋 2022-08-05 09:09
    关注

    放在外面肯定是会有报空的情况呀。eventData.pointerCurrentRaycast.gameObject这句代码获取的是鼠标指针当前射线检测到的物体,当你移动的空白处,没有物体返回的是空,所以就报空异常了。你放在判断里,判断是否为空了,不为空才执行if里面语句,获取到的物体肯定不为空就不会报错了

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月16日
  • 专家已采纳回答 8月8日
  • 修改了问题 8月4日
  • 创建了问题 8月4日

悬赏问题

  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛