应用工程集成流程
<p>[TOC]</p>
<table>
<thead>
<tr>
<th>作者</th>
<th>QFord</th>
</tr>
</thead>
<tbody>
<tr>
<td>创建日期</td>
<td>2024-10-14</td>
</tr>
<tr>
<td>更新日期</td>
<td>2024-12-09</td>
</tr>
<tr>
<td>备注</td>
<td>持续更新</td>
</tr>
<tr>
<td>版本号</td>
<td>V1.1.0</td>
</tr>
</tbody>
</table>
<p><strong>此工程是基于UE5.3.2新建了,器材资源基于UE5.4.3版本的工程进行降级版本进行迁移和调整,而集成插件的流程可供任何空项目集成参考</strong></p>
<h1>1. 创建空工程</h1>
<p>使用UE 5.3.2,通过<strong>游戏-空白模板</strong>创建空白项目,如下图所示:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=40fb4c0c52c500ca1ee5d620263231d3&amp;file=file.png" alt="" />
> 项目命名为:VLabUE</p>
<h1>2. 项目设置</h1>
<h2>2.1 美术-项目设置</h2>
<p>详见文档:[美术规范-项目设置](<a href="https://www.showdoc.com.cn/virtualLabUnreal/11542217436137032">https://www.showdoc.com.cn/virtualLabUnreal/11542217436137032</a> "美术规范-项目设置")</p>
<h1>3. 创建工程文件夹</h1>
<p>根据[项目开发规范-UE 工程目录规范](<a href="https://www.showdoc.com.cn/virtualLabUnreal/11235665419700683">https://www.showdoc.com.cn/virtualLabUnreal/11235665419700683</a> "项目开发规范-UE 工程目录规范") 创建文件夹目录,如下图所示:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=27f0802ae6748afd112426987af6e60f&amp;file=file.png" alt="" /></p>
<h1>4. 集成插件</h1>
<h2>4.1 新建插件文件夹</h2>
<p>在VLabUE项目文件的同级目录创建插件文件夹:Plugins,如下图所示:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=fdba61dde8ee3cd9d311d30882637c4d&amp;file=file.png" alt="" /></p>
<h2>4.2 添加自研插件子模块</h2>
<p>在上述新建的Plugins目录下添加子模块,注意添加的子模块所在的文件夹名称按照插件命名规范来,规范在上述的<strong>项目开发规范</strong>中。
需要添加的<strong>[子模块仓库地址链接文档](<a href="https://www.showdoc.com.cn/p/47bdde43271b2ee06ad6f2985c882e56">https://www.showdoc.com.cn/p/47bdde43271b2ee06ad6f2985c882e56</a> "子模块仓库地址链接文档")</strong>
添加插件子模块的例图如下:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=ff5a5126185828812082936d06e6277d&amp;file=file.png" alt="" />
> 如果为了稳妥起见,可以先从底层插件开始添加,然后编译,没问题了再折腾上层的插件。拉插件的时候,要连带依赖的插件一起添加后再编译。</p>
<h2>4.3 添加第三方插件</h2>
<p>这些插件是直接放置在应用中,清单如下:
DTBPJson
GameplayMessageRouter
UnLua
UnLuaExtensions
UnLuaTestSuite</p>
<h2>4.4 检查插件内容</h2>
<p>检查插件文件夹下是否存在内容,没有的应该立即处理,截止编写时间(2024-10-14)的插件目录,如下图所示:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=d743cbd54d35b0a6ddd048c1884ef64e&amp;file=file.png" alt="" /></p>
<h2>4.5 插件项目设置</h2>
<h2>4.6 编译工程</h2>
<p><strong>在UE编辑器中关闭Live Coding-启用实时代码编写</strong>先试用下列配置进行编译,如下图所示:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=4f04e6246779ec0d0bd3efcc351ed766&amp;file=file.png" alt="" /></p>
<h2>4.x 更新插件</h2>
<p>自研插件还在不断开发迭代中,当前集成阶段可能随时需要更新、编译、联调和发布测试。</p>
<h3>1. 引擎重构</h3>
<p>2024-10-21:各个器材蓝图更新</p>
<h1>5. 烘焙内容&打包</h1>
<p>下面是集成插件过程中的打包验证。</p>
<h2>5.1 交互资源异常</h2>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=7f84114d34da8771ba7ea7ab7ef0be79&amp;file=file.png" alt="" />
<strong>解决方案:</strong>资源版本太新了,需要降级的到当前工程引擎版本。</p>
<h2>5.2 PathTracer资源异常</h2>
<p><strong>解决方案:</strong>资源版本太新了,需要降级的到当前工程引擎版本。
> 此插件有较多蓝图,先前有被修改过,故无法直接使用官方的版本,需要人工处理。此插件目前由引擎接管,交由陈铭处理。
<strong>注意:</strong>更新后需要清空插件缓存,否则可能不生效</p>
<h1>6. 迁移器材</h1>
<h2>6.1 开关</h2>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=999f9f1ad8cbdd97a49b470922a976be&amp;file=file.png" alt="" />
<strong>解决方案:</strong> 经过排查,是引擎的组件改名导致引用丢失,重新挂载组件并修改蓝图节点解决。</p>
<h2>6.2 电池</h2>
<ul>
<li>
<p>迁移电池蓝图,打开后崩溃报错:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=a3917f23488245a5ff942ad940d24c51&amp;file=file.png" alt="" />
> 更新引擎并重新迁移</p>
</li>
<li>电池初始化代码从lua转蓝图</li>
<li>
<p>添加电池移动组件</p>
<h2>6.3 螺线管</h2>
</li>
<li>迁移螺线管</li>
<li>
<p>添加移动组件</p>
<h2>6.4 小磁针</h2>
</li>
<li>迁移小磁针</li>
<li>解决移动文件夹后xiaochizheng_chitie.uasset资源无法移动导致的表现问题</li>
<li>
<p>解决小磁针xiaochizheng_chitie1.uasset引用旧路径导致的烘焙内容失败的问题</p>
<h2>6.5 导线(待WYD集成)</h2>
<p>> 2024-10-17:目前由WYD同学处理中</p>
</li>
</ul>
<h1>7. 迁移场景</h1>
<h2>7.1 美术仓库工程-关卡目录整理</h2>
<h2>7.2 美术仓库工程-项目设置-地图和模式-默认地图-编辑器开始地图/游戏默认地图 设定</h2>
<h2>7.3 美术仓库工程-烘焙内容/出包-测试</h2>
<p>> 张庆(182413) 2024/10/16 14:07:09 文攀这几天请假了
开发这边就代劳处理下,以便将美术关卡资源同步到开发工程中。</p>
<h2>7.4 关卡资源迁移到开发工程</h2>
<h2>7.5 开发工程-烘焙内容/出包-测试</h2>
<p>><strong>注意:</strong>需要留意场景的性能,最简单直观的是在开发环境打开[显示FPS]。
2024-10-17:发现场景的帧率在镜头离实验桌面较近时,帧率会狂掉到报红的情况,但又不是必现的!先反馈给美术备案下。
同时,张庆反馈下周一会更新关卡(现在的看起来还很粗糙)。
<strong>同时,渲染设置应该也得更新,到时候再验收</strong></p>
<h1>8. 其他杂项</h1>
<h2>8.1 迁移LabGameMode</h2>
<p>LabGameMode依赖6.2的模块,需要同时进行,UE工程文件需要更新依赖模块信息。
<strong>注意</strong>:项目中需要设置LabGameMode,否则交互无法初始化会导致运行带有器材的关卡时崩溃!!!
>冗余的模块如:VLabUE_GeneralAbility无需添加了。</p>
<h2>8.2 迁移模块</h2>
<ul>
<li>LuaToUnreal
>需在UE工程插件中添加子模块</li>
</ul>
<h2>8.3 UnrealCSharp引擎生成和编译</h2>
<p>在UE编辑器命令行执行相关的生成和编译命令
报红反馈陈铭:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=2342255a58414e183511d523d5cd4b37&amp;file=file.png" alt="" />
<strong>解决方案:</strong>更新插件后重新编译</p>
<h2>8.4 PC端运行非全屏(便于关闭)</h2>
<p>通过DefaultGameUserSettings.ini配置文件和代码实现</p>
<h2>8.5 新建VLabGameInstance</h2>
<h2>8.6 动态创建器材</h2>
<p>在World初始化完成后动态创建物理颗粒的相关器材(C++实现)
> 之前电池、开关、导线和螺线管是直接放置在关卡中,而小磁针是在关卡蓝图中创建。</p>
<h2>8.7 同步项目设置</h2>
<ul>
<li>详见【2.项目设置】</li>
</ul>
<h2>8.8 迁移[显示/隐藏]磁感线-按钮UI</h2>
<p>创建UI从关卡蓝图移植到C++实现
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=6f34eae1f0c648b02e628d974b097be0&amp;file=file.png" alt="" />
> <strong>注意:</strong>使用UMG UI需要在VLabUE.Build.cs中添加“UMG”模块引用</p>
<h2>8.x 删除旧规范器材Lua</h2>
<p>已完成</p>
<h1>9. 创建主关卡</h1>
<p>Level_Main_Release
>美术提供的Level_ShiYanShi_1作为<strong>关卡实例</strong>集成到主关卡中</p>
<h1>10. 打包验证</h1>
<p><strong>注意:</strong>有资源更新/插件更新都建议<strong>烘焙内容</strong>和<strong>打包</strong>验证,早发现(bug),早治疗(fix)。</p>
<h2>PC端</h2>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=75cecbd1a76f48621efb714cf6fecca4&amp;file=file.png" alt="" /></p>
<h2>Android端</h2>
<p>TODO:待验证(主要是交互需要适配)</p>
<h1>X. 异常处理</h1>
<h2>1. 子模块的文件夹命名VLabPlayerAdapter和远端冲突</h2>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=81f5db67ba0257a27c048574d6ec68b2&amp;file=file.png" alt="" />
<strong>解决方案:</strong> 子模块的文件夹名进行适当调整,如:VLabPlayerAdapterUE,或者还有其他覆盖提交的方式。</p>
<h2>2. 引擎组件和交互组件编译错误</h2>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=bdfb068f3836833f22cc5fc3efd0942c&amp;file=file.png" alt="" />
<strong>解决方案:</strong> 物件播放器更新了接口,其他依赖的组件需要同步更新。</p>
<h2>3. fatal error C1900 乱码错</h2>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=b9d25b235d512a22112cd2c14975adf0&amp;file=file.png" alt="" />
<strong>临时解决方案:</strong>如下图所示:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=bc9e35d5681ecf42da1df5e5a070be94&amp;file=file.png" alt="" />
>临时解决方案只能使用debug方式编译和发布</p>
<p><strong>终极解决方案 2024-10-16(来自陈铭)</strong>,如下图所示:
532 默认使用低版本的msvc编译,导致打包异常
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=e0394162fa003671224e75fd25b4ab92&amp;file=file.png" alt="" />
> <strong>注意:</strong>选择上图的最新版本后,要将旧的给<strong>取消√</strong>!!!</p>
<h2>4. 更新播放器插件后打包报错</h2>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=f62eed8e6e01e99f520fa8c26754520a&amp;file=file.png" alt="" />
<strong>解决方案</strong>:播放器排查处理,报错的方法从Editor宏移到外面。</p>
<h2>5. 关卡内容变没了/运行带器材的关卡崩溃</h2>
<p>插件开发人员某个提交导致
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=7c95a9813bd46d0f37d0331ef470ab2a&amp;file=file.png" alt="" />
<strong>解决方案</strong>:重新迁移美术场景资源、设置项目的Gamemode</p>
<h1>x1. 美术资源问题反馈</h1>
<h2>1. 为美术提供物理器材的迁移工程并反馈开关接线柱问题(2024-10-15)</h2>
<h1>x2. 实用方法</h1>
<h2>1. 优雅的删除子模块</h2>
<pre><code># 逆初始化模块,其中{MOD_NAME}为模块目录,执行后可发现模块目录被清空
git submodule deinit {MOD_NAME}
# 删除.gitmodules中记录的模块信息(--cached选项清除.git/modules中的缓存)
git rm --cached {MOD_NAME}
# 提交更改到代码库,可观察到&#039;.gitmodules&#039;内容发生变更
git commit -am &quot;Remove a submodule.&quot;</code></pre>
<p>> 主要用于子模块所在的文件夹需要重命名的时候,得先删除子模块
<a href="https://www.jianshu.com/p/ed0cb6c75e25">https://www.jianshu.com/p/ed0cb6c75e25</a></p>
<h2>2. Cook工程中的全部内容设置</h2>
<p>为防止插件中的内容(即使开启了打包的地图过滤)被过滤,可以按照下图进行设置
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=0db5dc6fed664dffd01935cb64ec4df2&amp;file=file.png" alt="" /></p>