[Unity] UGUI添加删除子canvas 造成unity闪退 crash 崩溃问题分析。


项目里,为了做引导, 把 需要高亮按钮控件  加上 Canvas  GraphicRaycaster 组件,然后设置大的层级。  

结束时再移除这些组件。

没想到频繁 造成崩溃。



========== OUTPUTING STACK TRACE ==================


0x00000001407B9B96 (Unity) GameObject::IsActive
0x0000000140FB04D0 (Unity) UI::CanvasRenderer::DirtySyncTypeFlag
0x0000000140FB14B7 (Unity) UI::CanvasRenderer::OnTransformChanged
0x00000001407B88C3 (Unity) MessageHandler::HandleMessage
0x00000001407B8D14 (Unity) GameObject::SendMessageAny
0x0000000140A98A34 (Unity) std::_Uninit_move<unsigned short * __ptr64,unsigned short * __ptr64,stl_allocator<unsigned short,1,16>,unsigned short>
0x0000000140AA50D9 (Unity) Transform::SendTransformChangedToModifiedTransforms
0x0000000140716E45 (Unity) UnityEngine::Animation::SetTransformPropertyApplyMainThread
0x00000001406946E0 (Unity) Animator::WriteProperties
0x00000001406E1E74 (Unity) Animator::UpdateAvatars
0x00000001411EC196 (Unity) DirectorManager::ExecuteStage
0x00000001411EC36E (Unity) DirectorManager::ExecuteStage
0x0000000140BCCA93 (Unity) PlayerLoop
0x0000000141495492 (Unity) Application::UpdateScene
0x0000000141496A5F (Unity) Application::UpdateSceneIfNeeded
0x000000014149F494 (Unity) Application::TickTimer
0x00000001415632AE (Unity) FindMonoBinaryToUse
0x00000001415648D1 (Unity) WinMain
0x000000014187FA98 (Unity) strnlen
0x0000000076D159CD (kernel32) BaseThreadInitThunk
0x0000000076F4A561 (ntdll) RtlUserThreadStart


========== END OF STACKTRACE ===========



========== OUTPUTING STACK TRACE ==================


0x0000000140FB0FC0 (Unity) UI::CanvasRenderer::CanvasHierarchyChanged
0x00000001407B88C3 (Unity) MessageHandler::HandleMessage
0x00000001407B8D14 (Unity) GameObject::SendMessageAny
0x0000000140A973F2 (Unity) Transform::BroadcastMessageAny
0x00000001416BA18D (Unity) UI::Canvas::AddToManager
0x00000001416C0238 (Unity) UI::Canvas::AwakeFromLoad
0x0000000140E5EAFA (Unity) AwakeFromLoadQueue::InvokeAwakeFromLoad
0x0000000140E609FD (Unity) AwakeFromLoadQueue::AwakeFromLoad
0x00000001407BBA0D (Unity) GameObject::ActivateAwakeRecursively
0x00000001407BBD86 (Unity) GameObject::Activate
0x000000002915405D (Mono JIT Code) (wrapper managed-to-native) UnityEngine.GameObject:SetActive (bool)
0x000000005A48B3B2 (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\Code\ResourceManager\ResourceManager.cs:56] ResourceManager:LoadGameObject (string,System.Action`2<UnityEngine.GameObject, object>,object) 
0x000000005A48AFBC (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\UI\LuaHelper.cs:24] LuaHelper:LoadGameObject (string,LuaInterface.LuaFunction) 
0x000000005A48AB5A (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Source\LuaWrap\LuaHelperWrap.cs:106] LuaHelperWrap:LoadGameObject (intptr) 
0x00000000538780C3 (Mono JIT Code) (wrapper native-to-managed) LuaHelperWrap:LoadGameObject (intptr)
0x0000000066934965 (ulua) lj_BC_FUNCC
0x0000000066940DD3 (ulua) lua_pcall
0x00000000365FD03F (Mono JIT Code) (wrapper managed-to-native) LuaInterface.LuaDLL:lua_pcall (intptr,int,int,int)
0x0000000053B6EE98 (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Core\LuaFunction.cs:144] LuaInterface.LuaFunction:PCall (int,int) 
0x000000001FDA3D25 (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Source\LuaWrap\ClickEventTriggerWrap.cs:364] ClickEventTriggerWrap/<set_onClick>c__AnonStorey0:<>m__0 (UnityEngine.EventSystems.PointerEventData) 
0x000000001FDA347A (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\Code\ExtraCode\UGUI\ClickEventTrigger.cs:43] ClickEventTrigger:OnPointerClick (UnityEngine.EventSystems.PointerEventData) 
0x000000001FDA2BDF (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\ExecuteEvents.cs:52] UnityEngine.EventSystems.ExecuteEvents:Execute (UnityEngine.EventSystems.IPointerClickHandler,UnityEngine.EventSystems.BaseEventData) 
0x000000001FD9E740 (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\ExecuteEvents.cs:269] UnityEngine.EventSystems.ExecuteEvents:Execute<object> (UnityEngine.GameObject,UnityEngine.EventSystems.BaseEventData,UnityEngine.EventSystems.ExecuteEvents/EventFunction`1<object>) 
0x00000000585F1406 (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\InputModules\StandaloneInputModule.cs:533] UnityEngine.EventSystems.StandaloneInputModule:ProcessMousePress (UnityEngine.EventSystems.PointerInputModule/MouseButtonEventData) 
0x00000000585E6208 (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\InputModules\StandaloneInputModule.cs:432] UnityEngine.EventSystems.StandaloneInputModule:ProcessMouseEvent (int) 
0x00000000585E5EB9 (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\InputModules\StandaloneInputModule.cs:412] UnityEngine.EventSystems.StandaloneInputModule:ProcessMouseEvent () 
0x00000000585E3DB2 (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\InputModules\StandaloneInputModule.cs:186] UnityEngine.EventSystems.StandaloneInputModule:Process () 
0x0000000053B60101 (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\EventSystem.cs:287] UnityEngine.EventSystems.EventSystem:Update () 
0x0000000023D66D52 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)
0x000007FED3F654D7 (mono) [c:\buildslave\mono\build\mono\mini\mini.c:4937] mono_jit_runtime_invoke 
0x000007FED3EB83ED (mono) [c:\buildslave\mono\build\mono\metadata\object.c:2623] mono_runtime_invoke 
0x000000014121413F (Unity) scripting_method_invoke
0x0000000140E425A5 (Unity) ScriptingInvocation::Invoke
0x000000014121635E (Unity) MonoBehaviour::CallMethodIfAvailable
0x0000000141219E92 (Unity) MonoBehaviour::CallUpdateMethod
0x00000001409569CA (Unity) BaseBehaviourManager::CommonUpdate<BehaviourManager>
0x0000000140956FBF (Unity) BehaviourManager::Update
0x0000000140BCCA3F (Unity) PlayerLoop
0x0000000141495492 (Unity) Application::UpdateScene
0x0000000141496A5F (Unity) Application::UpdateSceneIfNeeded
0x000000014149F494 (Unity) Application::TickTimer
0x00000001415632AE (Unity) FindMonoBinaryToUse
0x00000001415648D1 (Unity) WinMain
0x000000014187FA98 (Unity) strnlen
0x0000000076D159CD (kernel32) BaseThreadInitThunk
0x0000000076F4A561 (ntdll) RtlUserThreadStart


========== END OF STACKTRACE ===========




========== OUTPUTING STACK TRACE ==================


0x00000001416BD6B3 (Unity) UI::Canvas::GetRenderMode
0x0000000140FB1461 (Unity) UI::CanvasRenderer::OnTransformChanged
0x00000001407B88C3 (Unity) MessageHandler::HandleMessage
0x00000001407B8D14 (Unity) GameObject::SendMessageAny
0x0000000140A98A34 (Unity) std::_Uninit_move<unsigned short * __ptr64,unsigned short * __ptr64,stl_allocator<unsigned short,1,16>,unsigned short>
0x0000000140AA5013 (Unity) Transform::SendTransformChanged
0x0000000140A3C7A0 (Unity) UI::RectTransform::UpdatePosAndRectRecursive
0x0000000140A45C0E (Unity) UI::RectTransform::OnTransformChanged
0x00000001407B88C3 (Unity) MessageHandler::HandleMessage
0x00000001407B8D14 (Unity) GameObject::SendMessageAny
0x0000000140A98A34 (Unity) std::_Uninit_move<unsigned short * __ptr64,unsigned short * __ptr64,stl_allocator<unsigned short,1,16>,unsigned short>
0x0000000140A98ADB (Unity) Transform::SendTransformParentingMessages
0x0000000140AA6899 (Unity) Transform::SetParent
0x00000000761414EC (Mono JIT Code) (wrapper managed-to-native) UnityEngine.Transform:SetParent (UnityEngine.Transform,bool)
0x000000003C4351EF (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Source\LuaWrap\TransformWrap.cs:866] TransformWrap:SetParent (intptr) 
0x0000000061C9B4A3 (Mono JIT Code) (wrapper native-to-managed) TransformWrap:SetParent (intptr)
0x0000000066934965 (ulua) lj_BC_FUNCC
0x0000000066940DD3 (ulua) lua_pcall
0x0000000030A57F0F (Mono JIT Code) (wrapper managed-to-native) LuaInterface.LuaDLL:lua_pcall (intptr,int,int,int)
0x000000006610B659 (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Core\LuaFunction.cs:70] LuaInterface.LuaFunction:call (object[],System.Type[]) 
0x000000006610B14A (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Core\LuaFunction.cs:91] LuaInterface.LuaFunction:Call (object[]) 
0x000000003C423342 (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Core\LuaFunction.cs:113] LuaInterface.LuaFunction:Call (object) 
0x000000003C4343DD (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\UI\LuaHelper.cs:27] LuaHelper/<LoadGameObject>c__AnonStorey2:<>m__0 (UnityEngine.GameObject,object) 
0x000000003C41ECCC (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\Code\ResourceManager\ResourceManager.cs:60] ResourceManager:LoadGameObject (string,System.Action`2<UnityEngine.GameObject, object>,object) 
0x000000003C41E84C (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\UI\LuaHelper.cs:24] LuaHelper:LoadGameObject (string,LuaInterface.LuaFunction) 
0x000000003C41E3EA (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Source\LuaWrap\LuaHelperWrap.cs:106] LuaHelperWrap:LoadGameObject (intptr) 
0x00000000616D1803 (Mono JIT Code) (wrapper native-to-managed) LuaHelperWrap:LoadGameObject (intptr)
0x0000000066934965 (ulua) lj_BC_FUNCC
0x0000000066940DD3 (ulua) lua_pcall
0x0000000030A57F0F (Mono JIT Code) (wrapper managed-to-native) LuaInterface.LuaDLL:lua_pcall (intptr,int,int,int)
0x000000006610B659 (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Core\LuaFunction.cs:70] LuaInterface.LuaFunction:call (object[],System.Type[]) 
0x000000006610B14A (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Core\LuaFunction.cs:91] LuaInterface.LuaFunction:Call (object[]) 
0x000000003C423342 (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Core\LuaFunction.cs:113] LuaInterface.LuaFunction:Call (object) 
0x000000003C4343DD (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\UI\LuaHelper.cs:27] LuaHelper/<LoadGameObject>c__AnonStorey2:<>m__0 (UnityEngine.GameObject,object) 
0x000000003C41ECCC (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\Code\ResourceManager\ResourceManager.cs:60] ResourceManager:LoadGameObject (string,System.Action`2<UnityEngine.GameObject, object>,object) 
0x000000003C41E84C (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\UI\LuaHelper.cs:24] LuaHelper:LoadGameObject (string,LuaInterface.LuaFunction) 
0x000000003C41E3EA (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Source\LuaWrap\LuaHelperWrap.cs:106] LuaHelperWrap:LoadGameObject (intptr) 
0x00000000616D1803 (Mono JIT Code) (wrapper native-to-managed) LuaHelperWrap:LoadGameObject (intptr)
0x0000000066934965 (ulua) lj_BC_FUNCC
0x0000000066940DD3 (ulua) lua_pcall
0x0000000030A57F0F (Mono JIT Code) (wrapper managed-to-native) LuaInterface.LuaDLL:lua_pcall (intptr,int,int,int)
0x00000000761040F8 (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Core\LuaFunction.cs:144] LuaInterface.LuaFunction:PCall (int,int) 
0x000000003C4BE835 (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\CodePublic\uLua\Source\LuaWrap\ClickEventTriggerWrap.cs:364] ClickEventTriggerWrap/<set_onClick>c__AnonStorey0:<>m__0 (UnityEngine.EventSystems.PointerEventData) 
0x000000003C4BE04A (Mono JIT Code) [C:\work\mmo3d_client\mmo3d\Assets\Code\ExtraCode\UGUI\ClickEventTrigger.cs:43] ClickEventTrigger:OnPointerClick (UnityEngine.EventSystems.PointerEventData) 
0x000000003C4BD87F (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\ExecuteEvents.cs:52] UnityEngine.EventSystems.ExecuteEvents:Execute (UnityEngine.EventSystems.IPointerClickHandler,UnityEngine.EventSystems.BaseEventData) 
0x000000003C4B75C0 (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\ExecuteEvents.cs:269] UnityEngine.EventSystems.ExecuteEvents:Execute<object> (UnityEngine.GameObject,UnityEngine.EventSystems.BaseEventData,UnityEngine.EventSystems.ExecuteEvents/EventFunction`1<object>) 
0x000000007612B426 (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\InputModules\StandaloneInputModule.cs:533] UnityEngine.EventSystems.StandaloneInputModule:ProcessMousePress (UnityEngine.EventSystems.PointerInputModule/MouseButtonEventData) 
0x000000007611EFF8 (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\InputModules\StandaloneInputModule.cs:432] UnityEngine.EventSystems.StandaloneInputModule:ProcessMouseEvent (int) 
0x000000007611ECA9 (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\InputModules\StandaloneInputModule.cs:412] UnityEngine.EventSystems.StandaloneInputModule:ProcessMouseEvent () 
0x000000007611CBA2 (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\InputModules\StandaloneInputModule.cs:186] UnityEngine.EventSystems.StandaloneInputModule:Process () 
0x00000000661352F1 (Mono JIT Code) [C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\EventSystem.cs:287] UnityEngine.EventSystems.EventSystem:Update () 
0x000000000B066F82 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)
0x000007FED5B454D7 (mono) [c:\buildslave\mono\build\mono\mini\mini.c:4937] mono_jit_runtime_invoke 
0x000007FED5A983ED (mono) [c:\buildslave\mono\build\mono\metadata\object.c:2623] mono_runtime_invoke 
0x000000014121413F (Unity) scripting_method_invoke
0x0000000140E425A5 (Unity) ScriptingInvocation::Invoke
0x000000014121635E (Unity) MonoBehaviour::CallMethodIfAvailable
0x0000000141219E92 (Unity) MonoBehaviour::CallUpdateMethod
0x00000001409569CA (Unity) BaseBehaviourManager::CommonUpdate<BehaviourManager>
0x0000000140956FBF (Unity) BehaviourManager::Update
0x0000000140BCCA3F (Unity) PlayerLoop
0x0000000141495492 (Unity) Application::UpdateScene
0x0000000141496A5F (Unity) Application::UpdateSceneIfNeeded
0x000000014149F494 (Unity) Application::TickTimer
0x00000001415632AE (Unity) FindMonoBinaryToUse
0x00000001415648D1 (Unity) WinMain
0x000000014187FA98 (Unity) strnlen
0x0000000076D159CD (kernel32) BaseThreadInitThunk
0x0000000076F4A561 (ntdll) RtlUserThreadStart


========== END OF STACKTRACE ===========




最后网上找到一个参考 类似错误的:

http://blog.csdn.net/gz_huangzl/article/details/52484907

怀疑是Destroy后,Unity存在一个BUG导致CanvasRenderer还继续访问了该物体(已经为NULL)

然后做了延时Destory就好了。


然后这边就想到了一个思路。   在LateUpdate里把 Canvas  GraphicRaycaster 组件 移除, 就是等渲染结束再移除canvas组件,, 就不崩溃了。


(最近遇到一个新的闪退情况, 原因应该是一样的:

  就是 子节点 含有canvas的,移除父节点上的canvas unity就会闪退崩溃(编辑器手动操作都可复现,unity 5.5.x)。
目前方案,先把子节点的canvas先禁用掉,然后再移除父节点的,再恢复子节点的canvas)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值