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

記錄環(huán)境

  • Unity 2021.3.4f1
  • Timeline 1.6.4

問題描述

??首先說明下爆价,這個報錯不是Unity直接拋出的符匾,它就是我們寫的軌道代碼里它褪,訪問了一個已經(jīng)被Destroy的對象健无。但是苛让,導(dǎo)致這個報錯出現(xiàn)弄贿,不是因為我們用法不合理4悍妗!挎春!
??我們項目在切換情景的時候看疙,會將當(dāng)前情景的資源“全部卸載”,其中就包含TML及其控制的角色直奋。
??我們在主城切換到副本的時候能庆,爆出來這個MissingReferenceException的問題。檢查后發(fā)現(xiàn)項目中資源釋放的邏輯沒有問題脚线,軌道里的代碼也符合制作規(guī)范搁胆。

統(tǒng)一資源釋放流程(部分):
1.先停止所有正在播放的TML
2.釋放/銷毀資源,這里包含TML、角色等(這一步的順序不重要)

軌道實現(xiàn)的規(guī)范(部分):
【軌道還原】在離開Clip渠旁、退出或銷毀Track等時機時攀例,要盡量還原被控角色的狀態(tài)

??軌道還原是因為我們TML主要用在戰(zhàn)斗中做技能表演,每個技能釋放完畢后顾腊,需要角色還原到自己的出場站位粤铭,所以大部分軌道都需要做還原這個處理。
??基于TML的設(shè)定杂靶,我們在做資源釋放時梆惯,就要保證上面的順序。因為TML結(jié)束的時候吗垮,仍然會訪問角色的對象垛吗,故TML需要先停止。

原因說明

??經(jīng)過進一步打Log測試烁登,我發(fā)現(xiàn)TML的停止跟Playable資源的停止并不是同步進行的怯屉。

測試得到一個結(jié)論:

PlayableDirector.Stop()與PlayerBehaviour.OnPlayableDestroy()是在同一幀執(zhí)行,但不是同步執(zhí)行饵沧,OnPlayableDestroy會晚一些锨络。

測試的Log流程(下面這些全部在同一個Update幀輸出):

  1. PlayableDirector.Stop()【主動停止TML】
  2. TimelineCtrl.OnDestroy()【停止TML后,銷毀角色跟TML】
  3. Update() 開始【停止TML時狼牺,做了個標記讓某個腳本的Update在第一行輸出Log】
  4. Update() 結(jié)束【同上足删,在最后一行輸出Log】
  5. PlayerBehaviour.OnPlayableDestroy()【Unity內(nèi)部在UpdateDirectorUpdateRegistrator::Forward調(diào)過來】
  6. Frame End【停止TML時,開了個協(xié)程在WaitForEndOfFrame之后輸出Log】
// OnPlayableDestroy的執(zhí)行堆棧
MoleTimeline.MoleStateMixer:OnPlayableDestroy (UnityEngine.Playables.Playable) 
...
0x00007ff7ae5e01d4 (Unity) ScriptingInvocation::Invoke
0x00007ff7ae56f5c0 (Unity) PlayableMethods::InvokePlayableDestroy
0x00007ff7ae562112 (Unity) Playable::DeallocateResources
0x00007ff7ae568862 (Unity) PlayableGraph::DestroyPendingPlayables
0x00007ff7ae568387 (Unity) PlayableGraph::Destroy
0x00007ff7ae56c876 (Unity) DirectorManager::ProcessPlayStateChanges
0x00007ff7ae56a657 (Unity) `DirectorManager::InitializeClass'::`2'::UpdateDirectorUpdateRegistrator::Forward
0x00007ff7ae2a437c (Unity) ExecutePlayerLoop
0x00007ff7ae2a4453 (Unity) ExecutePlayerLoop
0x00007ff7ae2aa099 (Unity) PlayerLoop

推測: Unity內(nèi)部維護了一個Playable的列表锁右,并在Update里每幀去做清理失受,PlayableDirector.Stop只做了一個可銷毀的標記。

解決方案

??暫時沒找到比較好的解決方案咏瑟,只是在每個Track的代碼里拂到,自己判斷要用的資源是否合法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末码泞,一起剝皮案震驚了整個濱河市兄旬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌余寥,老刑警劉巖领铐,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宋舷,居然都是意外死亡绪撵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門祝蝠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來音诈,“玉大人幻碱,你說我怎么就攤上這事∠附Γ” “怎么了褥傍?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長喇聊。 經(jīng)常有香客問我恍风,道長,這世上最難降的妖魔是什么誓篱? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任邻耕,我火速辦了婚禮,結(jié)果婚禮上燕鸽,老公的妹妹穿的比我還像新娘。我一直安慰自己啼辣,他們只是感情好啊研,可當(dāng)我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸥拧,像睡著了一般党远。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上富弦,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天沟娱,我揣著相機與錄音,去河邊找鬼腕柜。 笑死济似,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盏缤。 我是一名探鬼主播砰蠢,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唉铜!你這毒婦竟也來了台舱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤潭流,失蹤者是張志新(化名)和其女友劉穎竞惋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灰嫉,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拆宛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了讼撒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胰挑。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔓罚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瞻颂,到底是詐尸還是另有隱情豺谈,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布贡这,位于F島的核電站茬末,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盖矫。R本人自食惡果不足惜丽惭,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辈双。 院中可真熱鬧责掏,春花似錦、人聲如沸湃望。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽证芭。三九已至瞳浦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間废士,已是汗流浹背叫潦。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留官硝,地道東北人矗蕊。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像氢架,于是被迫代替她去往敵國和親拔妥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,687評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 記錄環(huán)境 Unity 2020.3.25f1 Timeline 1.4.8 問題描述 TML在AB包模式下达箍,某條軌...
    _Walker__閱讀 2,166評論 0 0
  • 前言 項目中要使用Timeline去做一套通用的打擊動作没龙,就學(xué)習(xí)一下,本來以為Timeline就是一個編輯窗口缎玫,拖...
    e196efe3d7df閱讀 3,220評論 0 2
  • 前言 這是Timeline系列的第三篇硬纤,前兩篇分別是Unity3D Timeline預(yù)覽和Unity3D Time...
    windknife閱讀 29,231評論 5 54
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法赃磨,內(nèi)部類的語法筝家,繼承相關(guān)的語法,異常的語法邻辉,線程的語...
    子非魚_t_閱讀 31,602評論 18 399
  • 一溪王、Unity簡介 1. Unity界面 Shift + Space : 放大界面 Scene界面按鈕渲染模式2D...
    MYves閱讀 8,180評論 0 22