Unity AB包问题总结

Unity版本 2019.4.9f1
1、ab包加载安卓端StreamingAssets中的文件,出现打包的文本(json文本)无法加载的问题,其他资源(预制体,音乐,图片)可正常加载
使用的路径为Application.streamingAssetsPath + “/” +相应的包路径
在安卓中打印出日志如下
安卓手机上显示的日志如上图
解决方式:暂时使用Resources文件夹下的文本文件

2、在编辑器中加载AB包资源出现材质丢失,贴图变为紫色等问题
解决方式:再资源加载完毕后,重新赋上材质

	private List<Material> thisMaterial;
    private List<string> shaders;

    private void Awake()
    {
        ReallyFixShader();
    }
    public void ReallyFixShader()
    {
#if UNITY_EDITOR
        //Debug.Log("Unity Editor");

        thisMaterial = new List<Material>(6);
        shaders = new List<string>(6);


        MeshRenderer[] meshRenderer = GetComponentsInChildren<MeshRenderer>();
        int length = meshRenderer.Length;
        for (int i = 0; i < length; i++)
        {
            int count = meshRenderer[i].materials.Length;
            for (int j = 0; j < count; j++)
            {
                Material _mater = meshRenderer[i].materials[j];
                thisMaterial.Add(_mater);
                shaders.Add(_mater.shader.name);
            }
        }
        thisMaterial.Clear();

        SkinnedMeshRenderer[] meshSkinRenderer = GetComponentsInChildren<SkinnedMeshRenderer>();
        length = meshSkinRenderer.Length;
        for (int i = 0; i < length; i++)
        {
            int count = meshSkinRenderer[i].materials.Length;
            for (int j = 0; j < count; j++)
            {
                Material _mater = meshSkinRenderer[i].materials[j];
                thisMaterial.Add(_mater);
                shaders.Add(_mater.shader.name);
            }
        }
        thisMaterial.Clear();

        Image[] images = GetComponentsInChildren<Image>();
        length = images.Length;
        for (int i = 0; i < length; i++)
        {
            var m = images[i].material;
            thisMaterial.Add(m);
            shaders.Add(m.shader.name);
        }
        for (int i = 0; i < thisMaterial.Count; i++)
        {
            thisMaterial[i].shader = Shader.Find(shaders[i]);
        }
        thisMaterial.Clear();


        SpriteRenderer[] srs = GetComponentsInChildren<SpriteRenderer>();
        length = srs.Length;

        for (int i = 0; i < length; i++)
        {
            //var m = srs[i].material;
            var m = srs[i].sharedMaterial;
            thisMaterial.Add(m);
            shaders.Add(m.shader.name);
        }
        for (int i = 0; i < thisMaterial.Count; i++)
        {
            thisMaterial[i].shader = Shader.Find(shaders[i]);
        }
        thisMaterial.Clear();


        Renderer[] rs = GetComponentsInChildren<Renderer>();
        length = rs.Length;
        for (int i = 0; i < length; i++)
        {
            //var m = rs[i].material;
            //Debug.Log("材质"+i+"长度"+length);
            var m = rs[i].sharedMaterial;
            thisMaterial.Add(m);
            shaders.Add(m.shader.name);
        }
        for (int i = 0; i < thisMaterial.Count; i++)
        {
            thisMaterial[i].shader = Shader.Find(shaders[i]);
        }
        thisMaterial.Clear();
#endif

    }

3、在这里插入图片描述
错误提示:The Animator Controller (AtkReadyIcon) you have used is not valid. Animations will not play
原因:在编辑器失去焦点后加载AB包中的Animator
解决方法:
在Editor->Preference->General->Script Changes While Playing 修改为Recompile After Finished Playing
(注意是Finished

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值