<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zhenmu的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/zhenmu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zhenmu]]></copyright><item><title><![CDATA[gomobile build 成apk 遇到的几个问题]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/154444908</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/154444908</guid><author>zhenmu</author><pubDate>Wed, 05 Nov 2025 15:35:42 +0800</pubDate><description><![CDATA[x\mobile@vxxxxxxx\cmd\gomobile, 修改一下代码，然后 用go build 重新编译出 gomobile.exe 放入到 用户路径\go\bin目录下。\x\mobile@vxxxxxxx\cmd\gomobile\build.go 找到2个函数， 把里面的 “go” 换成 “garble”, 且可以加一个默认混淆的参数。gomobile 本身版本编译工具造成的问题， 需要进入go的安装路径 用户路径\go\pkg\mod\。修改 go\pkg\mod\。]]></description><category></category></item><item><title><![CDATA[windows下 用Gomobile直接打包成apk, assets下的子目录路径问题，造成asset.Open失败]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/148556361</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/148556361</guid><author>zhenmu</author><pubDate>Tue, 10 Jun 2025 11:27:47 +0800</pubDate><description><![CDATA[[摘要] Gomobile工具在Windows系统打包Android应用时存在资源路径处理问题：当assets子目录使用正斜杠(&quot;save/config.ini&quot;)时加载失败，需改用反斜杠(&quot;save\config.ini&quot;)才能打开。这是由于Windows文件系统路径直接写入APK未做标准化，导致Android系统需精确匹配路径格式。该问题在不同操作系统表现相反，Linux/macOS需用正斜杠。]]></description><category></category></item><item><title><![CDATA[【unity】unity2021 URP管线下 SceneView没有MipMaps选项了怎么办？扩展Rendering Debugger工具]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/143605839</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/143605839</guid><author>zhenmu</author><pubDate>Fri, 08 Nov 2024 10:34:34 +0800</pubDate><description><![CDATA[unity URP   扩展Rendering Debugger实现渲染mipmaps]]></description><category></category></item><item><title><![CDATA[【cocos creator 3.x】 修改builtin-unlit 加了一个类似流光显示的mask参数]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/139663643</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/139663643</guid><author>zhenmu</author><pubDate>Thu, 13 Jun 2024 20:50:36 +0800</pubDate><description><![CDATA[注释掉的 LerpMask 是等价这个算法的，只不过用了 if else来实现的。]]></description><category></category></item><item><title><![CDATA[【lua】lua内存优化记录]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/136453385</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/136453385</guid><author>zhenmu</author><pubDate>Mon, 04 Mar 2024 16:07:15 +0800</pubDate><description><![CDATA[lua内存占用实际优化几个点：
优化点1  加快gc频度：

　　

优化点2 去掉了因require路径 / 和 .的混用造成的重复加载：

　　

优化点3 数值表lua里内存精简：]]></description><category></category></item><item><title><![CDATA[【lua】tolua(Luajit) require 重复加载了的问题(路径混用斜杠/和点.造成的问题)]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/136451603</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/136451603</guid><author>zhenmu</author><pubDate>Mon, 04 Mar 2024 14:51:22 +0800</pubDate><description><![CDATA[再仔细分析源码问题，发现真机为了编译lua用了luajit （lib_package.c 有个版本 require实现没有 /替换成 .）， unity上用的是tolua编出来的dll（macnojit 的 loadlib.c 里 require实现做了/换成.）打印了一下当时package.loaded （按理require了之后这里会存一下，后面require就不会重复加载了），那是项目里 require "data/xxxx"  require "data.xxxx"  两种方式混用造成的。]]></description><category></category></item><item><title><![CDATA[【unity】关于技能释放shader.CreateGPUProgram造成卡顿，优化和定位方法。]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/133134340</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/133134340</guid><author>zhenmu</author><pubDate>Thu, 21 Sep 2023 14:55:49 +0800</pubDate><description><![CDATA[在将该ShaderVariantCollection资源加载进内存后，通过在游戏前期场景调用ShaderVariantCollection.WarmUp来触发Shader.CreateGPUProgram，并将此SVC进行缓存，从而避免在游戏运行时触发此API的调用、避免局部的CPU高耗时。开发者可以结合Profiler的Timeline模式，选中触发调用Shader.CreateGPUProgram的帧来查看具体是哪些Shader触发了该API，可以参考。打包在手机上运行后， 用logcat抓到日志。]]></description><category></category></item><item><title><![CDATA[[IAP] 最近IOS内购伪造防刷单问题，bid（BundleID）能被伪造,]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/132036354</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/132036354</guid><author>zhenmu</author><pubDate>Tue, 01 Aug 2023 10:16:34 +0800</pubDate><description><![CDATA[苹果WWDC23对verifyReceipt API 弃用，并提供了相应的兼容迁移建议，本文还介绍了receiptData 旧收据伪造问题和苹果新推出的 App Store Server Lib。这 2 个 API 获取的 receiptData 凭证，经过苹果 verifyReceipt API 解析后的格式是不同的。目前发现， iOS 7 之前的旧凭证 API，黑产能伪造票据中的 Bundle ID！苹果 App Store 支付弃用 API 接口兼容和解读 - 掘金。]]></description><category></category></item><item><title><![CDATA[【unity】URP的shader开发中支持多光源，_ADDITIONAL_LIGHTS_VERTEX 和 _ADDITIONAL_LIGHTS 区别]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/131203043</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/131203043</guid><author>zhenmu</author><pubDate>Wed, 14 Jun 2023 11:31:18 +0800</pubDate><description><![CDATA[一般来说使用 _ADDITIONAL_LIGHTS_VERTEX，可能要优化一些，但是有局限性，平行光还好，针对点光源，面片比较大的模型就很奇怪了，    这次就遇到这个问题，尝试地表接受一个点光源试试发现没作用，还以为代码没写好……项目里有一个其他同事实现的shader，美术那边希望能支持多个光源， 我一看代码里面， frag 函数里已经实现了。要支持 _ADDITIONAL_LIGHTS_VERTEX ， （片元着色器代码 上面有示例了，不贴了）当然单独加一个也是可以的。]]></description><category></category></item><item><title><![CDATA[【unity】navmesh很远的点寻路不到的处理（迭代寻路）]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/131124103</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/131124103</guid><author>zhenmu</author><pubDate>Fri, 09 Jun 2023 11:48:34 +0800</pubDate><description><![CDATA[C++ 另外一个项目的实现，仅供参考， 思路差不多的，寻路发现未达终点，尝试若干次迭代， 如果得到的路点只有1个 或者 终点就是起点 或者 寻路失败，则说明没法继续寻路停止迭代。项目里，有个场景比较绕，比较远的目标寻路只会寻路到一半的地方就停下来， 终点是可达的，但unity的navmesh寻路算法本身因素，遍历深度有限制造成的。这种方案的问题就是 中间的点很可能走到一个沟沟里，然后又跑出来。]]></description><category></category></item><item><title><![CDATA[centos里 C++项目 time() 和 gettimeofday() 返回不同的秒数]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/130129290</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/130129290</guid><author>zhenmu</author><pubDate>Thu, 13 Apr 2023 14:17:38 +0800</pubDate><description><![CDATA[这边做定时器时判定是用的 gettimeofday ，但逻辑里设置时间用的是time(NULL) 结果造成定时器出问题了。项目里有个地方获取时间戳需要比较精确，用了 gettimeofday()获取的。实际项目发现 就算 time()后面调用  获取的时间 还是有概率。而linux 下一般获取时间戳用time(NULL) 获取的，网上有人也遇到了这个问题，所以一个项目里。很多地方也引用了这里获取时间戳。]]></description><category></category></item><item><title><![CDATA[unity编辑器上不穿模，真机Android上会穿模问题定位和解决]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/129839803</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/129839803</guid><author>zhenmu</author><pubDate>Wed, 29 Mar 2023 17:11:58 +0800</pubDate><description><![CDATA[不透明物体的绘制 是根据深度测试来绘制的， 一般近的先画，远的后画，深度测试不过的可以不画，这样可以减少overdraw。但深度缓存存储是非线性的， 设置不当可能某个距离的精度不够造成深度测试出现错乱 出现穿模或者闪烁。2. 调整一下 相机的Clipping Planes,  主要是调Near, 之前是0.01 调成0.1， 就是减少相机剪切距离，变相提高精度，同时Near不能设太小容易造成精度浪费。项目里有个特殊镜头近距离的技能展示，同一个模型正常场景里是好的， 播放这个特效时用了一个单独的相机的，]]></description><category></category></item><item><title><![CDATA[【C++】 linux内存分析工具对比小总结，valgrind、gperftools、ASAN]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/127439961</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/127439961</guid><author>zhenmu</author><pubDate>Tue, 28 Mar 2023 17:04:11 +0800</pubDate><description><![CDATA[valgrind 外挂式，但大项目太慢不推荐，ASAN速度快但要单独编译版本，  gperftools 可外挂式 分析cpu性能和内存性能比较方便。]]></description><category></category></item><item><title><![CDATA[mysql 简单insert 也要消耗30ms或40ms的问题优化]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/126546946</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/126546946</guid><author>zhenmu</author><pubDate>Fri, 26 Aug 2022 17:44:23 +0800</pubDate><description><![CDATA[sysvar_innodb_flush_log_at_trx_commit 从 1 改成 2， 性能会好些。最近的项目，本地电脑centos环境，发现insert还是很慢  插入一条 要30~40ms。如果改成0 ，则1ms不到， 测试insert命令基本可以插入7~8条/ms。以前项目遇到过 insert很慢，当时是修改mysql的my.cnf 配置。查资料 看到有一个 sync_binlog 参数。...]]></description><category></category></item><item><title><![CDATA[C#实现不规则图形分割成多个矩形组合可视化工具, 核心是一个找最大内切矩形的算法]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/125852065</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/125852065</guid><author>zhenmu</author><pubDate>Mon, 18 Jul 2022 15:58:28 +0800</pubDate><description><![CDATA[有个项目，有些不规则区域，想转成尽可能少的小矩形。3.动态生成bitmap，绘制点和矩形，显示到pictureBox上。2.控制pitctureBox缩放（ctrl+滚轮）和移动。1.图片的加载和像素解析，绘制到pictureBox上。4.找出属于不同区域的相连的不规则图形对应的数据块。6.拆分剩余上下左右4个区域，递归找到更小的矩形。，并扩展了一下，把四周剩余区域切割递归找矩形。5.不规则图形数据查找最大内嵌矩形算法。...]]></description><category></category></item><item><title><![CDATA[vs2019 C++自带了内存问题检测工具:AddressSanitizer(ASan)]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/123730843</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/123730843</guid><author>zhenmu</author><pubDate>Fri, 25 Mar 2022 11:36:59 +0800</pubDate><description><![CDATA[vs2019  C++ 自带了 内存问题检测工具:AddressSanitizer(ASan) ]]></description><category></category></item><item><title><![CDATA[[unity]【UGUI】UI经常换，代码尽量不改的方案； 同时也减少GameObject.Find的调用，方便程序开发时直接访问节点对象]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/121767477</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/121767477</guid><author>zhenmu</author><pubDate>Tue, 07 Dec 2021 16:30:20 +0800</pubDate><description><![CDATA[抛砖引玉介绍一个UGUI开发时一个思路：
项目 用lua做UI开发的。 一个toLua 一个XLua。 
策划 或美术经常要调 已经做好的UI的外观， 一般需要变布局或节点层级。
最早，代码里访问某个节点都是用GameObject.Find 找到节点， 层级关系一变，就需要程序配合改， 很麻烦。
怎么做到调整UI，不用改代码呢？
想到一个命名规范方案：
程序拿到UI的prefab 绑上UI关联Lua的脚本后， 把所有程序需要访问的节点，改名成:

rd_xxxxx， 脚本控制下的子节点rd_开头的...]]></description><category></category></item><item><title><![CDATA[寻路网格 recastnavigation-1.5.1 服务器处理多人不同动态障碍物寻路，复用寻路数据 方案思路。]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/120822420</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/120822420</guid><author>zhenmu</author><pubDate>Tue, 19 Oct 2021 20:09:54 +0800</pubDate><description><![CDATA[缘起：
有个slg项目，所有玩家在一个大地图上移动， 有公用的动态障碍物 参考样例代码Sample_TempObstacles里调用dtTileCache 的addObstacle、addBoxObstacle （注:接口只是放入排队，调用后最好要调用update 确保动态障碍 走到 buildNavMeshTile，以便生效），可以添加圆形、矩形 3种情况的动态障碍物，基本能满足需求了。 但有个需求，玩家还有动态的障碍块， 每个玩家进度不同， 解锁情况也不一样。

思路：
思路1. 每个玩家.......]]></description><category></category></item><item><title><![CDATA[vs2019 编译的静态链接库， 放到其他电脑上 最后link报错。]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/117294818</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/117294818</guid><author>zhenmu</author><pubDate>Wed, 26 May 2021 16:05:50 +0800</pubDate><description><![CDATA[本地用 vs2019 编译 libprotobuf 静态库， 
然后放到正式项目里编译，没问题。

结果在编译服务器 编译 最后link却报错：

7&gt;目标 Link:
7&gt;  libprotobufd.lib(any.obj) : error LNK2001: 无法解析的外部符号 __imp___std_init_once_begin_initialize
7&gt;  libprotobufd.lib(implicit_weak_message.obj) : error LNK2001: .]]></description><category></category></item><item><title><![CDATA[关于chrome浏览器中， php session超时没有达到预期的问题]]></title><link>https://blog.youkuaiyun.com/zhenmu/article/details/109843592</link><guid>https://blog.youkuaiyun.com/zhenmu/article/details/109843592</guid><author>zhenmu</author><pubDate>Fri, 20 Nov 2020 11:44:52 +0800</pubDate><description><![CDATA[php 的session位置保持方式 目前是cookie方式
session.use_only_cookies = 1
session.name = PHPSESSID
session.cookie_lifetime = 0 #窗口关闭就删除cookie
一般浏览器 关闭窗口后在开， session就会失效。 但chrome浏览器不是的， 它会恢复原来的cookie。 是因为设置了 启动时 “从上次停下的地方继续”
另外服务器的session.gc_maxlifetime 和session....]]></description><category></category></item></channel></rss>