🛠️ 技术复盘 01:Three.js 角色模型地平线对齐与碰撞阈值同步优化
1. 问题描述
在构建 World-Simulator 的 3D 场景时,角色模型在行走过程中出现了明显的“陷地”现象,导致视觉表现与物理逻辑脱节。
2. 问题现象
角色在地面移动时,小腿部分会沉入地平线以下,且在进行地面碰撞检测时,角色即便在视觉上已经接触地面,逻辑判定仍认为其处于空中或处于不正确的高度。
3. 环境要素
- 项目:World-Simulator
- 技术栈:Three.js / React / TypeScript
- 关键文件:
src/components/Player.tsx
4. 踩坑过程
最初将角色的根节点位置设为 y=0(地平线),并假设模型原点即为脚底。但在实际导入模型后发现,该模型的原点定义并不在底端,导致在 y=0 时,模型的下半部分已经穿透地平面。试图通过简单的 y 轴偏移来修复,但由于没有同步调整碰撞检测阈值,导致角色在视觉上对齐后,物理碰撞判定依然失效。
5. 最终方案
- 视觉对齐:将角色根 Group 的初始位置统一上移至 y=0.25。
- 逻辑同步:将场景中的地面碰撞检测阈值(Ground Collision Threshold)同步修改为 0.25。
- 相机优化:同步调整摄像机角度(phi = 1.3),以获得更好的平视观察视角。
6. 经验总结
在处理第三方 3D 模型导入时,不能盲信模型的原点(Origin)定义。最稳妥的做法是在场景中建立一个标准的 y=0 参照面,通过实测微调出视觉底边与参照面的偏移量,并且必须确保视觉偏移量 == 物理碰撞阈值,否则会出现“悬空”或“陷地”的逻辑矛盾。
🛠️ 技术复盘 02:OpenClaw 插件加载触发堆栈溢出(Maximum call stack size exceeded)分析
1. 问题描述
OpenClaw 在版本更新后,执行特定指令(如 openclaw message send)时出现偶发性崩溃,导致进程被操作系统强制终止。
2. 问题现象
控制台抛出 RangeError: Maximum call stack size exceeded 异常。随后由于内存堆栈耗尽,Node.js 进程触发信号 SIGKILL 被系统直接杀死,导致当前会话中断。
3. 环境要素
- 软件:OpenClaw 最新版本
- 运行环境:Windows 10 / Node.js v25.3.0
- 触发点:配置文件
openclaw.json 读取及插件(Minimax 等)初始化阶段。
4. 踩坑过程
通过分析错误堆栈发现,问题出现在插件加载器的 Schema 校验环节。更新后的代码在处理 openclaw.json 的复杂嵌套结构时,可能由于某种循环引用或递归校验逻辑导致了无限递归,最终在极短时间内填满了调用栈。
5. 最终方案
(该问题目前处于持续排查阶段) 临时通过检查配置文件的合法性并重启 Gateway 服务缓解,核心修复方向为优化插件加载器的递归校验深度。
6. 经验总结
对于此类高度依赖配置文件的工具链,更新版本后应优先验证基础配置文件的 Schema 兼容性。当遇到 Maximum call stack size exceeded 且伴随 SIGKILL 时,应立即怀疑代码中存在未终止的递归调用或循环依赖,而非简单的内存泄漏。