<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>Unreal Engine, C++, Python &amp; Perforce Blog · Xiao Mao</title><link>https://mzsh.me/en/blog/</link><description>Unreal Engine, C++, Python &amp; Perforce Blog · Xiao Mao</description><language>en</language><item><title>Local Integration of an AI Digital Human Interaction Workflow</title><link>https://mzsh.me/en/blog/ai-digital-human-integration/</link><guid>https://mzsh.me/en/blog/ai-digital-human-integration/</guid><description>Integrating speech recognition, LLM responses, speech synthesis, and lip sync in Unreal Engine, with local, cloud, and hybrid deployments.</description></item><item><title>Adapting AirSim Controls for UE Flight Simulation</title><link>https://mzsh.me/en/blog/flying-car-simulator/</link><guid>https://mzsh.me/en/blog/flying-car-simulator/</guid><description>Adapt frame-by-frame flight commands, yaw control, coordinate conversion, and AirSim interfaces for UE 5.6.</description></item><item><title>Retargeting Motion Capture to Robot Models in UE</title><link>https://mzsh.me/en/blog/motion-capture-robot-control/</link><guid>https://mzsh.me/en/blog/motion-capture-robot-control/</guid><description>Map filtered Kinect skeleton data to robot joints using structural proportions, IK, smoothing, and angular-speed limits.</description></item><item><title>Six-Axis Platform Kinematics and Ocean Recording Integration</title><link>https://mzsh.me/en/blog/six-dof-motion-platform/</link><guid>https://mzsh.me/en/blog/six-dof-motion-platform/</guid><description>Implement Stewart platform kinematics and motion processing, with Take Recorder, Sequence, and LiveLink sending for an ocean scene.</description></item><item><title>A Toolchain from Plugin Development to Release</title><link>https://mzsh.me/en/blog/plugin-release-workflow/</link><guid>https://mzsh.me/en/blog/plugin-release-workflow/</guid><description>Turning scattered development operations into dedicated tools for plugin management and multi-version packaging.</description></item><item><title>Publishing Markdown Images Together with the Article</title><link>https://mzsh.me/en/blog/markdown-publishing/</link><guid>https://mzsh.me/en/blog/markdown-publishing/</guid><description>Reducing manual work when moving articles by converting local image paths into publishable text that can be copied.</description></item><item><title>Managing Perforce branch workspaces and local caches</title><link>https://mzsh.me/en/blog/perforce-workspace-pool/</link><guid>https://mzsh.me/en/blog/perforce-workspace-pool/</guid><description>Organize branch switching with a workspace pool, separate server synchronization from offline directory adoption, and define cache protection and cleanup boundaries.</description></item><item><title>Driving Session Recording and UE Replay Management</title><link>https://mzsh.me/en/blog/driving-session-replay/</link><guid>https://mzsh.me/en/blog/driving-session-replay/</guid><description>Capture driving inputs and vehicle states, save performance statistics, and manage UE Network Replay recordings.</description></item><item><title>Creating Independent Multiwindow Interfaces in UE</title><link>https://mzsh.me/en/blog/ue-multiwindow-interface/</link><guid>https://mzsh.me/en/blog/ue-multiwindow-interface/</guid><description>Host UMG in native Slate windows with lifecycle, position, size, visibility, and DPI controls.</description></item><item><title>Robot Realtime Data and Three-Axis IK Prototype</title><link>https://mzsh.me/en/blog/robot-realtime-ik-prototype/</link><guid>https://mzsh.me/en/blog/robot-realtime-ik-prototype/</guid><description>An in-development UDP JSON and three-joint position-IK prototype, awaiting testing with the actual mechanism and real data.</description></item><item><title>Fixing Missing GI Across Multiple Views in UE 5.3</title><link>https://mzsh.me/en/blog/ue53-multiview-gi/</link><guid>https://mzsh.me/en/blog/ue53-multiview-gi/</guid><description>A UE 5.3 source-build record of changing the maximum view count from 2 to 3 across seven locations, with a source screenshot and version limits.</description></item><item><title>Source-built Unreal on Windows: a shared engine association</title><link>https://mzsh.me/en/blog/ue-source-engine-association/</link><guid>https://mzsh.me/en/blog/ue-source-engine-association/</guid><description>On Windows, copies of the same source-built engine can receive different registration identifiers. That creates unnecessary `EngineAssociation` change</description></item><item><title>Unreal Blueprint parameters: references and display names</title><link>https://mzsh.me/en/blog/ue-uparam-reference-metadata/</link><guid>https://mzsh.me/en/blog/ue-uparam-reference-metadata/</guid><description>A C++ reference parameter may appear as a different Blueprint pin direction than expected. Type, `const` and metadata all matter. These UE5 reflected </description></item><item><title>Cursor with Unreal 5.6 on Windows: establish the build first</title><link>https://mzsh.me/en/blog/ue-cursor-workflow-notes/</link><guid>https://mzsh.me/en/blog/ue-cursor-workflow-notes/</guid><description>These notes describe Windows and UE 5.6. The original record did not preserve complete Cursor or extension versions, so it is not a compatibility prom</description></item><item><title>Fab submission notes: review the package and instructions together</title><link>https://mzsh.me/en/blog/ue-fab-submission-notes/</link><guid>https://mzsh.me/en/blog/ue-fab-submission-notes/</guid><description>A feature working in the development project does not prove that a delivery package can be installed and reproduced. These notes distill past Unreal p</description></item><item><title>Unreal DataTable and JSON: validate before replacing</title><link>https://mzsh.me/en/blog/ue-datatable-json-import-export/</link><guid>https://mzsh.me/en/blog/ue-datatable-json-import-export/</guid><description>JSON files can become DataTable rows, but clearing the table before parsing can destroy old data on a later failure. This workflow targets a UE5 C++ e</description></item><item><title>Saving Unreal editor assets: checkout, dirty state and results</title><link>https://mzsh.me/en/blog/ue-editor-asset-saving/</link><guid>https://mzsh.me/en/blog/ue-editor-asset-saving/</guid><description>An automation tool may change an asset without updating its file. Possible causes include a clean package, an incorrect target path or source-control </description></item><item><title>Breaking Level Instances in batches: bound the work and stop on failure</title><link>https://mzsh.me/en/blog/ue-level-instance-break-safety/</link><guid>https://mzsh.me/en/blog/ue-level-instance-break-safety/</guid><description>Breaking a Level Instance may expose nested instances. A loop that continues whenever it finds an instance can repeat forever when one cannot be broke</description></item><item><title>Exploring syntax parsing for game formulas in UE</title><link>https://mzsh.me/en/blog/ue-expression-parser-basics/</link><guid>https://mzsh.me/en/blog/ue-expression-parser-basics/</guid><description>Exploring a UE C++ parser for game-event formulas, from arithmetic, conditions, and custom attributes to string validation, tokenization, attribute substitution, and evaluation by precedence.</description></item><item><title>Everyday C++ choices: containers, sorting and value categories</title><link>https://mzsh.me/en/blog/cpp-algorithms-containers-value-categories/</link><guid>https://mzsh.me/en/blog/cpp-algorithms-containers-value-categories/</guid><description>Choose containers and sorting by access patterns and ordering requirements rather than old compiler implementation details. This article uses C++17 se</description></item><item><title>Updating Excel by column names in Python: tuple keys and separate output</title><link>https://mzsh.me/en/blog/python-excel-column-update/</link><guid>https://mzsh.me/en/blog/python-excel-column-update/</guid><description>A reference workbook supplies values to update a target using several matching columns. Joining keys with underscores makes `(&quot;A_B&quot;, &quot;C&quot;)` collide wit</description></item><item><title>Comparing directories in Python: start with a content-difference report</title><link>https://mzsh.me/en/blog/python-directory-diff-report/</link><guid>https://mzsh.me/en/blog/python-directory-diff-report/</guid><description>When only some files changed between two large directories, you need additions, modifications and removals. The original workflow also copied files an</description></item><item><title>Switching Perforce stream workspaces: preflight and failure boundaries</title><link>https://mzsh.me/en/blog/python-perforce-stream-switch-safety/</link><guid>https://mzsh.me/en/blog/python-perforce-stream-switch-safety/</guid><description>A button that changes Client Stream, syncs and cleans can place local changes under the wrong view. This article describes a generic Python protection</description></item><item><title>Fixing UMG Size That Does Not Change During Rendering</title><link>https://mzsh.me/en/blog/cnblogs-19813721/</link><guid>https://mzsh.me/en/blog/cnblogs-19813721/</guid><description>When rendering UMG, you may encounter a frustrating issue: its rendered size does not change with the output resolution you set.</description></item><item><title>Blueprint generic struct serialization: memory layout versus persistence</title><link>https://mzsh.me/en/blog/cnblogs-19770934/</link><guid>https://mzsh.me/en/blog/cnblogs-19770934/</guid><description>Reflected struct arguments, JSON parsing and safe persistence boundaries.</description></item><item><title>Managing Configuration File Exclusion During Packaging</title><link>https://mzsh.me/en/blog/cnblogs-19770930/</link><guid>https://mzsh.me/en/blog/cnblogs-19770930/</guid><description>Staging inclusion and exclusion rules in DefaultGame.ini, along with configuration scanning, file writes, and cache reloads.</description></item><item><title>Making a Rounded Rectangle with a Material</title><link>https://mzsh.me/en/blog/cnblogs-19379355/</link><guid>https://mzsh.me/en/blog/cnblogs-19379355/</guid><description>I found this old note while organizing my notes. It creates a rounded rectangle with a material. The values were set for a project with three combined screens, so adjust them before using it.</description></item><item><title>Seeing Exactly Which Files Were Packaged</title><link>https://mzsh.me/en/blog/cnblogs-19379306/</link><guid>https://mzsh.me/en/blog/cnblogs-19379306/</guid><description>Unlike the usual packaged files, this view shows every configuration file, asset, plugin, and other file included in the packaged project.</description></item><item><title>Material Basics: The If Node</title><link>https://mzsh.me/en/blog/cnblogs-19379337/</link><guid>https://mzsh.me/en/blog/cnblogs-19379337/</guid><description>A beginner in our group shared this image a couple of days ago and asked why the material is invisible when dissolve is 0.</description></item><item><title>Changing the Cache Path</title><link>https://mzsh.me/en/blog/cnblogs-19379365/</link><guid>https://mzsh.me/en/blog/cnblogs-19379365/</guid><description>The simplest method is to search for \Engine\Config\BaseEngine.ini with Evenyting.</description></item><item><title>The Keys to Runtime Animation Recording: Correct Bone Data and Saving</title><link>https://mzsh.me/en/blog/cnblogs-19197541/</link><guid>https://mzsh.me/en/blog/cnblogs-19197541/</guid><description>The two most important issues in runtime animation recording in UE5.4 are obtaining correct bone data and saving AnimSequence correctly.</description></item><item><title>A Simple C++ MVVM Application</title><link>https://mzsh.me/en/blog/cnblogs-19192707/</link><guid>https://mzsh.me/en/blog/cnblogs-19192707/</guid><description>How to create a simple, usable MVVM object in C++. The following steps were tested in UE5.5.</description></item><item><title>Tips for Chinese and English Editor Settings</title><link>https://mzsh.me/en/blog/cnblogs-19183986/</link><guid>https://mzsh.me/en/blog/cnblogs-19183986/</guid><description>There seem to be many new UE users lately, so I am collecting a few tips for everyone.</description></item><item><title>Quickly Creating a Map</title><link>https://mzsh.me/en/blog/cnblogs-19184043/</link><guid>https://mzsh.me/en/blog/cnblogs-19184043/</guid><description>This covers quickly creating a usable standard map, excluding World Partition maps.</description></item><item><title>When Only One Monitor Displays in Multi-Monitor Fullscreen</title><link>https://mzsh.me/en/blog/cnblogs-19174288/</link><guid>https://mzsh.me/en/blog/cnblogs-19174288/</guid><description>This concerns issues after launching a game with multiple monitors combined into one screen using NVIDIA Surround.</description></item><item><title>Calling a DLL</title><link>https://mzsh.me/en/blog/cnblogs-19174295/</link><guid>https://mzsh.me/en/blog/cnblogs-19174295/</guid><description>Loading DLLs in Unreal and diagnosing Windows header conflicts.</description></item><item><title>PixelStreaming</title><link>https://mzsh.me/en/blog/cnblogs-19165494/</link><guid>https://mzsh.me/en/blog/cnblogs-19165494/</guid><description>Enable the PixelStreaming plugin.</description></item><item><title>Synchronizing Exposure Across Multiple Screens</title><link>https://mzsh.me/en/blog/cnblogs-19165561/</link><guid>https://mzsh.me/en/blog/cnblogs-19165561/</guid><description>Create a LocalPlayer and override the function.</description></item><item><title>Setting Up a Listen Server</title><link>https://mzsh.me/en/blog/cnblogs-19165553/</link><guid>https://mzsh.me/en/blog/cnblogs-19165553/</guid><description>The simplest way to start a listen server is to create a desktop shortcut and set its target to UnrealEditor.exe MyProject.uproject ?listen -game.</description></item><item><title>Seamless Map Travel</title><link>https://mzsh.me/en/blog/cnblogs-19165504/</link><guid>https://mzsh.me/en/blog/cnblogs-19165504/</guid><description>Unlike level streaming, which loads and unloads sublevels within one map, seamless travel first enters a simple transition map, loads the destination in the background, and then switches to it.</description></item><item><title>Custom Configuration with DeveloperSettings</title><link>https://mzsh.me/en/blog/cnblogs-19165500/</link><guid>https://mzsh.me/en/blog/cnblogs-19165500/</guid><description>Create a class derived from UDeveloperSettings. Config=Game selects Game.ini; adding DefaultConfig selects DefaultGame.ini. The name after config= is the configuration filename, so this example uses DefaultVehicle.ini.</description></item><item><title>Fixing Missing Context in UObject Blueprints</title><link>https://mzsh.me/en/blog/cnblogs-19165488/</link><guid>https://mzsh.me/en/blog/cnblogs-19165488/</guid><description>When you create a Blueprint derived from UObject, you may find that it cannot obtain a PlayerController.</description></item><item><title>Traversing Actor Properties for Sequence Recording</title><link>https://mzsh.me/en/blog/cnblogs-19165520/</link><guid>https://mzsh.me/en/blog/cnblogs-19165520/</guid><description>Recursively setting structs and all their properties to CPF_Interp so their values can be recorded by LevelSequence.</description></item><item><title>A Practical Guide to Streams</title><link>https://mzsh.me/en/blog/cnblogs-19143267/</link><guid>https://mzsh.me/en/blog/cnblogs-19143267/</guid><description>My understanding is that a Stream is Perforce&#39;s smarter counterpart to a traditional branch. Its visual view makes synchronization relationships between branches easier to see.</description></item><item><title>UE Source Control Operations Guide</title><link>https://mzsh.me/en/blog/cnblogs-19143251/</link><guid>https://mzsh.me/en/blog/cnblogs-19143251/</guid><description>Operations in Unreal are much like those in Perforce.</description></item><item><title>Fixing Garbled Chinese Text</title><link>https://mzsh.me/en/blog/cnblogs-19143254/</link><guid>https://mzsh.me/en/blog/cnblogs-19143254/</guid><description>Garbled Chinese text occurs because Unicode mode is not enabled on the server.</description></item><item><title>How to Configure TypeMap</title><link>https://mzsh.me/en/blog/cnblogs-19143258/</link><guid>https://mzsh.me/en/blog/cnblogs-19143258/</guid><description>Unreal Perforce file types and team binary-delivery boundaries.</description></item><item><title>Client Installation and Configuration Guide</title><link>https://mzsh.me/en/blog/cnblogs-19143255/</link><guid>https://mzsh.me/en/blog/cnblogs-19143255/</guid><description>Download the P4V client from the official website after selecting your platform and version.</description></item><item><title>Common Client Operations</title><link>https://mzsh.me/en/blog/cnblogs-19143256/</link><guid>https://mzsh.me/en/blog/cnblogs-19143256/</guid><description>The basics are operations that everyone using Perforce should know.</description></item><item><title>What to Do When a Stream Depot Cannot Be Deleted</title><link>https://mzsh.me/en/blog/cnblogs-19143260/</link><guid>https://mzsh.me/en/blog/cnblogs-19143260/</guid><description>Both test and Unreal Depot are depots I want to delete. test is intact, while the other was first deleted with stream -f -d and marked deleted, yet the depot still cannot be deleted.</description></item><item><title>Making Conda Available in CMD Without Exposing Python from the Default Environment</title><link>https://mzsh.me/en/blog/cnblogs-19143286/</link><guid>https://mzsh.me/en/blog/cnblogs-19143286/</guid><description>After installing Miniconda, the system normally uses its base environment by default and can run Python directly from it, making base very easy to contaminate.</description></item><item><title>A One-Click Fix for MetaHuman Head Clipping During Animation</title><link>https://mzsh.me/en/blog/cnblogs-19136316/</link><guid>https://mzsh.me/en/blog/cnblogs-19136316/</guid><description>In a recent MetaHuman project, playing different head and body animations simultaneously caused clipping around the neck. I have not observed this issue in LevelSequence so far.</description></item></channel></rss>
