問題描述
問題出現(xiàn)在Unity的Button點擊事件中,對同一個Sequence引用,頻繁使用OnPointerDown和OnPointerUp事件來控制其創(chuàng)建和Kill() 時,會因處理速度問題導(dǎo)致出現(xiàn)其中某次的Sequence沒有被正確關(guān)閉:
首先全局聲明一個 sequence 引用:
Sequence sequence = DOTween.Sequence();
然后在兩個連續(xù)快速觸發(fā)的函數(shù)中分別創(chuàng)建,Kill該sequence:
// 鼠標(biāo)按下時,用引用sequence創(chuàng)建一個新的序列
public override void OnPointerDown(PointerEventData eventData)
{
sequence = DOTween.Sequence();
// infinite循環(huán)執(zhí)行調(diào)用一個函數(shù) MassiveFunctionA
sequence.AppendCallback(MassiveFunctionA).SetDelay(0.1).SetLoops(-1);
}
// 鼠標(biāo)抬起時,將當(dāng)前的sequence引用下的序列kill掉; 但在此之前執(zhí)行了一段很重的
// 代碼 MassiveFunctionB
public override void OnPointerUp(PointerEventData eventData)
{
MassiveFunctionB()
sequence.Kill();
sequence = null;
}
按設(shè)計上的思路,上述代碼會在按下時循環(huán)執(zhí)行MassiveFunctionA,在抬起時中止循環(huán),再次按下時再循環(huán)執(zhí)行MassiveFunctionA,再抬起再中止循環(huán);
問題分析:
然而實際情況時當(dāng)極快速的連續(xù)點擊(down-up-down)時, 當(dāng)?shù)诙蝑own執(zhí)行到 sequence = DOTween.Sequence()時, OnPointerUp中的MassiveFunctionB()仍未處理完,故在sequence.Kill()未被執(zhí)行時,就執(zhí)行了一遍第二次down中的?DOTween.Sequence(),此時如果OnPointerUp繼續(xù)執(zhí)行下去會關(guān)閉第二次down時生成的 sequence(猜想是第一次down時生成的sequence因為引用丟失可能已經(jīng)無法關(guān)閉了,該循環(huán)會在后臺一直執(zhí)行)文章來源:http://www.zghlxwxcb.cn/news/detail-515167.html
解決方案:
解決方案如下,需要保證內(nèi)存中只有一份叫做sequence的動畫序列在執(zhí)行,所以每次生成新序列之前需要把該引用sequence下的實際內(nèi)存關(guān)閉掉:文章來源地址http://www.zghlxwxcb.cn/news/detail-515167.html
// 解決方案:在生成新sequence前執(zhí)行一遍 Kill 和 null 操作, 防止OnPointerUp沒有正確關(guān)閉仍在運行中的sequence
public override void OnPointerDown(PointerEventData eventData)
{
if (sequnce != null)
{
sequence.Kill();
sequence = null;
}
sequence = DOTween.Sequence();
// infinite循環(huán)執(zhí)行調(diào)用一個函數(shù) MassiveFunctionA
sequence.AppendCallback(MassiveFunctionA).SetDelay(0.1).SetLoops(-1);
}
public override void OnPointerUp(PointerEventData eventData)
{
MassiveFunctionB()
if (sequnce != null)
{
sequence.Kill();
sequence = null;
}
}
到了這里,關(guān)于記錄Dotween中Sequence頻繁創(chuàng)建和關(guān)閉時出現(xiàn)的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!