Unity引擎关于APP后台下载支持的实现问题

1)Unity引擎关于APP后台下载支持的实现问题
2)Prefab对DLL中脚本的引用丢失
3)Unity DOTS资源加载问题
4)UnitySendMessage和_MultiplyMatrixArrayWithBase4x4_NEON调用导致崩溃


这是第376篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

Network

Q:最近很多游戏在Loading界面会标明支持后台下载模式,项目也计划实现一个,首先找到了Unity自带的BackgroundDownload解决方案,功能是可以的,也好接入,但项目中的文件数量比较多,有大几万个,同时建立这么多链接非常卡顿,经过简易优化,速度提升了一些,同时平滑建立连接数不再那么卡顿,但所有连接建立完还是需要很长时间,同时Android环境在创建1000+个下载服务时,会崩溃,没有明确的报错,每次会有下图中的异常!

咨询下各位大佬,如下几个问题:
1. 崩溃如何处理?
2. 如何平滑快速地建立起下载连接?
3. 有没有其他更好的处理类似问题的解决方案?

A:可以试试以下方案:

方案1:把所有要下载的任务,放到1个队列,开多个线程去处理这个队列的下载任务,并且限制设定同时下载的任务数。

方案2:把对应资源,根据一些规则(如:等级1-10级会用到的资源在1个zip包,11-20级会用到的资源放在1个zip包),然后根据一些条件在不同时刻来下载不同的zip包。

感谢hejianchun@UWA问答社区提供了回答


Prefab

Q:开发时,不希望策划看到源码,于是将源码替换成DLL,但是这样挂在Prefab上的脚本引用会丢失,请问怎么解决?

A:可以试试以下方案:
方案1:程序项目内也使用DLL的方式。
方案2:Component动态Add上去。

感谢hejianchun@UWA问答社区提供了回答


DOTS

Q:我用Unity ECS 1.0,如果场景里有子Scene,那么子Scene是否勾选的区别是什么?我知道,如果不勾选Bake函数在Editor模式就会开始执行,但如果里面有Resource加载这样的运行时接口就会报错,请问怎么解决?

针对以上问题,有经验的朋友欢迎转至社区交流分享:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技


Crash

Q:安卓平台崩溃问题,发现调用方法是UnitySendMessage和_MultiplyMatrixArrayWithBase4x4_NEON,各位有遇到过的吗?

Unity版本:2021.3.11f1c2;
libunity.0xe20870-libunity.0xe106b8是UnitySendMessage;
libunity.0x4457cc-libunity.0x50965c是_MultiplyMatrixArrayWithBase4x4_NEON。

信息如下:

Caused by: java.lang.Error: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Version '2021.3.11f1c2 (2c7757f00bfe)', Build type 'Release', Scripting Backend 'il2cpp', CPU 'arm64-v8a'
Build fingerprint: 'samsung/e3qxeea/e3q:14/UP1A.231005.007/S928BXXU1AWM9:user/release-keys'
Revision: '13'
ABI: 'arm64'
Timestamp: 2024-02-20 16:59:33+0800
pid: 30649, tid: 31379, name: Job.Worker 1  
uid: 10421
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x76ebcb5000
    x0  0000000000000000  x1  000000000000010e  x2  00000000000000ff  x3  0000000000ff0000
    x4  0000000000a20000  x5  0000000000000010  x6  00000076409907b8  x7  000000000f800000
    x8  00000075701da080  x9  00000076ebcb5004  x10 00000075701da08c  x11 0000000000000030
    x12 00000075701da098  x13 0000000000000030  x14 0000000000000000  x15 0000000000000000
    x16 0000000000000000  x17 00000076409905d4  x18 0000000000000000  x19 0000007640990970
    x20 00000075e01f3290  x21 00000076ebcb4ffc  x22 0000007640990601  x23 0000000038800000
    x24 00000000b8800000  x25 0000000000000030  x26 00000075701d6e08  x27 00000076ebcb4ffc
    x28 0000007640990550  x29 0000000000000000
    sp  0000007640990480  lr  0000000038000000  pc  000000766ae96870

backtrace:
      #00 pc 0000000000e20870  /data/app/~~iu98SuuYphKnX60ZotTOng==/-vNyiDhpbcBIkm6XnXDDGxg==/lib/arm64/libunity.so (BuildId: ae67f16cb275ae637576fa8522cf80f73e009dd8)
      #01 pc 0000000000e1550c  /data/app/~~iu98SuuYphKnX60ZotTOng==/-vNyiDhpbcBIkm6XnXDDGxg==/lib/arm64/libunity.so (BuildId: ae67f16cb275ae637576fa8522cf80f73e009dd8)
      #02 pc 0000000000e10ac4  /data/app/~~iu98SuuYphKnX60ZotTOng==/-vNyiDhpbcBIkm6XnXDDGxg==/lib/arm64/libunity.so (BuildId: ae67f16cb275ae637576fa8522cf80f73e009dd8)
      #03 pc 0000000000e106b8  /data/app/~~iu98SuuYphKnX60ZotTOng==/-vNyiDhpbcBIkm6XnXDDGxg==/lib/arm64/libunity.so (BuildId: ae67f16cb275ae637576fa8522cf80f73e009dd8)
      #04 pc 00000000004457cc  /data/app/~~iu98SuuYphKnX60ZotTOng==/-vNyiDhpbcBIkm6XnXDDGxg==/lib/arm64/libunity.so (BuildId: ae67f16cb275ae637576fa8522cf80f73e009dd8)
      #05 pc 0000000000445acc  /data/app/~~iu98SuuYphKnX60ZotTOng==/-vNyiDhpbcBIkm6XnXDDGxg==/lib/arm64/libunity.so (BuildId: ae67f16cb275ae637576fa8522cf80f73e009dd8)
      #06 pc 0000000000445c98  /data/app/~~iu98SuuYphKnX60ZotTOng==/-vNyiDhpbcBIkm6XnXDDGxg==/lib/arm64/libunity.so (BuildId: ae67f16cb275ae637576fa8522cf80f73e009dd8)
      #07 pc 00000000004451b4  /data/app/~~iu98SuuYphKnX60ZotTOng==/-vNyiDhpbcBIkm6XnXDDGxg==/lib/arm64/libunity.so (BuildId: ae67f16cb275ae637576fa8522cf80f73e009dd8)
      #08 pc 000000000050965c  /data/app/~~iu98SuuYphKnX60ZotTOng==/-vNyiDhpbcBIkm6XnXDDGxg==/lib/arm64/libunity.so (BuildId: ae67f16cb275ae637576fa8522cf80f73e009dd8)
      #09 pc 00000000000c37b4  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+208) (BuildId: 37f537c2ba9dcbb262a0a68f41a21da4)
      #10 pc 000000000005d084  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68) (BuildId: 37f537c2ba9dcbb262a0a68f41a21da4)

at libunity.0xe20870(Native Method)
at libunity.0xe1550c(Native Method)
at libunity.0xe10ac4(Native Method)
at libunity.0xe106b8(Native Method)
at libunity.0x4457cc(Native Method)
at libunity.0x445acc(Native Method)
at libunity.0x445c98(Native Method)
at libunity.0x4451b4(Native Method)
at libunity.0x50965c(Native Method)
at libc.__pthread_start(void*)(__pthread_start:208)
at libc.__start_thread(__start_thread:68)

针对以上问题,有经验的朋友欢迎转至社区交流分享:
UWA问答 | 游戏开发者互动问答社区 | 侑虎科技

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com

 

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中进行后台下载可以通过使用UnityWebRequest来实现。以下是一个简单的例子,演示了如何在后台下载文件: ```csharp using UnityEngine; using UnityEngine.Networking; public class DownloadManager : MonoBehaviour { private UnityWebRequest webRequest; private string downloadUrl = "https://www.example.com/file.zip"; private string savePath = "Assets/DownloadedFiles/file.zip"; public void StartDownload() { StartCoroutine(DownloadFile()); } private IEnumerator DownloadFile() { webRequest = UnityWebRequest.Get(downloadUrl); // 设置下载后台模式 webRequest.SendWebRequest(); while (!webRequest.isDone) { // 可以在这里监听下载进度 float progress = webRequest.downloadProgress; Debug.Log("Download progress: " + progress); yield return null; } if (webRequest.result != UnityWebRequest.Result.Success) { // 下载失败,打印错误信息 Debug.LogError("Download failed: " + webRequest.error); } else { // 下载成功,保存文件到本地 System.IO.File.WriteAllBytes(savePath, webRequest.downloadHandler.data); Debug.Log("Download completed!"); } webRequest.Dispose(); } } ``` 在上面的例子中,`StartDownload` 方法会启动后台下载。`UnityWebRequest` 会在后台下载文件,并使用 `SendWebRequest` 方法开始下载。然后,在一个循环中,我们可以监听下载进度,当下载完成时,将文件保存到本地。 请注意,如果你希望在使用UnityWebRequest时在Android或iOS设备上进行后台下载,你需要确保在Unity的Player Settings中启用了"Run in Background"选项。 此外,还可以使用Asset Bundles或第三方插件来进行更高级的后台下载操作。但以上例子演示了一个基本的后台下载实现

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值