你一身傲骨怎能输
大家好,我是傲骨,一名热爱游戏开发的程序员,主要是游戏客户端研发方向。
我拥有计算机科学和应用数学学士学位,并在游戏行业工作了超过10年,专注于使用Unity和C#进行游戏开发。我参与过多个独立游戏项目,从概念设计到发布,积累了丰富的实践经验。
我会定期分享相关技术经验供大家学习和参考,已有的博客文章也会随着时间而逐渐更新与优化,我会尽量将每一篇文章写写满干货,让大家能阅读后有所收获,鉴于本人还在公司工作暂时不开启交流群,后期会逐渐开启交流群并且研发一些作品展示实战效果。对于一些购买我的技术专栏的表示感谢,感谢您的支持,一些专栏的文章会跟进公司项目实战经验不断的优化和更新,同事整体替换烂文。
展开
-
“C#转Lua工具在遇到语法不对等、无法翻译时,能不能先把C#翻译成汇编,再通过汇编实现Lua?”
C#转Lua就像“中文诗歌翻译成英文诗歌”,有些词没法直译,只能意译或省略。C#转汇编再转Lua,就像“中文诗歌→摩斯密码→英文诗歌”,中间环节反而让信息丢失得更彻底,最后根本拼不回原来的意思。原创 2025-01-02 23:53:14 · 101 阅读 · 0 评论 -
射击无缝大世界游戏DS服务器架构设计
跨DS无感迁移是大世界射击游戏实现大地图无缝玩法的核心技术。分区+状态同步+无感切换+全局调度。状态同步、边界处理、全局通信、容灾机制。接下来我会进一步细化“跨DS无感迁移”在射击大世界游戏中的技术实现细节常见难点优化方向,并给出一些架构设计建议和业界案例参考,帮助你更好地理解和落地。跨DS无感迁移是大世界射击游戏实现大地图无缝体验的核心技术。分区设计、状态同步、网络切换、对象迁移、全局调度、负载均衡、异常容灾等环节。建议结合自身业务场景,参考业界成熟方案,逐步演进和优化。原创 2025-05-01 04:05:46 · 12 阅读 · 0 评论 -
Android 音频 Crash偶现疑难问题定位分析
Crash位置:系统层方法。触发场景:游戏运行中,来电话,挂断后触发静音。Crash原因AudioTrace对象析构时,跨进程调用仍访问该对象,导致访问已析构或状态不一致。遇到的Crash是典型的跨进程调用与对象生命周期管理冲突问题,核心是AudioTrace对象析构时仍被跨进程调用访问。明确AudioTrace对象的生命周期边界。确保析构时无后续调用。加强跨进程调用的同步和状态管理。如果能控制系统层代码,建议从引用计数和加锁入手;如果只能从应用层规避,则尽量避免电话状态变化时音频操作。原创 2025-03-01 19:26:10 · 115 阅读 · 0 评论 -
图形顶点顺序是A→B→C,指的是ABC的先后读取或者存储顺序吗
我们继续详细讲解。原创 2025-04-29 03:08:50 · 16 阅读 · 0 评论 -
生动形象的解释下分层+导航网格+局部A*组合寻路算法分层信息和导航网格数据是如何生成的?
分层信息和导航网格的数据量,和地图大小、精度有关,但通过分区、压缩、流式加载等手段,完全可以控制在合理范围内。现代大型游戏、仿真系统、机器人导航都在用这套方案,内存消耗是可控的,不会“爆炸”。只要合理设计,不会成为性能瓶颈。“分层信息像拼图边框,数据很小;导航网格像地砖拼图,数据中等,但可以分区、压缩、按需加载;局部A*只在小块地砖上走,内存几乎可以忽略。我们继续深入,详细讲讲分层信息和导航网格数据的生成流程、数据结构示例、内存占用估算。原创 2025-04-28 02:19:03 · 20 阅读 · 0 评论 -
0解析开销二进制JSON格式的思路
你可以仿照FlatBuffers思路,设计自己的二进制JSON格式:对象头部:字段数、字段表(字段名哈希/索引、类型、偏移)数据区:实际的字符串、嵌套对象、数组等支持直接指针访问和偏移跳转0解析开销的二进制JSON格式,本质是用结构化的二进制布局+字段表+类型标记+偏移量,来实现高效的随机访问和零拷贝。FlatBuffers、Cap’n Proto等都是成熟的参考实现。你可以根据自己的需求,设计类似的头部和数据区布局,做到无需递归解析、直接指针访问。下面我将。原创 2025-04-28 00:25:01 · 15 阅读 · 0 评论 -
Unity手游资源管理大包与小包方案
下面将在Unity手游资源管理中的细节做更详细的对比和说明,涵盖它们的结构、优缺点、适用场景、技术实现、常见问题等。原创 2024-09-30 01:18:19 · 135 阅读 · 0 评论 -
海外计费中的Midas支付流程
下面为你详细梳理,分为和,并结合各个角色(game Client、game Server、midas sdk、midas server、steam sdk、steam server、midas user account)进行说明。原创 2024-12-23 23:35:46 · 106 阅读 · 0 评论 -
Midas整体接入流程说明
的实操细节,尤其是开发和测试过程中常见的实际问题、优化建议,以及上线后持续运营的要点。下面继续为你详细补充。原创 2024-12-23 23:37:40 · 128 阅读 · 0 评论 -
App的包名(Android)或Bundle ID(iOS)是如何生成的? 它们在SDK接入中的作用是什么?
包名(Android)/Bundle ID(iOS)是App的唯一身份标识,由开发者在项目创建或配置时指定。在SDK接入中,它们用于鉴权、初始化、数据统计、回调等多个关键环节,必须与SDK后台配置保持一致,否则会导致SDK功能异常。下面继续补充更深入的内容,包括包名/Bundle ID的生成细节、在多渠道/多环境下的管理方法、与SDK参数的对应关系、常见问题及排查方法,并给出一些实际开发建议。包名/Bundle ID是App和SDK后台的唯一桥梁,决定了SDK能否正常服务。原创 2025-04-27 02:39:03 · 17 阅读 · 0 评论 -
虚幻GC过程中异步加载资源导致的Crash问题研究
根因:GC与异步加载并发,资源状态被误判,导致致命崩溃。核心措施:合理配置GC参数,完善同步机制,增加异常保护,强化监控与报警。长期建议:关注引擎版本修复,持续优化资源生命周期管理。原创 2025-04-26 02:43:55 · 11 阅读 · 0 评论 -
软件行业中的“中台“的故事
中台”是中国软件行业在互联网大规模创新和复杂业务协同下的产物。它的故事,是一部关于技术、组织、业务协同进化的现代企业管理史。未来,随着云原生、AI等新技术的发展,“中台”还会不断演化,成为企业数字化转型的重要基石。下面我将继续用故事和案例的方式,深入讲讲“中台”在软件行业中的典型实践、技术架构、组织变革、失败教训,以及它在AI和云原生时代的新趋势。“中台”不是一成不变的技术方案,而是企业在数字化转型、业务创新、组织协同中的一种能力沉淀和复用机制。原创 2025-04-26 02:33:59 · 20 阅读 · 0 评论 -
符号表的重要性
符号表是编译器的核心数据结构,承载着程序中所有符号的详细信息。它不仅支持编译过程中的语义分析和代码生成,还为调试和优化提供基础。理解符号表的结构和管理机制,有助于深入掌握编译原理和调试技术。原创 2024-11-05 23:52:37 · 142 阅读 · 0 评论 -
MMORPG的移动同步
问题现象解决方法橡皮筋角色被拉回优化预测、平滑校正瞬移/抖动角色跳跃、卡顿插值窗口加大、丢包容错幽灵/消失看不到/残影AOI事件可靠传输、定期全量校验穿墙/加速作弊服务器权威、合法性校验。原创 2024-11-11 23:38:52 · 96 阅读 · 0 评论 -
从零开始的3A游戏开发需要解决哪些挑战
技术难度极高:如大世界无缝流式、实时光影、复杂AI、多人同步等。内容量巨大:3A游戏需要海量高质量内容,生产压力极大。团队管理复杂:大团队跨部门协作,沟通和管理难度高。资金压力大:开发周期长、投入高,回报周期长,风险大。质量要求极高:画面、玩法、叙事、音频、性能、兼容性等都要顶级。市场竞争激烈:3A市场被国际大厂垄断,新团队面临极大挑战。从零开始做3A游戏,是一场“技术+内容+管理+资金+市场”的超级马拉松。每一个环节都可能决定成败。先做小型Demo验证核心玩法和技术可行性;原创 2024-11-11 23:42:07 · 91 阅读 · 0 评论 -
关于游戏开发管线的设计与优化
游戏开发管线(Game Development Pipeline)指的是从资源制作、集成、测试到发布的全流程自动化与标准化体系。它涵盖了美术、程序、策划、音频等多工种协作的所有环节,目标是让内容高效、可控、可追溯地流转到最终产品。高效的游戏开发管线=自动化+标准化+可追溯+高协作。管线不是一蹴而就的,需要持续优化和团队共建。只要坚持自动化、规范化、可视化,团队效率和产品质量都会大幅提升。当然可以!游戏开发管线(Pipeline)的设计与优化是提升团队效率、产品质量和项目可控性的核心。下面我将从。原创 2024-11-11 23:43:34 · 114 阅读 · 0 评论 -
为什么sharedassets会很大?
sharedassets大,根本原因是“被多个场景共同引用的资源过多或过大”。解决办法是合理分组、单独打包公共资源、定期清理冗余、优化资源依赖。下面继续深入讲解sharedassets文件过大的进一步原因分析、定位方法和实战优化建议。原创 2024-11-11 23:44:51 · 105 阅读 · 0 评论 -
Unity 安装包分析
代码层面删除未用脚本、插件。禁用未用的Unity模块(Player Settings > Configuration > Scripting Backend/Managed Stripping Level)。避免使用大体积的系统库(如System.Xml)。资源层面清理未用图片、音频、字体、文档。UI资源按需加载,合并图集,减少冗余。音频、字体统一格式,精简内容。资源打包方式。原创 2024-11-12 23:39:40 · 101 阅读 · 0 评论 -
app播放本地外部存储的视频需申请存储权限的细节
播放本地外部存储的视频需申请存储权限,是因为 Android 系统出于安全和隐私保护,限制了对外部存储的访问。没有权限,Unity 无法读取和播放这些文件。下面详细补充Android存储权限的申请流程、适配新版本(Android 10/11/12+)的注意事项、Unity中常用的权限申请代码示例,以及如何在不申请权限的情况下访问媒体文件等实用内容。:访问外部存储需动态申请权限。:分区存储限制,推荐用 SAF 或 MediaStore 访问媒体文件。原创 2024-11-12 23:40:44 · 112 阅读 · 0 评论 -
如何通过 OBB 技术实现轻量级的差量更新机制?
是 Android 提供的一种扩展资源包机制,常用于大型游戏、应用的资源分包。OBB 文件通常存放在目录下。OBB 文件本质上是一个二进制大文件,内容和格式由开发者自定义,Android 系统只负责下载和挂载。差量更新(增量更新)指的是只下载和更新与旧版本不同的部分,而不是整体替换。常见做法:生成“差分包”(patch),客户端用旧包+差分包合成新包。资源分块管理将 OBB 内部资源(如图片、音频、脚本等)按文件或分块管理,记录每个资源的版本号或 hash。生成差分包。原创 2024-11-12 23:43:05 · 115 阅读 · 0 评论 -
targetSdkVersion具体是什么,targetSdkVersion不同的值决定了什么逻辑差异
决定了你的App在不同Android系统上的“兼容模式”或“新特性模式”。值越高,系统对你的App要求越严格,你需要适配更多新行为。值太低,虽然兼容性好,但无法上架Google Play,也会错过新特性和安全保护。targetSdkVersion 决定了你的App在新系统上是“被兼容”还是“被严格要求”,它是Android兼容性和新特性适配的核心参数。下面继续深入讲解的相关内容,包括它的工作原理、实际开发中的注意事项、常见误区,以及如何安全地提升 targetSdkVersion。原创 2024-11-12 23:44:08 · 132 阅读 · 0 评论 -
Unity3D启动导入某些资源产生崩溃(UnityEditor已停止工作)原因分析
AssetPostprocessor、OnPreprocessXXX等脚本异常。插件(如美术工具链、热更框架)在导入时抛出未捕获异常。临时禁用所有Editor/Editor Default Resources/Editor下的脚本和插件,排除脚本干扰。检查是否有自定义AssetPostprocessor、OnPreprocessTexture等脚本。OnPreprocessTexture脚本未做异常处理,遇到特殊图片时抛出异常,导致Unity崩溃。原创 2024-11-12 23:47:08 · 136 阅读 · 0 评论 -
protobuf-net 默认通过 反射 或 动态代码生成(Emit)来实现序列化和反序列化背后的原理
protobuf-net 默认通过反射或动态代码生成(Emit)来实现序列化和反序列化。下面详细解释一下这句话的含义和背后的原理:4. 反射与Emit的优缺点4.1 反射的优缺点优点:灵活:可以动态处理任意类型,无需提前生成代码。易用:开发时无需额外操作,直接标记特性即可。缺点:性能较低:每次序列化/反序列化都要查找字段、属性,频繁装箱拆箱,GC压力大。在AOT环境(如Unity iOS)部分反射API受限,可能直接报错。4.2 Emit的优缺点优点:性能高:只在原创 2024-11-13 23:51:43 · 73 阅读 · 0 评论 -
protobuf-net的Unity项目都会使用Precompile来对PB对象做预处理的原因
“protobuf-net的Unity项目都会使用Precompile来对PB对象做预处理的原因?”下面是详细解答:兼容iOS AOT环境提升性能避免运行时异常可控性和可维护性下面继续详细补充:定义proto协议生成C#类Precompile处理Unity项目引用7. Precompile的优势7.1 兼容性彻底规避iOS AOT下Emit/反射的限制。适配Unity所有主流平台(iOS、Android、PC等)。7.2 性能静态代码,序列化/反序列化速度快,GC压力小。适合移动端对性原创 2024-11-13 23:52:13 · 119 阅读 · 0 评论 -
如何通过优化Precompile来精简PB协议生成的程序集大小
用你修改过的Precompile工具,输入所有PB类只生成需要的Write/Read方法输出精简版CSProtoSerializer.dll。原创 2024-11-13 23:52:54 · 111 阅读 · 0 评论 -
谈谈Unity引擎渲染管线中渲染状态(Render State)重置的责任归属问题
Unity渲染管线中的渲染状态重置,主要由Unity引擎在渲染流程的关键节点(如DrawCall、Camera切换、渲染目标切换)自动完成。Unity通过状态缓存和对比机制,确保只在必要时才切换或重置状态,从而提升渲染效率。底层图形API不会主动重置状态,只被动执行命令。开发者在使用低级渲染接口时需自行管理状态,避免状态污染。原创 2024-11-13 23:55:30 · 241 阅读 · 0 评论 -
一套可落地的资源扫描与优化建议方案
本方案无需开发者配合,完全基于APK包内资源自动化分析,能有效发现不合理资源并给出具体优化建议,帮助开发者精准定位和优化问题资源。下面继续详细展开,补充具体实现细节、自动化流程、常见问题与应对、以及优化建议的落地方式,让方案更具可操作性。原创 2024-11-14 23:01:14 · 95 阅读 · 0 评论 -
摄像头数据回传方式性能比对
只用于小数据、事件通知。JNI直接回调:适合中等数据量、对实时性有一定要求的场景。:唯一适合高分辨率、高帧率、低延迟场景(如AR/VR、AI推理等)。实际开发中,推荐优先考虑Native Plugin方式,尤其是摄像头数据流大、对性能有要求时。下面继续详细分析三种摄像头数据回传方式的性能细节、实现要点、典型代码片段,并给出实际开发中的优化建议。:简单但低效,适合小数据。JNI直接回调:适合中等数据量,注意JNI拷贝和线程同步。:高性能首选,适合高分辨率高帧率场景,实现复杂度最高。原创 2025-01-17 23:18:08 · 105 阅读 · 0 评论 -
Unity 通过Android API调用摄像头底层原理
如果 Unity 自带的Java/Kotlin 编写摄像头操作代码(如用 Camera2 API,支持更高帧率、分辨率、手动对焦等)。Unity 通过 JNI 调用插件方法,获取摄像头数据。数据回传:可以通过 JNI 回调、UnitySendMessage、或者 Native Plugin(C++)等方式,把数据传回 Unity。Unity 调用 Android 摄像头的底层原理。原创 2025-01-17 23:18:39 · 123 阅读 · 0 评论 -
如何提高unity手游客户端(Android)研发效率
解包-替换-重签名是Unity手游Android端高效验证平台/引擎/C#层改动的常用手段。C#程序集可直接替换(mono模式),jar/dex需转dex合并,直接替换。推荐自动化脚本和热更框架进一步提升效率。注意兼容性和签名一致性,避免因替换导致运行时崩溃。下面我将继续深入,补充更多实用细节、自动化建议、常见问题排查,以及针对Unity手游Android端“解包-替换-重签名”提效方案的进阶实践和注意事项。解包-替换-重签名是Unity手游Android端高效验证平台/引擎/C#层改动的利器。原创 2025-01-23 21:26:37 · 159 阅读 · 0 评论 -
Unity手机震动实现
要实现自定义时长、模式的震动,需要通过 Android 原生接口。Unity 支持通过调用 Java 代码。= null) {# endif }= null) {# endif }= null)#else#endifUnity 内置简单易用,但功能有限。Android 推荐用原生接口自定义震动时长/模式。iOS 需写原生插件,支持基础震动和 Haptic Feedback。跨平台建议封装统一接口,便于维护和扩展。下面继续深入讲解Unity手机震动的进阶实现。原创 2025-04-22 01:23:53 · 43 阅读 · 0 评论 -
iOS平台游戏app内存分析
名称说明主要内容/来源影响进程实际占用的物理内存Native+Mono+Graphics+栈等OOM/被killGPU资源占用的内存贴图、Mesh、RT等渲染异常进程可见的虚拟地址空间物理+映射一般不超标C/C++层分配的堆内存引擎底层、插件、库泄漏/碎片化被写入过、不可直接回收的内存贴图、音频、动态数据回收慢所有非托管代码分配的内存贴图、Mesh、C++对象等OOM/泄漏Mono HeapC#脚本分配的托管堆内存C#对象、数组、字符串GC卡顿。原创 2025-04-21 02:25:15 · 34 阅读 · 0 评论 -
Unity动态图集方案
图集纹理的创建与管理创建一张或多张大纹理(如1024x1024、2048x2048)。等矩形打包算法)。Unity动态图集是提升UI和2D渲染性能、支持动态内容的关键技术。其核心在于高效的矩形打包算法、纹理拷贝与管理、与UI系统的无缝结合。实际开发中需关注性能、内存、Draw Call合批、图片生命周期等问题。下面继续补充Unity动态图集的实用细节,包括更完整的代码实现思路、异步处理、与AssetBundle/Addressable结合、典型应用场景案例、常见坑与解决办法等。原创 2025-04-21 02:05:48 · 40 阅读 · 0 评论 -
运行时纹理内存占用的本质
Unity中图片的运行时内存占用,取决于导入设置的纹理格式和分辨率,而不是磁盘上的PNG/JPG文件大小。磁盘小≠内存小,运行时内存由纹理格式和分辨率决定。合理压缩和分辨率控制,是UI和大图内存优化的关键。定期检测和团队规范,能有效防止内存暴涨问题。下面我将继续扩展Unity纹理内存占用的计算公式与工具如何在Unity中查看和分析纹理内存占用团队常见疏漏与防范措施自动化检测与优化流程建议FAQ:纹理内存相关常见问题解答纹理内存占用与磁盘文件大小无关,取决于分辨率和压缩格式。原创 2025-04-21 00:32:44 · 23 阅读 · 0 评论 -
Unity Animator卡顿研究
Animator卡顿优化是系统工程,需结合Profiler定位、资源管理、状态机设计、批量动画技术等多方面。美术、程序、策划需协作,从资源、逻辑、设计多角度优化。持续关注Unity版本更新,新版本的DOTS Animation、GPU Skinning等技术可极大提升性能。定期用Profiler检查,防止后期动画资源和状态机膨胀。原创 2025-03-08 19:39:26 · 87 阅读 · 0 评论 -
将xls转成protobuf供Unity使用的流程
流程可高度自动化,支持复杂结构、热更、批量处理。关键在于proto与Excel字段严格一致自动化脚本健壮Unity端高效加载与缓存。推荐用CI/CD保障流程稳定,减少人工失误。原创 2025-03-09 23:54:04 · 84 阅读 · 0 评论 -
大规模场景的资源拆分和动态加载
合理分块清晰分组异步加载内存管理是大场景动态加载的核心。Addressables是主流方案,配合多场景和地形分块可实现高效流式加载。工具和自动化配置能大幅提升开发效率和稳定性。下面继续深入讲解大规模场景资源拆分和动态加载的进阶内容,聚焦于自动化分块工具、分块配置表设计、Addressables分组自动化、性能监控与调优、实际项目中的常见模式等实用细节。大规模场景的资源拆分和动态加载,自动化、分组、配置化、性能监控是高效开发的关键。继续为你详细展开大规模场景资源拆分和动态加载。原创 2025-04-15 23:54:36 · 114 阅读 · 0 评论 -
NGUI中动态切换材质、Shader会导致DrawCall分裂的渲染逻辑原理
NGUI的合批是基于材质和Shader的。只要材质或Shader不同,DrawCall就会分裂。动态切换材质/Shader会导致合批失效,DrawCall数增加,影响渲染效率。下面我将更深入地剖析NGUI中材质/Shader切换导致DrawCall分裂的底层逻辑,并补充一些实际开发中遇到的细节和优化建议。UI合批的前提是材质、Shader、贴图、参数完全一致。动态切换材质/Shader会导致DrawCall分裂,影响性能。原创 2025-04-18 01:01:32 · 21 阅读 · 0 评论 -
ETC1 Alpha通道分离原理
直接用ETC1压缩带Alpha通道的贴图,会导致透明信息丢失,贴图变成不透明,严重影响美术效果。正确做法优先用ETC2、ASTC等支持Alpha的格式。或用Unity的Alpha分离方案,但要注意资源占用增加。或美术导出时去除Alpha通道(如果确实不需要透明)。下面详细介绍Unity中ETC1分离Alpha的具体设置方法、Shader合成原理与注意事项,以及实际项目中如何选择和优化。原创 2025-04-18 00:39:31 · 26 阅读 · 0 评论 -
Unity引擎针对贴图纹理的压缩与管理
在Unity项目开发中,贴图资源往往占据了绝大部分的内存和包体空间。合理的压缩与管理贴图,不仅能显著降低内存消耗和包体大小,还能提升加载速度和运行性能,尤其在移动端和大型项目中尤为重要。Unity贴图纹理的压缩与管理,需从资源导入、平台压缩格式、自动化工具、分包与加载、发布后检测等多环节协同优化。建议团队建立统一规范,开发自动化检测与批量处理工具,定期用Profiler分析,持续优化资源,保障项目性能和体验。下面我将继续详细展开每一章节的内容。原创 2025-04-18 00:33:34 · 21 阅读 · 0 评论