<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>UE、C++、Python 与 Perforce 技术博客 · 小毛</title><link>https://mzsh.me/zh/blog/</link><description>UE、C++、Python 与 Perforce 技术博客 · 小毛</description><language>zh</language><item><title>本地集成 AI 数字人交互流程</title><link>https://mzsh.me/zh/blog/ai-digital-human-integration/</link><guid>https://mzsh.me/zh/blog/ai-digital-human-integration/</guid><description>在 Unreal Engine 中接入语音识别、大模型问答、语音合成和嘴型驱动，完成纯本地、纯云端和混合三种部署方式。</description></item><item><title>UE 飞行仿真中的 AirSim 控制适配</title><link>https://mzsh.me/zh/blog/flying-car-simulator/</link><guid>https://mzsh.me/zh/blog/flying-car-simulator/</guid><description>处理逐帧飞行指令、偏航控制与坐标换算，并适配 UE 5.6 接口。</description></item><item><title>将动捕骨骼重定向到 UE 机器人模型</title><link>https://mzsh.me/zh/blog/motion-capture-robot-control/</link><guid>https://mzsh.me/zh/blog/motion-capture-robot-control/</guid><description>从 Kinect 骨骼滤波到机器人关节映射，处理结构比例、IK、平滑与转速限制。</description></item><item><title>六轴平台运动解算与海洋虚拍录制适配</title><link>https://mzsh.me/zh/blog/six-dof-motion-platform/</link><guid>https://mzsh.me/zh/blog/six-dof-motion-platform/</guid><description>实现 Stewart 平台正逆解、运动数据处理，以及海洋场景的 Take Recorder、Sequence 与 LiveLink 发送适配。</description></item><item><title>插件开发到发布的工具链</title><link>https://mzsh.me/zh/blog/plugin-release-workflow/</link><guid>https://mzsh.me/zh/blog/plugin-release-workflow/</guid><description>围绕插件管理与多版本打包，把开发中分散的操作整理成专用工具。</description></item><item><title>让 Markdown 图片随文章一起发布</title><link>https://mzsh.me/zh/blog/markdown-publishing/</link><guid>https://mzsh.me/zh/blog/markdown-publishing/</guid><description>从本地图片路径到可复制的发布文本，减少文章迁移时的手动整理。</description></item><item><title>管理 Perforce 分支工作区与本地缓存</title><link>https://mzsh.me/zh/blog/perforce-workspace-pool/</link><guid>https://mzsh.me/zh/blog/perforce-workspace-pool/</guid><description>用工作区池组织分支切换，区分服务端同步与离线目录接入，明确缓存保护和清理边界。</description></item><item><title>驾驶过程记录与 UE 回放管理</title><link>https://mzsh.me/zh/blog/driving-session-replay/</link><guid>https://mzsh.me/zh/blog/driving-session-replay/</guid><description>采集驾驶操作与车辆状态，保存成绩统计，并配套管理 UE Network Replay 录制文件。</description></item><item><title>在 UE 中创建独立多窗口界面</title><link>https://mzsh.me/zh/blog/ue-multiwindow-interface/</link><guid>https://mzsh.me/zh/blog/ue-multiwindow-interface/</guid><description>用 Slate 原生窗口承载 UMG，提供窗口生命周期、位置尺寸、显隐与 DPI 控制。</description></item><item><title>机器人实时数据与三轴 IK 原型</title><link>https://mzsh.me/zh/blog/robot-realtime-ik-prototype/</link><guid>https://mzsh.me/zh/blog/robot-realtime-ik-prototype/</guid><description>开发中的 UDP JSON 数据接入与三关节位置 IK 原型，真实机构与真实数据测试待完成。</description></item><item><title>多视角GI丢失问题的解决办法</title><link>https://mzsh.me/zh/blog/ue53-multiview-gi/</link><guid>https://mzsh.me/zh/blog/ue53-multiview-gi/</guid><description>以 UE 5.3 源码版为例，将相关实现的最大视角数量从 2 调整为 3，记录七处修改的源码截图与适用限制。</description></item><item><title>Windows 源码版 UE：让团队使用一致的引擎关联名称</title><link>https://mzsh.me/zh/blog/ue-source-engine-association/</link><guid>https://mzsh.me/zh/blog/ue-source-engine-association/</guid><description>Windows 下，同一份源码引擎可能在不同电脑上注册成不同标识，导致 `.uproject` 的 `EngineAssociation` 产生无意义变更。统一关联名称可以减少这类差异；它不决定 UnrealBuildTool 是否重新编译。</description></item><item><title>UE 蓝图函数参数：引用方向与显示名称</title><link>https://mzsh.me/zh/blog/ue-uparam-reference-metadata/</link><guid>https://mzsh.me/zh/blog/ue-uparam-reference-metadata/</guid><description>UE C++ 的引用参数在蓝图节点上不一定呈现为预期的输入引脚。声明类型、`const` 和参数元数据共同影响节点表现。以下示例用于 UE5 的反射函数声明，未在引擎中编译。</description></item><item><title>Windows UE 5.6 与 Cursor：先跑通构建，再处理编辑体验</title><link>https://mzsh.me/zh/blog/ue-cursor-workflow-notes/</link><guid>https://mzsh.me/zh/blog/ue-cursor-workflow-notes/</guid><description>这是一份 Windows、UE 5.6 的配置经历整理。原记录未留下完整 Cursor 和扩展版本，因此不能视为当前版本兼容性承诺。目标是用 Cursor 编辑 UE C++，并保留独立可用的编译与调试入口。</description></item><item><title>Fab 提交经验：把发布包和使用说明一起检查</title><link>https://mzsh.me/zh/blog/ue-fab-submission-notes/</link><guid>https://mzsh.me/zh/blog/ue-fab-submission-notes/</guid><description>功能在开发工程里能用，不等于交付包能安装和复现。这份记录提炼过去的 UE 内容发布经验，不介绍具体插件产品，也不声称代表当前 Fab 审核规则。</description></item><item><title>UE DataTable 与 JSON：先验证，再替换</title><link>https://mzsh.me/zh/blog/ue-datatable-json-import-export/</link><guid>https://mzsh.me/zh/blog/ue-datatable-json-import-export/</guid><description>文件夹中的 JSON 行可以汇成 DataTable，但“先清空表再逐文件解析”会在中途失败时丢失旧数据。适用于 UE5 C++ 的编辑器导入工具；运行时修改内存表与保存编辑器资产是两件事。下面给出流程和生命周期片段，未编译为完整工具。</description></item><item><title>UE 编辑器资产保存：签出、脏标记与保存结果</title><link>https://mzsh.me/zh/blog/ue-editor-asset-saving/</link><guid>https://mzsh.me/zh/blog/ue-editor-asset-saving/</guid><description>自动化工具修改了资产，磁盘文件却未更新，常见原因包括包未标脏、目标路径错误或版本控制阻止写入。本文限于 UE5 编辑器资产保存；不把编辑器 API 当成游戏运行时的通用存档方案。</description></item><item><title>批量拆开 Level Instance：范围明确，失败就停</title><link>https://mzsh.me/zh/blog/ue-level-instance-break-safety/</link><guid>https://mzsh.me/zh/blog/ue-level-instance-break-safety/</guid><description>拆开 Level Instance 可能暴露更多嵌套实例。每轮只要找到实例就继续循环，遇到无法拆开的实例会一直重复。本文仅讨论 UE5 编辑器中的批量展开流程，不能作为运行时操作教程。</description></item><item><title>在 UE 中探索游戏公式的语法解析</title><link>https://mzsh.me/zh/blog/ue-expression-parser-basics/</link><guid>https://mzsh.me/zh/blog/ue-expression-parser-basics/</guid><description>尝试在 UE C++ 中实现游戏事件公式解析，让文本表达四则运算、条件判断和自定义属性，并结合代码梳理字符串校验、Token 拆分、属性替换与优先级求值。</description></item><item><title>C++ 常用选择：容器、排序与值类别</title><link>https://mzsh.me/zh/blog/cpp-algorithms-containers-value-categories/</link><guid>https://mzsh.me/zh/blog/cpp-algorithms-containers-value-categories/</guid><description>容器和排序应从访问方式与顺序要求选择，而不是根据旧版编译器的实现细节。本文采用 C++17 标准语义，合并容器、算法和引用的常见误区。</description></item><item><title>Python 按列名更新 Excel：组合键与独立输出</title><link>https://mzsh.me/zh/blog/python-excel-column-update/</link><guid>https://mzsh.me/zh/blog/python-excel-column-update/</guid><description>参照表提供新值，目标表按多个列匹配后更新指定列。原工具把匹配字段用下划线拼起来，`(&quot;A_B&quot;, &quot;C&quot;)` 与 `(&quot;A&quot;, &quot;B_C&quot;)` 就可能撞键。本文将核心处理独立出来，适用于 Python 3 与 openpyxl 的普通 `.xlsx`；不复刻原 GUI。</description></item><item><title>Python 比较目录：先生成内容差异报告</title><link>https://mzsh.me/zh/blog/python-directory-diff-report/</link><guid>https://mzsh.me/zh/blog/python-directory-diff-report/</guid><description>两个大目录只改了一部分文件，希望知道新增、修改和删除项。原方案还复制文件并安排删除；本篇收窄为 Python 3 标准库的只读报告，避免把比对与修改混在一起。</description></item><item><title>Perforce 切换流工作区：预检与失败边界</title><link>https://mzsh.me/zh/blog/python-perforce-stream-switch-safety/</link><guid>https://mzsh.me/zh/blog/python-perforce-stream-switch-safety/</guid><description>一个按钮同时改 Client Stream、同步和清理，容易让本地修改落在错误视图中。本文仅介绍通用 Python 自动化的保护流程，完全去掉私人服务器、账号和工作区信息。配套代码使用 fake P4，不连接真实服务器。</description></item><item><title>如何解决渲染时UMG大小不变的问题</title><link>https://mzsh.me/zh/blog/cnblogs-19813721/</link><guid>https://mzsh.me/zh/blog/cnblogs-19813721/</guid><description>当你需要将UMG渲染出来的时候你可能会碰到一种很恶心的情况，你渲染出来的UMG大小不跟随你设置的输出分辨率变化</description></item><item><title>蓝图泛型结构体序列化：区分内存表示与持久化格式</title><link>https://mzsh.me/zh/blog/cnblogs-19770934/</link><guid>https://mzsh.me/zh/blog/cnblogs-19770934/</guid><description>结构体反射取参、JSON 解析与安全持久化边界。</description></item><item><title>如何管理打包时的配置文件排除</title><link>https://mzsh.me/zh/blog/cnblogs-19770930/</link><guid>https://mzsh.me/zh/blog/cnblogs-19770930/</guid><description>介绍 DefaultGame.ini 的 Staging 包含与排除规则，以及配置扫描、文件写回和缓存重新加载流程。</description></item><item><title>如何用材质制作圆角矩形</title><link>https://mzsh.me/zh/blog/cnblogs-19379355/</link><guid>https://mzsh.me/zh/blog/cnblogs-19379355/</guid><description>这个我都记不清是什么之后记录的了，整理笔记的时候翻到了，是通过材质来制作圆角矩形，因为目标是在一个三合一屏幕的项目中使用，所以数值大小按照三块屏幕设置的，如要使用，请注意修改。</description></item><item><title>怎么查看打包到底打包了哪些文件</title><link>https://mzsh.me/zh/blog/cnblogs-19379306/</link><guid>https://mzsh.me/zh/blog/cnblogs-19379306/</guid><description>这个是打包后的文件，不同于平常的打包文件，这个可以看到打包完成后包含的所有配置文件以及资产，插件之类的</description></item><item><title>材质基础知识之if判断节点</title><link>https://mzsh.me/zh/blog/cnblogs-19379337/</link><guid>https://mzsh.me/zh/blog/cnblogs-19379337/</guid><description>这个图是前两天群友萌新发出的提问，说是为什么dissolve是0的时候，这个材质不可见。</description></item><item><title>缓存路径修改</title><link>https://mzsh.me/zh/blog/cnblogs-19379365/</link><guid>https://mzsh.me/zh/blog/cnblogs-19379365/</guid><description>最简单的办法就是通过Evenyting搜索\Engine\Config\BaseEngine.ini</description></item><item><title>论运行时动画录制的关键-正确获取骨骼数据与保存</title><link>https://mzsh.me/zh/blog/cnblogs-19197541/</link><guid>https://mzsh.me/zh/blog/cnblogs-19197541/</guid><description>在 UE5.4 中实现运行时动画录制，最关键的两个问题是：</description></item><item><title>C++MVVM简单应用</title><link>https://mzsh.me/zh/blog/cnblogs-19192707/</link><guid>https://mzsh.me/zh/blog/cnblogs-19192707/</guid><description>本文介绍如何在C++中建立简单可用的MVVM对象，以下操作在UE5.5中测试</description></item><item><title>中英双语设置小技巧</title><link>https://mzsh.me/zh/blog/cnblogs-19183986/</link><guid>https://mzsh.me/zh/blog/cnblogs-19183986/</guid><description>发现最近UE新人好多，索性整理出来一些小技巧供大家使用。</description></item><item><title>快速创建一个地图</title><link>https://mzsh.me/zh/blog/cnblogs-19184043/</link><guid>https://mzsh.me/zh/blog/cnblogs-19184043/</guid><description>这里只讨论如何快速创建一个可用的标准地图，不包括世界分区地图。</description></item><item><title>多屏幕全屏后只有一个屏幕显示怎么办</title><link>https://mzsh.me/zh/blog/cnblogs-19174288/</link><guid>https://mzsh.me/zh/blog/cnblogs-19174288/</guid><description>这里讨论的是，多个屏幕时，用N卡的Surround融合为一个屏幕，当开始游戏后发生的问题</description></item><item><title>如何调用DLL</title><link>https://mzsh.me/zh/blog/cnblogs-19174295/</link><guid>https://mzsh.me/zh/blog/cnblogs-19174295/</guid><description>UE 中加载 DLL 与排查 Windows 头文件冲突。</description></item><item><title>PixelStreaming 像素流送</title><link>https://mzsh.me/zh/blog/cnblogs-19165494/</link><guid>https://mzsh.me/zh/blog/cnblogs-19165494/</guid><description>开启PixelStreaming插件即可</description></item><item><title>多屏幕如何设置曝光同步</title><link>https://mzsh.me/zh/blog/cnblogs-19165561/</link><guid>https://mzsh.me/zh/blog/cnblogs-19165561/</guid><description>新建一个LocalPlayer，重写函数</description></item><item><title>如何设置监听服务器</title><link>https://mzsh.me/zh/blog/cnblogs-19165553/</link><guid>https://mzsh.me/zh/blog/cnblogs-19165553/</guid><description>开启监听服务器的最简单办法，创建一个桌面快捷方式，修改目标为UnrealEditor.exe MyProject.uproject ?listen -game</description></item><item><title>无缝地图切换</title><link>https://mzsh.me/zh/blog/cnblogs-19165504/</link><guid>https://mzsh.me/zh/blog/cnblogs-19165504/</guid><description>无缝地图切换有别于传统的流送地图，流送地图是在一个地图中放置子关卡，通过控制子关卡的加载和卸载来切换不同的地图 而无缝地图切换，是在切换地图的时候，先切换到一个简单的地图中，在后台加载地图，加载完成后再切换到那个地图中</description></item><item><title>自定义配置DeveloperSettings</title><link>https://mzsh.me/zh/blog/cnblogs-19165500/</link><guid>https://mzsh.me/zh/blog/cnblogs-19165500/</guid><description>创建一个继承自UDeveloperSettings的类 类属性中Config=Game意思是在Game.ini中配置，加上DefaultConfig，就是DefaultGame.ini config=后面跟的就是配置文件名 所以这里是在DefaultVehicle.ini中配置</description></item><item><title>解决UObject蓝图缺少上下文的问题</title><link>https://mzsh.me/zh/blog/cnblogs-19165488/</link><guid>https://mzsh.me/zh/blog/cnblogs-19165488/</guid><description>通常情况下，当你新建一个蓝图继承自UObejct的时候，你会发现不仅不能获取到PlayerController</description></item><item><title>遍历Actor所有属性进入Sequence记录</title><link>https://mzsh.me/zh/blog/cnblogs-19165520/</link><guid>https://mzsh.me/zh/blog/cnblogs-19165520/</guid><description>这里通过递归，将这个Actor内需要记录的结构体设置为了CPF_Interp，这个属性代表这个值能被LevelSequence记录，这个函数会遍历结构体内的所有属性，同样也设置为CPF_Interp</description></item><item><title>Stream实战指南</title><link>https://mzsh.me/zh/blog/cnblogs-19143267/</link><guid>https://mzsh.me/zh/blog/cnblogs-19143267/</guid><description>我个人的理解是，Stream 是 Perforce 推出的、类似于传统分支但更智能的“流”。它提供可视化视图，便于查看分支间的同步关系。</description></item><item><title>UE源码控制操作指南</title><link>https://mzsh.me/zh/blog/cnblogs-19143251/</link><guid>https://mzsh.me/zh/blog/cnblogs-19143251/</guid><description>Unreal中的操作跟Perforce中的操作大同小异</description></item><item><title>中文乱码问题修复</title><link>https://mzsh.me/zh/blog/cnblogs-19143254/</link><guid>https://mzsh.me/zh/blog/cnblogs-19143254/</guid><description>中文乱码的原因是服务器没有开启Unicode模式。</description></item><item><title>如何设置TypeMap</title><link>https://mzsh.me/zh/blog/cnblogs-19143258/</link><guid>https://mzsh.me/zh/blog/cnblogs-19143258/</guid><description>UE 的 Perforce 文件类型与团队二进制协作边界。</description></item><item><title>客户端安装配置指南</title><link>https://mzsh.me/zh/blog/cnblogs-19143255/</link><guid>https://mzsh.me/zh/blog/cnblogs-19143255/</guid><description>前往官网下载 P4V 客户端，选择平台与版本后下载。</description></item><item><title>客户端常用操作</title><link>https://mzsh.me/zh/blog/cnblogs-19143256/</link><guid>https://mzsh.me/zh/blog/cnblogs-19143256/</guid><description>基础的意思是每个使用Perforce的人都应该掌握的</description></item><item><title>无法删除Stream Depot怎么处理</title><link>https://mzsh.me/zh/blog/cnblogs-19143260/</link><guid>https://mzsh.me/zh/blog/cnblogs-19143260/</guid><description>test和Unreal Depot都是我要删除的Depot，区别是，test是完整的，而另一个则是先用stream -f -d 删除，结果被标记为deleted了，但是depot还是删除不了</description></item><item><title>如何实现cmd可以访问conda但不能通过默认环境访问python</title><link>https://mzsh.me/zh/blog/cnblogs-19143286/</link><guid>https://mzsh.me/zh/blog/cnblogs-19143286/</guid><description>通常情况下，当安装完成miniconda后，miniconda的base默认环境会作为默认环境被系统获取，系统可以直接用base来执行python，这就造成了base环境极容易被污染</description></item><item><title>一键解决MetaHuman播放动画时头部穿模问题</title><link>https://mzsh.me/zh/blog/cnblogs-19136316/</link><guid>https://mzsh.me/zh/blog/cnblogs-19136316/</guid><description>这是最近做MetaHuman项目发现的问题，当头部和身体同时播放不同动画的时候，脖子附近会出现穿模现象，这个问题在LevelSequence中暂时没有发现。</description></item></channel></rss>
