Unity开发之 UGUI手游界面返回上一层

一谈到返回上一层,我们首先想到的自然是用栈来存放已经打开的所有Panel。(涉及到先进先出)

而在打开背包时,想要把某个Panel(比如背包层界面)放入栈中,自然会涉及到如何监测到这个界面的打开操作。

在手机上监测,那肯定是监测触摸,所以我是用了UGUI中的eventsystem。然后使用UGUI中自带的OnPointerDown方法监测所点击的物体。

但在这个过程中,出现一个重大问题。除了像button之类外,点击任何物体都能正确返回到控制台。因为这方法是基于eventsystem的,而button被点击时也会用到eventsystem。

我怀疑因为button先使用了eventsystem中的eventdata,导致我的OnPointerDown方法中的参数(eventdata)get不到,所以自然就无任何返回结果。

而我最终只好帮每个button手动(或者用脚本)加上一点效果来实现被点了也会有作用产生。


但我认为要实现这功能还是用射线简单,既然UGUI的射线不能监测,我觉得用通用Raycast监测应该会监测出所有接触到的物体。事后我会去尝试一下。

因为监测不到button,为了使button强行被监测到,我写了挺多无谓的脚本。所以这里就不贴代码了。我在此再讲下详细的思路和步骤。


1.需要一个GameManager脚本来监控游戏,在脚本中创建用来存放所打开的Panel的栈。(主场景怎么点都不会不入栈)

2.射线监测,如果目标物体所属的Panel没包含在栈中,将该Panel入栈,并把CurrentPanel=栈顶元素。

3.射线监测,(在栈非空的时候)如果目标物体所属的Panel不是CurrentPanel,将栈顶元素出栈,将对应Panel隐藏,CurrentPanel=栈顶元素或null。null即为主场景



在这么查这个点击的物体属于哪个Panel,我设计一个方法,通过不断向上一层找他的parent,判断他有无parents的tag属于某个Panel。

即 如果有10个Panel,设10个tag,给对应的Panel的tag改好就行。由于Panel是很少的,所以操作极其方便省事,拓展也很方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值