[已废弃]02应用整合需求和解决方案-V0.1.0
<p>[TOC]</p>
<table>
<thead>
<tr>
<th>作者</th>
<th>QFord</th>
</tr>
</thead>
<tbody>
<tr>
<td>创建日期</td>
<td>2024-7-29</td>
</tr>
<tr>
<td>更新日期</td>
<td>2024-11-6</td>
</tr>
</tbody>
</table>
<p><strong>后续是跟AI表演项目集成为一个项目,交由成都刘春光那边处理,故此方案废弃。
但目录规范,经过迭代,作为规范沿用!</strong></p>
<h1>需求描述</h1>
<p><strong>需求来源:</strong>锐锋面谈,一起参与的同学有洪彬和若雯。</p>
<h2>1. 剧情实现框架</h2>
<p>基于若草的范例(NDStarterGame),使用FlowGraph框架来实现剧情的演绎,剧情的基本元素是使用seq实现的。
> 2024/7/25 13:17:55
成功接收离线文件"NDStarterGame.7z"。发送者:洪彬</p>
<p><strong>需求拆解</strong>:</p>
<ol>
<li>基于已有颗粒,进行简单的剧情脚本设计</li>
<li>基于FlowGraph和Seq实现剧情脚本的内容</li>
</ol>
<h2>2. 应用整合</h2>
<p>期望若干颗粒整合到一起,在UE工程目录中做好划分。
<strong>整合的好处:</strong></p>
<ol>
<li>整合到一起,便于后续的出包演示。</li>
<li>整合到一起,便于后续接入DLC方案。</li>
<li>整合到一起,便于复用公共能力。</li>
<li>整合到一起,越往后整合,解决冲突的成本越高,故宜早不宜迟。</li>
</ol>
<h3>技术方案</h3>
<h4><strong>资源目录</strong>的规范:</h4>
<p>Content
├─FutureLab
│ ├─BeautyLab
│ │ ├─PeriodicTable
│ │ └─CircuitFaultAnalysis
│ │ └─......
│ ├─Common
│ ├─Shell
│ ├─VLabUE
│ │ ├─MagneticField
│ │ └─......</p>
<p>> BeautyLab:用于存放<strong>最美颗粒</strong>的内容
VLabUE:用于存放<strong>虚拟实验室原有颗粒</strong>的内容
Common:用于存放<strong>公共</strong>的内容,比如引擎组件相关的业务
Shell:用于存放<strong>外壳</strong>的内容</p>
<h4><strong>代码目录及其他</strong>规范</h4>
<p>组件代码是基于模块化和插件方式开发,规范详见
[UE-项目开发规范](<a href="https://www.showdoc.com.cn/virtualLabUnreal/11235665419700683https://www.showdoc.com.cn/virtualLabUnreal/11235665419700683">https://www.showdoc.com.cn/virtualLabUnreal/11235665419700683https://www.showdoc.com.cn/virtualLabUnreal/11235665419700683</a> "UE-项目开发规范")</p>
<h3>应用内通信</h3>
<h4>1. 安装插件</h4>
<p>GameplayMessageRouter,会提交到vlab-ue项目,不需要另外安装</p>
<h4>2. 定义GameplayTags</h4>
<p>Project Settings->Project->GameplayTagList
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=c75597845239c9fb8a8dbf81d5ab7372&amp;file=file.png" alt="" />
已添加backMainLevel事件</p>
<h4>3. 全局监听事件</h4>
<p>Project Settings->Project->Maps & Modes—->Game Instance Class
添加一个GameInstance蓝图中添加Listen for Gameplay Message
GameInstance蓝图中添加Listen for Gameplay Message
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=ed5374a2827b7d637a7e5959f4cd06d5&amp;file=file.png" alt="" />
delay是为了让监听生效
注意Channel值,是在第二步定义</p>
<h4>4. 创建结构体</h4>
<p>结构体用于定义消息内容
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=5ff6237ed0177399f1c6715e99b4c038&amp;file=file.png" alt="" /></p>
<h4>5. 蓝图发消息</h4>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=6385ff05136d7af120b1c16fc3f1df23&amp;file=file.png" alt="" />
Channel一样选择tag,收发消息的tag一致才能收到消息</p>
<h3>问题排查</h3>
<h4>1. UE工程内资源移动-坑点1-资源引用丢失问题</h4>
<p>Unreal的资源迁移删除原有文件夹会导致引用丢失,下面提供了一种方法。
PS:如果不删除原有文件夹(迁移后资源移动了,原有文件夹仅保留重定向文件),是不会导致引用丢失的。
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=24695db9ca65dc86b81b820e1b8b42fe&amp;file=file.png" alt="" />
<a href="https://www.cnblogs.com/kekec/p/13498833.html">https://www.cnblogs.com/kekec/p/13498833.html</a></p>
<h4>2. UE工程内资源移动-坑点2-UnrealCSharp蓝图路径问题</h4>
<p>UnrealCSharp的相关的映射蓝图路径不会更新,会导致异常。下图显示了运行时的错误信息:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=c67e99f79e43e978354a7931b6d4df0b&amp;file=file.png" alt="" />
排查后判定为引擎原因,同步陈铭同学处理,解决方案如下:</p>
<p>1、pull
1.1:在工程根目录pull
1.2:在下面的目录pull-子模块的
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=c5f1feafb9677eb6b70b818cfb18a7ec&amp;file=file.png" alt="" />
2、删除以下文件夹
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=658201e44b030235f00b9aeeb649e33c&amp;file=file.png" alt="" />
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=9ca552dd0fdecab187989105a49ab3ec&amp;file=file.png" alt="" />
3、启动ue,按顺序在UE的Cmd输入控制台命令: 分析、创建编码、编译
UnrealCSharp.Editor.Generator
UnrealCSharp.Editor.CodeAnalysis
UnrealCSharp.Editor.Generator
UnrealCSharp.Editor.Compile
4、重启UE</p>
<h4>3. GeneralAbility模块报错阻塞</h4>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=480a12ada4845d2579dd48c5c6103b29&amp;file=file.png" alt="" />
<strong>临时:解决方案:</strong>
因UnrealCSharp方案会自动根据C++生产C#代码,这块的代码如上图Tools.cs异常会导致上述[2]的引擎代码生成阻塞,从而导致异常!
正常应该从UnrealCSharp侧处理,忽略非引擎组件模块的C++代码转C#。
<strong>直接删除无关的Tools.cs文件即可解决。</strong></p>