在设备(Android)中激活UI游戏对象时内存不足

在设备(Android)中激活UI游戏对象时内存不足,android,unity3d,game-development,Android,Unity3d,Game Development,我们正在使用Unity 2019.2.17f1开发一款手机游戏。只有当我们在物理Android设备上测试游戏时,才会出现一个bug,而不是在所有设备上。有时,当激活某些UI游戏对象时,游戏只是硬崩溃。在检查logcat输出后,我们得到: Trying to allocate: 8388609B with 16 alignment. MemoryLabel: Texture Allocation happened at: Line:78 in Memory overvie

我们正在使用Unity 2019.2.17f1开发一款手机游戏。只有当我们在物理Android设备上测试游戏时,才会出现一个bug,而不是在所有设备上。有时,当激活某些UI游戏对象时,游戏只是硬崩溃。在检查logcat输出后,我们得到:

    Trying to allocate: 8388609B with 16 alignment. MemoryLabel: Texture
    Allocation happened at: Line:78 in 
    Memory overview

    [ ALLOC_TEMP_THREAD ] used: 35494B | peak: 0B | reserved: 2850816B 
    [ ALLOC_TEMP_JOB_1_FRAME ] used: 0B | peak: 0B | reserved: 11534336B 
    [ ALLOC_TEMP_JOB_2_FRAMES ] used: 0B | peak: 0B | reserved: 1048576B 
    [ ALLOC_TEMP_JOB_4_FRAMES ] used: 0B | peak: 0B | reserved: 2097152B 
    [ ALLOC_TEMP_JOB_ASYNC ] used: 6019860B | peak: 0B | reserved: 14680064B 
    [ ALLOC_DEFAULT ] used: 119089062B | peak: 126982715B | reserved: 121770988B 
    [ ALLOC_GAMEOBJECT ] used: 1456307B | peak: 1456307B | reserved: 1582524B 
    [ ALLOC_GFX ] used: 657024804B | peak: 657024804B | reserved: 657035387B 

     #0 0xc0ad1055 (libunity.so) ? 0x0
     #1 0xc09d027b (libunity.so) ? 0x0
     #2 0xc05923c9 (libunity.so) ? 0x0
     #3 0xc05909f9 (libunity.so) ? 0x0
     #4 0xc0590d01 (libunity.so) ? 0x0
     #5 0xc0590cad (libunity.so) ? 0x0
     #6 0xc06444c5 (libunity.so) ? 0x0
     #7 0xc04ec069 (libunity.so

我检查了游戏中的纹理,似乎没有问题。我试图将它们的大小都设置为512(与Atlas一起),但问题仍然存在。错误是相对安静的日志,Unity甚至不输出任何东西。这只发生在三个或四个游戏对象上。对于界面,我们在屏幕空间覆盖画布上使用标准的Unity RectTransforms。我们尝试了一个新的Unity版本(2019.3),但也没有任何帮助。

我们最终使用Unity Profiler发现了问题。问题是错误不是由图像纹理引起的,而是由字体引起的。由于某种原因,加载时字体会超重。替换字体可以解决问题。

您是否尝试过在崩溃的设备上创建内存快照,并专门查看其中的纹理分配,以确定是哪一个造成了问题?想知道“你检查过setpass呼叫和DRAWCALL吗?”。他们希望@Remy“澄清启用UI元素时编辑器中会发生什么。我认为启用UI对象时可能会融化资源”。我想我将研究如何做到这一点。我对这种调试没有经验,所以可能需要一段时间,但我会将我的发现反馈给您。然而,我尝试过禁用/启用多个纹理,尝试以一种更为尝试和错误的方式缩小问题范围,但我无法确定其中一个。这似乎不是一个特定的纹理。在该设备中,内存大小是多少?@ErsinGülbahar,其中一个设备是三星S10+。它应该有足够的内存。