ngui 和模型遮挡关系

2015年01月31日 10:33 0 点赞 0 评论 更新于 2025-11-21 15:50

最近在给 UI 添加粒子特效时,粒子特效总是被 UI 遮挡。今天,我将详细探讨 NGUI 和模型之间的遮挡关系问题,并给出相应的解决办法。

问题根源

粒子系统的默认渲染顺序为 3000,而 NGUI 的渲染顺序默认也是从 3000 开始。当存在嵌套的 Panel 或者 Depth 值更高的 Panel 时,GUI 的渲染顺序会高于 3000,这就导致粒子特效容易被 UI 遮挡。

解决办法

方法一:修改 NGUI 中 UIPanel 脚本的默认渲染队列

可以通过修改 NGUI 里 UIPanel 脚本中的默认 RenderQueue,将其调整到 3000 以下,这样粒子特效就不会被 UI 遮挡。若有的窗口需要显示在特效之上,可在检视面板中将该窗口的 Renderer Q 选项设置为 Start At,并把值设为 3000 以上。不过需要注意的是,我使用的 NGUI 版本为 3.1.6,在这个版本中可以直接进行这样的调整。不同版本的 NGUI 可能在操作步骤或脚本结构上存在差异,在实际操作时需要根据自己使用的版本进行相应处理。

方法二:使用额外摄像机显示特效

可以使用另外一个摄像机专门来显示特效。但这种方法存在一定局限性,当 UI 窗口相互切换时,特效摄像机的控制会变得比较复杂,例如可能需要精确调整摄像机的位置、角度和视锥体等参数,以确保特效能正确显示且与 UI 窗口的切换逻辑相匹配。

方法三:修改粒子特效 Shader 中的渲染队列值

直接修改粒子特效 Shader 中的 RendererQueue 值,通过调整这个值来改变粒子特效的渲染顺序,使其在 UI 之前或之后渲染,从而解决遮挡问题。在修改 Shader 时,需要对 Shader 的语法和结构有一定的了解,避免因修改不当导致特效显示异常。