vlambda博客
学习文章列表

【厚积薄发】ProtoBuf-net Serializer.Serialize产生大量的GC

这是第289篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。


UWA 问答社区:answer.uwa4d.com


本期目录:

  • ProtoBuf-net Serializer.Serialize产生大量的GC

  • 如何快速在工程代码中每个函数注入自己想要插入的代码

  • Unity设置IL2CPP导出的Mac平台的Xcode工程中,如何通过Object-C代码反调Unity侧的C#代码

  • ShaderGraph生成的Shader在UGUI上使用的问题


Mono


Q:在我们游戏中有使用到ProtoBuf的序列化,在查找性能问题的时候看到序列化的函数产生了大量的GC,如下图:

【厚积薄发】ProtoBuf-net Serializer.Serialize产生大量的GC


【厚积薄发】ProtoBuf-net Serializer.Serialize产生大量的GC


【厚积薄发】ProtoBuf-net Serializer.Serialize产生大量的GC


【厚积薄发】ProtoBuf-net Serializer.Serialize产生大量的GC


A:可以参考《Unity3D游戏GC优化总结---protobuf-net无GC版本优化实践》:

https://www.cnblogs.com/SChivas/p/7898166.html


感谢lanyt@UWA问答社区提供了回答欢迎大家转至社区交流:

https://answer.uwa4d.com/question/621f2a12d83cff4676f5b924

Script


Q:如何快速地在工程代码中的每个函数注入自己想要插入的代码?有说借助Mono Ceil的,还有一些库没有开源,所以想请问有没有其他方面的资料可以参考?


A:可以参考《使用Mono.Cecil实现IL代码注入》:

https://www.jianshu.com/p/a5276aadccdd


感谢羽飞@UWA问答社区提供了回答欢迎大家转至社区交流:

https://answer.uwa4d.com/question/6220e17380139e0c1f157aae

Script


Q:在iOS平台下,IL2CPP导出的Xcode工程中Object-C调用Unity方法是通过SendMessage实现的:

【厚积薄发】ProtoBuf-net Serializer.Serialize产生大量的GC


请问在Mac平台下IL2CPP方式导出的Mac工程,如何通过Object-C代码反调Unity侧的C#代码?也是通过SendMessage的方式吗?但是我没找到相关的接口。


A:用SendMessage是可以实现的,但是效率不好。可以参考我这个Object-C回调Unity。把你需要的接口,写成函数指针,在Object-C里注册,需要时做回调。


可以参考《Unity与Object-C交互》:

https://www.jianshu.com/p/8471114d6c3d


感谢廖武兴@UWA问答社区提供了回答欢迎大家转至社区交流:

https://answer.uwa4d.com/question/6215fcede7172c2775f76e56

Shader


Q:我用URP 10.4.0和Shader Graph10.4.0建立了一个用于UGUI Image的Shader,它能在PC上正确运行,但是在手机上UV就错误了,如下图:

【厚积薄发】ProtoBuf-net Serializer.Serialize产生大量的GC


【厚积薄发】ProtoBuf-net Serializer.Serialize产生大量的GC


如下图,这样直接连一个简单的Tex2D就会出现,ShaderGraph也如下图连接:

【厚积薄发】ProtoBuf-net Serializer.Serialize产生大量的GC


我使用Unity 2022 URP13.1.6 SG13.1.6再次建立同样的ShaderGraph Shader在手机上是正确的,但是我暂时没有办法更换Unity版本。


A:可以参考这个视频的做法,应该是不能直接把ShaderGraph生成的Shader直接用到UGUI上的,需要做一些调整:

https://www.youtube.com/watch?v=RxW7_qgkXPo


感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/6221ec0d80139e0c1f16e5e2

封面图来源于:Protobuf-net Optimization

Protobuf-net无GC优化版本,另外还提供了一些无GC自定义数据结构,以及对Unity 3D中C#代码的各种无GC使用方式测试。

https://lab.uwa4d.com/lab/5c81e27c72745c25a8d2aa53



今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。


官网:www.uwa4d.com

官方技术博客:blog.uwa4d.com

官方问答社区:answer.uwa4d.com

UWA学堂:edu.uwa4d.com


【厚积薄发】ProtoBuf-net Serializer.Serialize产生大量的GC




近期精彩回顾