UGUI的canvas默认层级是UI,Sorting order 是0,由于unity渲染物体时是从上到下直接渲染的,这就导致了渲染出来的效果和我们预期的不一致,因此必须设置层级,指定渲染的先后顺序(层级低的先渲染)才行。
想要实现的效果是有一个背包,背包里有道具,鼠标移上去之后出现一个框显示物品的详细信息,移开就消失。但是默认UI层级会把挡住
解决方案
- 在被挡住的UI上添加组件
canvas
,增大它的sorting order
,但是坑爹的是:设置完后,层级的问题解决了,但是UI的所有事件被拦截(包括按钮的点击、UI拖拽等等) - 给UI再设置一个组件Graphic RayCaster,完美解决,既可以显示特效,还不会遮挡UI。
- 至此有个问题,如果界面很多都需要设置上述的canvas,那就需要自己实现一个管理类,给每个ui设置它的order,不过canvas会影响合并批次,所以不能有太多,自己权衡。
- 给Item上挂一个脚本,实现
IPointerEnter
和IPointerExit
接口,分别对应设置Active属性
|
|