【发布时间】:2020-09-14 16:51:48
【问题描述】:
我有一个简单的益智游戏。
它是多个简单游戏的组合。由于这些游戏是在游戏过程中轮换的,所以一切都是动态生成的。 我对 SpawnActor 有疑问。
有一个名为 XGame(AActor) 的类由关卡管理器(APawn) 生成。它负责为这个特定的 X 游戏生成演员。
XGame.cpp
const FVector ActorLocation = GetActorLocation();
const FVector StickLocation = FVector(0, 0, 0) + ActorLocation;
const FVector BallLocation = FVector(0, 100, 0) + ActorLocation;
const FVector CircleLocation = FVector(0, 200, 0) + ActorLocation;
UWorld* World = GetWorld();
AXStick* Stick = World->SpawnActor<AXStick>(StickLocation, FRotator(0, 0, 0));
AXBall* Ball = World->SpawnActor<AXBall>(BallLocation, FRotator(0, 0, 0));
AXCircle* Ball = World->SpawnActor<AXCircle>(CircleLocation, FRotator(0, 0, 0));
问题是,每次我生成一个actor时,它的X坐标都会增加68。(我不知道为什么是68)
例如;
棍子在 0,0,0 处生成
球在 68、100、0 时生成
圆圈在 136、200、0 处生成
都是ACharacter
如果有人能提供帮助,我将不胜感激
【问题讨论】:
-
请阅读minimal reproducible example。您需要从头开始一个新程序,并添加 1. 编译和 2. 运行时重现错误的最少代码量。然后向我们展示该代码。这并不意味着在此处复制粘贴整个代码库。对于这样的测试程序,I/O 通常可以用静态分配代替。我们不需要包括您课程的每个部分。我们只需要重现导致此错误的部分。现在我最好的猜测是你在某个地方有一个正在递增的静态常量。如果有帮助,68 是十六进制 0x44 或二进制 0100 0100。
-
也许您在 x 轴上将根组件移动了 68 位? GetActorLocation 返回根组件的位置。但这只是猜测。在生成 Actor 时检查所有组件相对于根组件的位置。还要检查演员世界的位置,这个 68 不能凭空出现。您也可以关闭编辑器,重新构建整个项目并重新启动它,ue4 有时是错误的。
-
感谢两位宝贵的 cmets,我现在已经通过将它们更改为 actor 来解决它,因为当它们生成时,它们的胶囊组件在 0、0、0 处生成,因此它们发生碰撞并在 x 轴上移动。另一种解决方案是移动它们的胶囊碰撞。 @JohnFilleau 我正在考虑创建一个可重现的示例,但是我从未见过一个带有最小可重现示例的单个 ue4 问题。因为从头开始创建项目并进行测试需要花费太多时间。
-
很高兴你能解决它。请回答您自己的问题并接受它,以便将来帮助其他人。
标签: c++ unreal-engine4 game-development