前因
最近在研究GameFeature这个功能,UE官方推荐的是《古代山谷》这个项目,因为在其中用到了很多的新功能,GameFeature也在其中。观察到原来的GameFeature默认提供的action中其实功能比较有限,于是就从《古代山谷》拷贝了一些Action来用,结果Action_SpawnActor并无法在我自己的项目中在PIE模式下动态拔插。
分析
通过分析古代山谷中的Action编写逻辑我们可以知道,Action_SpawnActor其实是继承于WorldActionBase的,然后实现了WorldActionBase中的AddToWorld纯虚函数,从而达到SpawnActor的目的。
然后我们把断点打在SpawnActor前,然后我们运行PIE,并把GameFeatureData的状态从Loaded改为Active。
结果发现断点命中在Continue了:
可以看到,Entry的TargetWorld叫做GameFeatureTestMap,World也是GameFeatureTestMap,也就是说其实是同一个Level。但是最后判断的时候却是不相等。
于是我们尝试判断两个World的PathName是否相等:
结果发现一个叫做PIE_GameFeatureTestMap,另一个倒是我们一开始的GameFeatureTestMap。于是发现问题。
解决方案
把if条件改为两个World的Name是否相同
总结
没想到PIE在运行对应的Level的时候会给这个Level在生成一个自己的PIE_XXXLevel,真是涨知识了...
不过解决方案也有点问题,也就是如果设置的TargetMap恰巧与你的当前Level是一个名字就会错误地Spawn这个Actor到你当前Level中,这显然不是预期行为。
标签:GameFeatureTestMap,Ancient,GameFeature,示例,PIE,Action,Level,SpawnActor From: https://www.cnblogs.com/Vikyanite/p/18532123