unity 打包时 StreamingAssets文件的数目过多

下面打包时报的错误代码(只有前半部分)

CommandInvokationFailure: Gradle build failed. 

C:/Program Files/Java/jdk1.8.0_171\bin\java.exe -classpath "D:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-4.0.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx2048m" "assembleRelease"

 

stderr[

 

FAILURE: Build failed with an exception.

 

* Where:

Build file 'F:\project\IlRuntime\ILRuntimeU3D-master\ILRuntimeDemo\Temp\gradleOut\build.gradle'

 

* What went wrong:

Could not compile build file 'F:\project\IlRuntime\ILRuntimeU3D-master\ILRuntimeDemo\Temp\gradleOut\build.gradle'.

> startup failed:

  General error during class generation: 3566

  

  java.lang.ArrayIndexOutOfBoundsException: 3566

   at org.codehaus.groovy.classgen.asm.CallSiteWriter.getCreateArraySignature(CallSiteWriter.java:58)

应该是越界了, 3566这正是StreamAssets下资源数量不明,找到org.codehaus.groovy.classgen.asm.CallSiteWriter.getCreateArraySignature 的源码

private static String [] sig = new String [255];
     private static String getCreateArraySignature(int numberOfArguments) {
     if (sig[numberOfArguments] == null) {
     StringBuilder sb = new StringBuilder("(");
     for (int i = 0; i != numberOfArguments; ++i) {
     sb.append("Ljava/lang/Object;");
     }
     sb.append(")[Ljava/lang/Object;");
     sig[numberOfArguments] = sb.toString();
     }
     return sig[numberOfArguments];
     }

      数组的最大长度是255,所以就要解决StreamingAssets中文件数量记录值 ,如果其中的文件都是必要的那就删不了,只有修改build.gradle的属性【aapOptions】这个选项就是要记录的文件。修改这个就要使用自定义的gradle template,

就是将截图中的这个选项勾选

然后修改mainTemplate

这个就是默认的最后一个表示StreamingAssets所有文件都会被记录,将它删掉改成自己的文件后缀名,

    aaptOptions {

        noCompress '.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**

    }

修改后

aaptOptions {

        noCompress '.unity3d', '.ress', '.resource', '.obb','.ab','.manifest'

    }

如果有什么不对的地方,请指出。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity是一种跨平台的游戏引擎,很多游戏都使用它来开发。在Unity中,打包后读取StreamingAssets是一种常见的方式,它可以让开发者将数据文件一起打包到应用程序中,再通过代码来读取这些数据文件UnityStreamingAssets文件夹是存储相关文件的一个文件夹,所有在该文件夹中的文件都将被打包到应用程序中。为了读取这些文件,可以使用Unity的WWW类或者UnityWebRequest类。这两个类都可以从本地文件系统或者网络地址读取文件,然后将文件内容转化为字符串或字节流。 如果想要从StreamingAssets中读取文件,可以使用以下代码: ``` string filePath = Path.Combine(Application.streamingAssetsPath, "FileName.extension"); ``` 其中FileName.extension是文件名和文件类型,可以是txt、json、xml等等。读取StreamingAssets中的文件可以使用以下代码: ```csharp IEnumerator ReadStreamingAssetsFile(string path) { string filePath = Path.Combine(Application.streamingAssetsPath, path); UnityWebRequest www = UnityWebRequest.Get(filePath); www.SendWebRequest(); while (!www.isDone) { yield return null; } if (!www.isNetworkError && www.isDone) { byte[] bytes = www.downloadHandler.data; string jsonString = Encoding.UTF8.GetString(bytes); //Do something with the json string } } ``` 这是一种通过UnityWebRequest类来从StreamingAssets中读取文件的方法。先根据文件路径获取完整路径,然后使用UnityWebRequest来获取文件内容,并将其转化为字节数组或字符串,最后进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值