Unity经验之谈-DoTween动画结束匿名委托闭包之坑

产生问题:

成百上千个物体放在List列表里面循环,每个物体都要使用移动和移动结束事件。

BUG:

动画结束之后我想隐藏该物体,结果却没有正常的隐藏,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
foreach (var item in lists)
{
    if (item != null)
    {
        item .transform.DOLocalMove(AnchorBanker.transform.localPosition, 0.5f).OnComplete(() =>
        {
            item .gameObject.SetActive(false);
        });
 
    }
 
}

产生的表现:

这个List的最后一个item才会被正常的隐藏。

原因:匿名委托中使用的item指向了lists的最后一个item

解决办法:

将Item的引用缓存起来,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
foreach (var item in lists)
{
    if (item != null)
    {
        var go = item;
        go.transform.DOLocalMove(AnchorBanker.transform.localPosition, 0.5f).OnComplete(() =>
        {
            go.gameObject.SetActive(false);
        });
 
    }
 
}

  

posted @   威少小二orz  阅读(2469)  评论(4编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示