关于Unity的CanvasRenderer报错

MissingReferenceException: The object of type 'CanvasRenderer' has been destroyed but you are still trying to access it.

Your script should either check if it is null or you should not destroy the object.

UnityEngine.UI.GraphicRaycaster.Raycast (UnityEngine.Canvas canvas, UnityEngine.Camera eventCamera, UnityEngine.Vector2 pointerPosition, System.Collections.Generic.IList1[T] foundGraphics, System.Collections.Generic.List1[T] results) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/GraphicRaycaster.cs:335)

UnityEngine.UI.GraphicRaycaster.Raycast (UnityEngine.EventSystems.PointerEventData eventData, System.Collections.Generic.List1[T] resultAppendList) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/GraphicRaycaster.cs:236) UnityEngine.EventSystems.EventSystem.RaycastAll (UnityEngine.EventSystems.PointerEventData eventData, System.Collections.Generic.List1[T] raycastResults) (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/EventSystem.cs:263)

UnityEngine.InputSystem.UI.InputSystemUIInputModule.PerformRaycast (UnityEngine.InputSystem.UI.ExtendedPointerEventData eventData) (at Library/PackageCache/com.unity.inputsystem@1.4.4/InputSystem/Plugins/UI/InputSystemUIInputModule.cs:271)

UnityEngine.InputSystem.UI.InputSystemUIInputModule.ProcessPointer (UnityEngine.InputSystem.UI.PointerModel& state) (at Library/PackageCache/com.unity.inputsystem@1.4.4/InputSystem/Plugins/UI/InputSystemUIInputModule.cs:315)

UnityEngine.InputSystem.UI.InputSystemUIInputModule.Process () (at Library/PackageCache/com.unity.inputsystem@1.4.4/InputSystem/Plugins/UI/InputSystemUIInputModule.cs:2112)

UnityEngine.EventSystems.EventSystem.Update () (at Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/EventSystem.cs:501)

先上报错问题。然后说一下我怎么遇到的问题,最后再说解决办法。

这个问题我是怎么遇到的呢,删除不用的UI,这里是一个功能模块的UI,比如你的程序的主页UI,删除后直接运行,当你的鼠标憋说点击了,放到UI上就会报上边的错误,跟你说GraphicRaycaster.Raycast检测不到你的UI了。或者说你的UI上没有CanvasRenderer了,问你是不是删除了,对,我是删除了,我tm在程序启动前删除的,反应迟钝把,这不得不让你想unity的缓存机制了。问题找到了,给你的感觉就是他缓存里你的东西还在,但是你删除了,出现的是这个问题。

一般情况出现这个问题比如说你已经删除了,但是找不到,说明有地方有残留,比如你的脚本上有对删除物体的引用,有对事件的注册等等,其实不一定非得是CanvasRenderer的missing的报错,其他组件有missing的报错都可以这么推理。不是你脚本上的问题,那么就是unity的缓存的问题。

接下来说一下我的解决办法:

直接删除你不要的UI,他还是报错怎么办?把unity关闭,然后重启

最后在说一下,出现这个问题的原因之一是你之前肯定看到了说你的UI预制体too large的红色报错了。

相关推荐
漫游者Nova2 小时前
虚幻引擎Unreal Engine5恐怖游戏设计制作教程,从入门到精通从零开始完整项目开发实战详细讲解中英字幕
ue5·游戏引擎·虚幻·游戏开发完整教程·恐怖游戏开发
死也不注释11 小时前
【Unity 编辑器工具开发:GUILayout 与 EditorGUILayout 对比分析】
unity·编辑器·游戏引擎
小赖同学啊20 小时前
物联网中的Unity/Unreal引擎集成:数字孪生与可视化控制
物联网·unity·游戏引擎
Zlzxzw1 天前
使用unity创建项目,进行动画制作
unity·游戏引擎
X_StarX1 天前
【Unity笔记01】基于单例模式的简单UI框架
笔记·ui·unity·单例模式·游戏引擎·游戏开发·大学生
九班长1 天前
Golang服务端处理Unity 3D游戏地图与碰撞的详细实现
3d·unity·golang
ysn111111 天前
NGUI实现反向定位到层级面板结点
unity
Thomas_YXQ2 天前
Unity3D DOTS场景流式加载技术
java·开发语言·unity
KhalilRuan2 天前
Unity-MMORPG内容笔记-其一
unity·游戏引擎
向宇it2 天前
【unity游戏开发——网络】网络游戏通信方案——强联网游戏(Socket长连接)、 弱联网游戏(HTTP短连接)
网络·http·游戏·unity·c#·编辑器·游戏引擎