Unity Google分包处理以及分包处理引起的CRI音效视频无法加载问题

Unity上架Google商店时根据Google要求,包体不得大于100M,并且编译时要选择64位。所以当包体大于100M要进行分包处理。
在这里插入图片描述进行勾选后,Unity会自动进行分包处理。将会导出APK与OBB文件。OBB文件要命名为main.BundleVersionCode.PackageName.obb。
本地测试时在Android/obb文件夹下建立新文件夹,文件夹命名为包名,将obb文件拷入,程序便可运行。
同时如果项目中使用了CRIWARE,本地SreamingAssets文件夹下的音效与视频将无法加载。
Unity Google分包处理以及分包处理引起的CRI音效视频无法加载问题_第1张图片
详情点击查看
具体处理办法
1.将资源采用热更新方式加载
2.将资源从StreamingAssets拷入PersistentDataPath文件夹

 IEnumerator MoveAudioMovie(string path)
    {
        string srcPath = Path.Combine(Application.streamingAssetsPath, path);
        string outPath = Application.persistentDataPath + "/"+path;
        Debug.Log("输入目录==============="+srcPath);
        if (!Directory.Exists(Application.persistentDataPath + "/Sounds"))
            Directory.CreateDirectory(Application.persistentDataPath + "/Sounds");
        if (!Directory.Exists(Application.persistentDataPath + "/Movie"))
            Directory.CreateDirectory(Application.persistentDataPath + "/Movie");
        if (!File.Exists(outPath))
        {
            Debug.Log("不存在文件夹");
            using (WWW www = new WWW(srcPath))
            {
                yield return www;

                if (www.isDone)
                {
                    //拷贝内容到安卓指定的持久化目录路径

                    Debug.Log("输出目录=========="+outPath);
                    Debug.Log(www.bytes.Length+"数据长度");
                    FileStream fs = new FileStream(outPath, FileMode.OpenOrCreate, FileAccess.Write);
                    fs.Write(www.bytes,0,www.bytes.Length);
                    fs.Flush();  
                    fs.Close();  
                    Debug.Log("写入成功");
                }
            }
        }


        Debug.Log("Complete");
    }

同时处理Adx2SoundSetting脚本

 public static bool Initialize(string adxFilesPathInStreamingAssetsPath, string acfFileName)
        {
           
                //相关代码
                
                //处理读取路径
                #if GooglePlay
                 var acfFilePath = Path.Combine(
                    GetPersistentDataPath(_filesPathInStreamingAssetsPath), acfFileName);
                #else
                var acfFilePath = Path.Combine(
                    GetStreamingAssetsPath(_filesPathInStreamingAssetsPath), acfFileName);
                #endif
              
            }

          
        }

以及Player脚本

public bool SetFile(CriFsBinder binder, string moviePath, SetMode setMode = SetMode.New)
		{
			#if GooglePlay
		
		        //相关代码
		        
		        //处理读取路径
				moviePath = System.IO.Path.Combine(Application.persistentDataPath, moviePath);
			
			#else
		
		       //相关代码

		       //处理读取路径
				moviePath = System.IO.Path.Combine(CriWare.streamingAssetsPath, moviePath);
		
            #endif
			
		}

你可能感兴趣的:(Unity常见问题)