Unity闪退记录

作者: 慢慢来比较快_ | 来源:发表于2018-04-18 10:42 被阅读0次

环境:

Unity 5.6.5p1

问题:

切换场景时,遇到一个引擎层的bug会导致闪退。

闪退前会提示:Assertion failed on expression: 'MecanimDataWasBuilt()'

打开Editor的Log,里面记录了断言的位置和闪退时的堆栈 :

(Filename: C:/buildslave/unity/build/Runtime/Animation/AnimationClip.cpp Line: 1733)

Crash!!!

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

0x00000001418D3DBF (Unity) mecanim::statemachine::EvaluateState

0x00000001418D607D (Unity) mecanim::statemachine::SetStateMachineInInitialState

0x000000014089D821 (Unity) AnimatorControllerPlayable::GenerateGraph

0x000000014089E73D (Unity) AnimatorControllerPlayable::SetAnimatorController

0x00000001407CDB27 (Unity) Animator::CreateInternalControllerPlayable

0x0000000140844213 (Unity) Animator::CreateObject

0x00000001408456B1 (Unity) Animator::Prepare

0x000000014084976C (Unity) Animator::UpdateAvatars

0x0000000141495F94 (Unity) DirectorManager::ExecuteProcessCallbacks

0x000000014149756C (Unity) OnWillSaveScene

0x0000000140D8536F (Unity) PlayerLoop

0x000000014174381E (Unity) Application::UpdateScene

0x0000000141744FEF (Unity) Application::UpdateSceneIfNeeded

0x000000014174D87A (Unity) Application::TickTimer

0x000000014181935C (Unity) CrashCallback

0x000000014181AEE4 (Unity) WinMain

0x0000000141B0632C (Unity) strnlen

0x00000000776059CD (kernel32) BaseThreadInitThunk

0x000000007773A561 (ntdll) RtlUserThreadStart

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

解决过程:

1.由于这是引擎内部的代码,里面涉及到Animator的Create行为,所以猜测跟Animator的管理有关。

2.尝试过不使用AssetBundle,发现不会闪退,可以判定跟AssetBundle的加载/卸载有关。

3.把代码中所有assetbundle:Unload(true),都改成Unload(false),发现不会闪退了。那可以看出是卸载AssetBundle中的Animator后出问题了。

4.最后定位到A场景和B场景都使用了一个带Animator的Prefab,而A,B各自打包了,讲道理的话,应该是互不影响的。我尝试把Prefab关联Break掉,再重新打包,但是问题仍存在。

5.基于资源管理,不可能不使用Unload(true)。那既然是Animator被卸载后,仍被访问导致的,那么在销毁前先停止访问Animator就好了吧?

最后解决方案:

在切换场景前(Unload(true)前),先把当前的Animator组件禁用掉,就不会闪退了。

local allAnimators = UnityEngine.Object.FindObjectsOfType(UnityEngine.Animator)

for t in Slua.iter(allAnimators) do

        t.enabled = false

end

后言:

显然,这个解决方案并不完美,但是目前看到只能等待引擎官方修复,或者调整美术场景制作的方案(Animator不共用?)

只能后面再继续观察,看看怎么完美避免这个问题。

最新:

Unity 5.6.6的发行说明中,已经修复了这个闪退了。

Fixes

Animation: Fixed a crash when an animator reset was triggered during a StateMachineBehaviour awake. (907324)

Animation: Fixed a crash when Animator instantiated from Script enters a Sub-State Machine with StateMachineBehaviour. (930814)

相关文章

  • Unity闪退记录

    环境: Unity 5.6.5p1 问题: 切换场景时,遇到一个引擎层的bug会导致闪退。 闪退前会提示:Asse...

  • iOS Fabric管理APP

    1.优点 1.先前运用友盟记录app闪退,发现有些闪退的记录无法明确定位到详细的位置,决定运用fabric进行闪退...

  • iOS开发之Fabric操作使用

    iOS运用fabric记录crash日志过程先前运用友盟记录app闪退,发现有些闪退的记录无法明确定位到详细的位置...

  • iOS - 闪退情况记录

    会记录一些奇葩的闪退问题。 1.今日遇到一个闪退情况,在iOS8中UIScrollView在放大缩小的时候闪退。前...

  • unity加载场景时闪退

    最近项目从5.3升级到2018,这样的夸幅升级我也是无力吐槽。其中的痛苦与坑是说不尽道不来。回到正题,在众多报错与...

  • [RS] Unity Crash记录 - 03

    手机上进入副本闪退 1、环境 Unity 2021.3.4f1 2、Android堆栈 3、原因&解决 用64位的...

  • android 安装闪退记录

    oppo 8.1 无法安装,总是失败,报错 java.lang.RuntimeException: Unable...

  • unity5.5 [XXX] was compiled with

    unity5.5发布IOS版本,打开某些界面游戏会闪退,调试运行发现游戏崩溃时xcode会显示[XXX] was ...

  • Linux上Java闪退问题定位

    现象 java服务,运行1-2天闪退。闪退问题通常比较难查,因为日志不全,所以记录一下本次问题原因定位。 定位问题...

  • iOS问题记录#WKWebView 闪退异常

    #iOS问题记录#WKWebView 闪退异常 异常描述: pointer being freed was not...

网友评论

    本文标题:Unity闪退记录

    本文链接:https://www.haomeiwen.com/subject/ofwaxftx.html