1)Unity的粒子总是丢材质
2)C#传给C++的Byte数组如何释放
3)CommandBuffer.DrawProcedural在手机上为什么不生效
4)游戏加载场景碰撞,会弹出显卡报错,驱动程序超时
这是第359篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。
UWA社区主页:community.uwa4d.com
UWA QQ群:465082844
Loading
Q:Unity打包AssetBundle后总是丢粒子的材质,而且不固定,有时候这个丢有时候那个丢。编辑器下引用是没问题的,内容也打进去了,资源加载也没问题,就是真机上丢引用了,先加载材质球也一样的,只能重新导入这个材质才没问题。重新导入后Meta文件和材质文件也是没有差异的,只能删除Lib文件夹。使用的是Unity 2020.4.48版本,打包的也是稳定的AssetBundleName。
有没有一样的情况?
A1:Unity打AssetBundle,如果不删除已有目录的AssetBundle,是增量打AssetBundle的,感觉是这里导致的Bug。
可以试着打包前删除上一次打的所有AssetBundle,或者用BuildAssetBundleOptions.ForceRebuildAssetBundle强制打AssetBundle试试。
感谢范世青@UWA问答社区提供了回答
A2:我们的解决方案是删除对应异常的AssetBundle(和相关依赖的AssetBundle),重新生成就可以解决(重新生成的包内容、依赖和异常时的包对比没有变化)。我们发现如果Prefab是变体最容易出现(偶发),且每次出现这个情况,几个不同的机器打包就会有一部分机器出现相同情况(不全部都是),一部分又没有问题。这个没法通过Reimport方法解决。
感谢1 9 7 3-311135@UWA问答社区提供了回答
Script
Q:游戏里用C#读取文件数据byte[],然后传给C++(unsigned char*),有点不明白,这个数组是同一份内存还是复制了一份?
在C++调用free()释放会闪退,猜想应该没有复制,如果是这样,C#这边读出来先不管,C++那边还引用着,也没释放(析构时置空引用),要怎么释放呢?
A:C#创建的非托管堆内存,在C#中通过Marshal.FreeHGlobal(InPtr)释放。
感谢CaptainLuft@UWA问答社区提供了回答
Rendering
Q:CommandBuffer.DrawProcedural为什么在手机上不生效?
cb.DrawProcedural(Matrix4x4.identity, material, shaderPass, MeshTopology.Triangles, 3, 1, null);
就是URP自定义的Feature Pass里Draw一个三角形来模拟BLIT(网上挺多这种节省性能的做法的文章),这个效果在Unity下播放能生效,但打包到华为NOVA6上或者雷电模拟器上运行就不生效了,不知道是不支持还是其他问题?
针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/653a68083625c22cffcb1cca
Loading
Q:游戏加载场景碰撞,会弹出显卡的报错,驱动程序超时,这是为什么呢?有什么解决方法吗?
针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/653f6a193625c22cffcb1cd1
封面图来源于网络
今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。
UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844