Unity

从Unity的OOM崩溃看iOS的虚拟内存地址空间

问题 看到线上有一类崩溃是发生在MemoryManager::Allocate中: 1 __pthread_kill + 8 2 pthread_kill + 208 3 raise + 28 4 DebugStringToFilePostprocessedStacktrace (Runtime/Logging/LogAssert.cpp:1134) 5 DebugStringToFile (Runtime/Logging/LogAsser…

排查嵌套画布导致的崩溃问题

更新(2025-09-25) Unity 已复现问题:Crash on UI::Canvas::UpdateEventIndexesRecursive when a script modifies nested Canvases in Play mode while using command line argument -debugallocator 问题 项目在线上有一些崩溃: Thread 0 Crashed: 0 Uni…

Unity中全局禁用AssetBundle的兼容性检查

问题 (HybridCLR与TypeTree) 解决方案 Android 确定bool变量的偏移 iOS 实现 问题 (HybridCLR与TypeTree) 使用HybridCLR做热更新时,AssetBundle需要开启TypeTree或者禁用兼容性检查(HybridCLR文档)。禁用兼容性检查是Unity的内部功能,C#层只能对异步加载…

Unity中REPL功能的实现

目标 支持在编辑器中使用 支持在IL2CPP打包版本中使用(借助HybridCLR) 支持和平常开发一样的代码编写方式和语法,如变量定义、条件语句、循环语句、函数定义和类定义等 支持直接访问非公有类、方法、属性和字段,不需要通过反射 项目 https://github.com/A…

RTT与半透明材质

问题 分析 解决方案 例1:2个使用 Alpha Blend 材质渲染的物件 例2:2个使用 Additive 材质渲染的物件 通用情况的证明 实际应用的问题 结论 链接 问题 为了实现期望的层级(UI -> 模型 -> UI),一些模型改为了先使用RTT渲染到贴图,再使用RawImage显示到UI…

排查场景加载后贴图丢失的问题

更新 问题 排查 项目内排查与分析 构造复现工程排查 解决方案 更新 Unity QA已复现问题:https://issuetracker.unity3d.com/issues/textures-become-missing-when-assetbundlecreaterequest-dot-assetbundle-is-called-in-ondestroy 问题 QA在使用Android设…

排查HybridCLR引发的崩溃问题

更新 2025-08-17 2025-07-28 2024-01-16 问题 初步排查 进一步排查 在 hybridclr_trial 复现 在 mono 复现 解决方案 其他崩溃的情况(2025-07-28更新) 新解决方案(2025-08-17更新) 更新 2025-08-17 实现了一个规避方案:https://github.com/AlanLiu90/Hyb…

排查Unity游戏使用IL2CPP时的多线程代码导致崩溃的又一个问题

集成了HybridCLR DHE的版本上线后,看到了一些多线程代码的崩溃。排查之后,发现根本原因是il2cpp本身的bug,这里通过一个不集成HybridCLR DHE的工程,记录下排查的过程。 更新 2023-07-26 Unity QA已复现问题:https://issuetracker.unity3d.com/issues/and…

排查HybridCLR崩溃问题

问题 排查 调试符号 确定发生崩溃的行号 确定发生崩溃的指令 初步分析和修复 进一步分析 链接 问题 项目集成了HybridCLR DHE之后,在测试服测试过程中,从Unity Cloud Diagnostics看到了一些崩溃,主要都和泛型相关。其中占比最多的崩溃是: 0 libil2cpp.so …

使用内存映射文件优化Unity游戏的内存占用

更新(2025-10-11) 简介 测试 malloc vs calloc Unity中的应用 IL2CPP 项目中的实际应用 Addressables 测试1 测试2 测试3 Font HybridCLR 链接 更新(2025-10-11) 对于iOS,系统限制了一个进程的虚拟内存地址空间大小,使用只读的内存映射文件,虽然不会增…

优化AnimatorController的内存占用

问题 现有方案 新方案思考与测试 方案1 方案2 方案3 最终方案 链接 问题 游戏的一个房间内,AnimatorController占用的内存可能达到35MB以上(16个角色的情况下,由于复用,一般会有10多个AnimatorController),属于占用内存比较大的一块,考虑优化 现有方案…

排查 Resources.UnloadUnusedAssets 导致栈上对象被释放的问题

问题 排查 分析代码 复现 修复 链接 问题 游戏在房间内重连时,有空对象的报错,代码的基本逻辑如下: void WarmUp() { var svc = new ShaderVariantCollection(); svc.name = "CustomSVC"; foreach (var variantData in currentVariantDatas) { var shader …

排查Unity游戏使用IL2CPP时的多线程代码导致崩溃的问题

更新(2023-04-10) 问题 排查 查看IL2CPP代码 确定执行流程 构造复现工程 调试与分析 修复 链接 更新(2023-04-10) Unity 2020.3.47已修复该问题:IL2CPP: Fixed race condition when creating generic class metadata. 问题 游戏新版本上线后,在 Xcode O…

排查Unity游戏在安卓设备上,调用FileInfo.Exists可能导致卡顿的问题

问题 初步排查 深入排查 文件系统 代码分析 simpleperf 内核代码分析 内核代码提交记录 其他机型分析 Redmi 7A/6 Pro/9 Oppo A37m 其他资料 结论 链接 问题 游戏的海外版本在一些手机上,进行资源更新的阶段,游戏会卡住几十秒。下面是不同设备的测试结果 型…

排查 Unity 游戏在 iOS 平台的内存泄露问题

问题 排查 Allocation 工具 autoreleasepool 查看 observer 的回调函数 比较 CFArrayGetValueAtIndex 其他 Allocation 中显示的调用栈没有显示 CFArrayGetValueAtIndex 的原因 获取进程占用的内存 链接 问题 在游戏的大厅场景,放着不动,总内存占用一直在增…

排查 Unity 中使用 HttpClient 导致游戏卡住一段时间的问题

问题 项目尝试使用 HttpClient 下载 AssetBundle,测试时发现有可能导致编辑器卡住一段时间。 下载的代码逻辑大致如下: using var request = new HttpRequestMessage(HttpMethod.Get, url); using (HttpResponseMessage response = await httpClient.SendAs…

集成 Addressables 过程中遇到的问题及解决方法

在集成Addressables的过程中遇到了包括bug和性能问题在内的很多问题,除了一个未重现的问题外,bug和性能问题都已反馈给了Unity。部分问题我自己解决了,一起记录在这里,供大家参考。 项目使用的是Unity 2020.3.30 和 Addressables 1.20.3(一开始使用的是 …

Unity游戏在华为设备升级鸿蒙系统后的掉帧问题

问题背景 前置知识点 查证分析 华为的反馈 分析Unity 2017构建的版本 分析Unity 2020构建的版本 其他分析 修复方案 其他 链接 问题背景 游戏在“荣耀9x”上原本帧率正常,但手机升级到鸿蒙系统后,出现了严重的掉帧现象。后台应用(网易云音乐、微信、QQ)会加…

Unity客户端卡loading问题

更新 问题 排查 Unity源码分析 相关函数的基本逻辑示意 加载Mesh的流程 推论 验证 解释 另一个卡loading问题 相关代码示意 分析 验证 更新 新的分析 Unity的正式修复 更新 2025-04-23 Unity复现了本文中第二个问题: https://issuetracker.unity3d.com/issues…

AssetBundle打包的不确定性问题

问题 分析AssetBundle 分析Unity源码 其他 更新(2022-11-22) 链接 问题 项目开始使用Addressables后,测试AssetBundle的生成是否有不确定性问题时,发现一个只包含shader的AssetBundle发生了变化。 分析AssetBundle 使用Unity自带的工具 WebExtract 和 bin…

排查Unity中多线程创建常量字符串的问题

问题 分析过程 解决方案 链接 问题 内部测试时,在iPhone 11上发现以下报错: NullReferenceException: A null value was found where an object instance was required. Common.WeaponSkinManager.Init () ConsoleInitializer.Start () 该报错会导致后续发…

Unity游戏多线程反序列化json触发异常的问题

更新 2023-03-20 2022-11-30 问题 排查过程 Memory Barrier Acquire Semantic vs Release Semantic Thread.VolatileRead/Write vs Volatile.Read/Write 链接 更新 2023-03-20 Unity发布了com.unity.nuget.newtonsoft-json 3.1.0,对应Newtonsoft.Json 13.0.2…