[RS] Timeline踩坑(2):The object has been destroyed but you are still

分享
手机游戏开发者 2024-9-4 20:21:30 139 0 来自 中国
纪录环境


  • Unity 2021.3.4f1
  • Timeline 1.6.4
题目描述

  起首分析下,这个报错不是Unity直接抛出的,它就是我们写的轨道代码里,访问了一个已经被Destroy的对象。但是,导致这个报错出现,不是由于我们用法不公道!!!
  我们项目在切换情形的时间,会将当前情形的资源“全部卸载”,此中就包罗TML及其控制的脚色。
  我们在主城切换到副本的时间,爆出来这个MissingReferenceException的题目。查抄后发现项目中资源开释的逻辑没有题目,轨道里的代码也符合制作规范。
同一资源开释流程(部门):
1.先制止全部正在播放的TML
2.开释/烧毁资源,这里包罗TML、脚色等(这一步的序次不告急)
轨道实现的规范(部门):
【轨道还原】在离开Clip、退出或烧毁Track等时机时,要只管还原被控脚色的状态
  轨道还原是由于我们TML重要用在战斗中做技能演出,每个技能开释完毕后,须要脚色还原到本身的进场站位,以是大部门轨道都须要做还原这个处理处罚。
  基于TML的设定,我们在做资源开释时,就要包管上面的序次。由于TML竣事的时间,仍旧会访问脚色的对象,故TML须要先制止。
缘故起因分析

  颠末进一步打Log测试,我发现TML的制止跟Playable资源的制止并不是同步举行的。
测试得到一个结论:
PlayableDirector.Stop()与PlayerBehaviour.OnPlayableDestroy()是在同一帧实行,但不是同步实行,OnPlayableDestroy会晚一些。
测试的Log流程(下面这些全部在同一个Update帧输出):

  • PlayableDirector.Stop()【主动制止TML】
  • TimelineCtrl.OnDestroy()【制止TML后,烧毁脚色跟TML】
  • Update() 开始【制止TML时,做了个标记让某个脚本的Update在第一行输出Log】
  • Update() 竣事【同上,在末了一行输出Log】
  • PlayerBehaviour.OnPlayableDestroy()【Unity内部在UpdateDirectorUpdateRegistrator::Forward调过来】
  • Frame End【制止TML时,开了个协程在WaitForEndOfFrame之后输出Log】
// OnPlayableDestroy的实行堆栈MoleTimeline.MoleStateMixer:OnPlayableDestroy (UnityEngine.Playables.Playable) ...0x00007ff7ae5e01d4 (Unity) ScriptingInvocation::Invoke0x00007ff7ae56f5c0 (Unity) PlayableMethods::InvokePlayableDestroy0x00007ff7ae562112 (Unity) Playable:eallocateResources0x00007ff7ae568862 (Unity) PlayableGraph:estroyPendingPlayables0x00007ff7ae568387 (Unity) PlayableGraph:estroy0x00007ff7ae56c876 (Unity) DirectorManager:rocessPlayStateChanges0x00007ff7ae56a657 (Unity) `DirectorManager::InitializeClass'::`2'::UpdateDirectorUpdateRegistrator::Forward0x00007ff7ae2a437c (Unity) ExecutePlayerLoop0x00007ff7ae2a4453 (Unity) ExecutePlayerLoop0x00007ff7ae2aa099 (Unity) PlayerLoop推测: Unity内部维护了一个Playable的列表,并在Update里每帧去做清算,PlayableDirector.Stop只做了一个可烧毁的标记。
办理方案

  临时没找到比力好的办理方案,只是在每个Track的代码里,本身判定要用的资源是否合法。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-12-23 00:27, Processed in 0.160601 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表