【Unity】OnTriggerStay2D无法触发问题,物体跟随鼠标等背包系统以及UI场景交互系统技术总结

跟着麦扣老师学习的背包系统之后,因为参加GameJam后现在码了背包和场景交互,但是都有些bug,最近重新改了一下。
主要功能:
1.通过点击获取UI上的物品,点击场景也可以。下图就是点击场景在背包中生成物品
2.通过拖拽UI中的item来进行场景之间的交互

(下图中的功能:放入指定的物品:树枝和废纸,可以让这个壁炉可以被点燃,放入打火机进行点燃){因为没有图所以随便找了点就当作状态的替换}
请添加图片描述

实现过程:
通过点击UI/对象,在对应的assets++;并刷新PlayerInventory
拖拽UI时在鼠标下生成对应的GameObject用于与交互点检测碰撞。
在这里插入图片描述

交互实现

在最初的交互中,我选择了使用Button来进行生成检测Gameobject,因为UI的拖拽检测PointerEventData.pointerCurrentRaycast只能检测UI画布上的物体,不能托出去交互。
而现在的版本中,我将PlayerInventory下方放置了一个透明度为0的Panel来为了让UI进行全图的检测。这样就不需要Button这个繁琐的设定,直接从Inventory中拖拽UI了

技术总结

OnTriggerStay2D无法碰撞

OnTriggerStay2D会有出现无法碰撞的问题,是因为他在没有移动时,进入睡眠,如果要解决它,首先你需要关闭刚体的睡眠在这里插入图片描述
并且依然会出现无法碰撞的问题,暂未解决(我估计是刷新率跟不上的问题),后因为让UI可以出现在整个屏幕,换回了OntriggerEnter2d又可以经行最丝滑的交互了。

检测跟随鼠标移动

    public void MoveByMouse()
    {
        if (isMove)
        {
            //首先获取到当前物体的屏幕坐标
            Vector3 pos = Camera.main.WorldToScreenPoint(transform.position);
            //让鼠标的屏幕坐标的Z轴等于当前物体的屏幕坐标的Z轴,也就是相隔的距离
            Vector3 m_MousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, pos.z);
            //将正确的鼠标屏幕坐标换成世界坐标交给物体
            transform.position = Camera.main.ScreenToWorldPoint(m_MousePos);
        }
    
    }
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值