Unity项目GUIClip入栈多于出栈报错,添加第二个Canvas空图片时触发求解决
这个报错的核心是GUI绘制流程中GUI.BeginClip()与GUI.EndClip()的调用数量不匹配,结合你的场景(仅在第二个Canvas添加空图片时触发),可以按以下步骤排查解决:
检查自定义OnGUI()代码
如果你在项目中写了OnGUI()方法,逐一核对所有GUI.BeginClip()调用,确保每一个都对应一个GUI.EndClip(),没有遗漏或嵌套错误。示例正确写法:void OnGUI() { GUI.BeginClip(new Rect(0, 0, 100, 100)); // 绘制UI内容 GUI.EndClip(); // 必须与BeginClip一一对应 }若使用UGUI但仍保留了旧版OnGUI()代码,可暂时注释掉该方法,测试报错是否消失,快速定位问题来源。
核对第二个Canvas的配置
确认第二个Canvas的Render Mode设置为Screen Space - Overlay或Screen Space - Camera(符合XP条的屏幕UI需求),避免误设为World Space;同时检查Canvas上的附加组件,排查第三方插件或自定义脚本是否存在违规的GUIClip调用。检查空图片的组件与绑定脚本
针对用作XP滑块的空图片,检查其Image组件的裁剪、遮罩设置:若使用了Mask组件,确保遮罩逻辑正确,没有异常的Begin/End Clip操作;同时检查图片上绑定的脚本,确认没有手动调用GUIClip相关方法却未配对的情况。重置UI元素
尝试删除当前第二个Canvas,重新创建新Canvas并手动添加Image组件配置XP条,避免继承旧元素的错误设置;也可右键点击空图片的Image组件选择Reset,恢复默认设置后再重新配置滑块样式。排查版本与插件冲突
若使用较旧的Unity版本,升级到对应LTS版本的最新小版本,部分GUIClip的已知bug已在新版本中修复;同时禁用第三方UI插件,测试报错是否消失,逐步排查插件导致的冲突。
内容的提问来源于stack exchange,提问作者charlieyin

