关于Animation参数missing的坑

前段时间游戏遇到一个真机闪退问题,没有打印,没有加载报错,找问题来真是头大。

渠道:PPTV

问题:模型预制体上一个Animation组件中 clip丢失。

现象:加载资源闪退。

猜想:我们项目是依赖打包,该预制体单独打包为A,它依赖的所有clip打成一个包B。加载预制体A时,发现它有依赖关系的动画片段未加载,会去加载B包,但B包里面没有该动画片段。没有报错是因为A包和依赖包B确实加载成功。

疑问:只有一个渠道才会闪退,其他平台都能正常运行,会不会是PPTV的SDK处理加载导致崩溃。

今天在加载资源的地方增加检查Animation的clip missing方法。发现没有直接调用的API,所以通过比较GetClipCount()和获取所有动画片段数量来比较是否有动画片段丢失。

Unity中动画组件获取当前动画片段数量:GetClipCount()

增加一个方法计算当前所有动画片段数量GetClipCount(Animation ani),如果是编辑器上的话,可以直接调用API:AnimationUtility.GetAnimationClips。

  public void CheckAnimationClip(GameObject go,string assetPath)
        {
            if (!UsedAssetBundle && FResourceCommon.IsEditor())
            {
                var m_Animations = go.transform.GetComponents<Animation>();
                for (int i = 0; i < m_Animations.Length; i++)
                {
                    var m_Animation = m_Animations[i];
                    //var _temp = AnimationUtility.GetAnimationClips(m_Animation.gameObject);
                    int _clipCount = m_Animation.GetClipCount();
                    if (GetClipCount(m_Animation) != _clipCount)
                    {
                        Log.Error("检查动画组件是否missing:" + assetPath + ",GameObject名称:" + m_Animation.name);
                    }
                }
            }
        }

        private int GetClipCount(Animation ani)
        {
            int _count = 0;
            foreach (AnimationState item in ani)
            {
                _count++;
            }
            return _count;
        }

比较两个数量是否一致,如果不一致说明有动画片段丢失。

猜你喜欢

转载自blog.csdn.net/qq_33461689/article/details/122671841