Unreal Engine 4 C++ - 如何使演员沿 Z 轴上下移动
Unreal Engine 4 C++ - How to make an actor move up and down along the Z axis
我是 Unreal 4 引擎的新手,我在编码部分遇到了一些问题,因为我希望演员在达到一定高度后立即上下移动。这是我到目前为止所做的:
void APickup::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
FVector NewLocation = GetActorLocation();
NewLocation.Z += (DeltaTime * 20.f);
SetActorLocation(NewLocation);
}
我不知道如何使用 "If" 语句或 "bool" 语句来完成这项工作。任何帮助将非常感激。谢谢!
更新:
演员停在某个高度并没有移动,我现在需要它下降。这是代码:
if(NewLocation.Z <300)
{
NewLocation.Z +=(DeltaTime * 100.f);
SetActorLocation(NewLocation);
我猜你的问题与如何在 C++ 中做事比 Unreal Engine 本身更相关。
使用 if 语句,您可以检查您的身高是高于还是低于特定高度。然而,如果你想让你的演员上下移动,你需要保持某种内在状态。例如添加一个 bool
成员变量来跟踪它。在你的 class 声明中(.h 文件)
class APickup {
// ...other things...
bool bImGoingUp = true;
};
然后在您的 Tick 函数中检查您是向上还是向下并相应地更新您的高度。在这里你还需要检查你是在你的 Z 范围之上还是之下,如果是的话改变你的移动方向。假设您想在 [-50, 50] 之间移动(顺便说一句,Unreal 始终使用厘米)
void APickup::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
FVector NewLocation = GetActorLocation();
if (NewLocation.Z > 50.0f) {
bImGoingUp = false;
} else if (NewLocation.Z < -50.0f) {
bImGoingUp = true;
}
float factor = (bImGoingUp ? 20.f : -20.f);
NewLocation.Z += factor * DeltaTime;
SetActorLocation(NewLocation);
}
您还需要确保您的演员在这个范围内开始游戏,否则可能会永远上升或下降。
这只是一个基本示例,如果您想让它真正健壮,您需要详细说明您的逻辑。例如,您也可以查看演员的运动方向,看看您是在向上还是向下移动,而不是使用布尔值。
我是 Unreal 4 引擎的新手,我在编码部分遇到了一些问题,因为我希望演员在达到一定高度后立即上下移动。这是我到目前为止所做的:
void APickup::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
FVector NewLocation = GetActorLocation();
NewLocation.Z += (DeltaTime * 20.f);
SetActorLocation(NewLocation);
}
我不知道如何使用 "If" 语句或 "bool" 语句来完成这项工作。任何帮助将非常感激。谢谢!
更新: 演员停在某个高度并没有移动,我现在需要它下降。这是代码:
if(NewLocation.Z <300)
{
NewLocation.Z +=(DeltaTime * 100.f);
SetActorLocation(NewLocation);
我猜你的问题与如何在 C++ 中做事比 Unreal Engine 本身更相关。
使用 if 语句,您可以检查您的身高是高于还是低于特定高度。然而,如果你想让你的演员上下移动,你需要保持某种内在状态。例如添加一个 bool
成员变量来跟踪它。在你的 class 声明中(.h 文件)
class APickup {
// ...other things...
bool bImGoingUp = true;
};
然后在您的 Tick 函数中检查您是向上还是向下并相应地更新您的高度。在这里你还需要检查你是在你的 Z 范围之上还是之下,如果是的话改变你的移动方向。假设您想在 [-50, 50] 之间移动(顺便说一句,Unreal 始终使用厘米)
void APickup::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
FVector NewLocation = GetActorLocation();
if (NewLocation.Z > 50.0f) {
bImGoingUp = false;
} else if (NewLocation.Z < -50.0f) {
bImGoingUp = true;
}
float factor = (bImGoingUp ? 20.f : -20.f);
NewLocation.Z += factor * DeltaTime;
SetActorLocation(NewLocation);
}
您还需要确保您的演员在这个范围内开始游戏,否则可能会永远上升或下降。
这只是一个基本示例,如果您想让它真正健壮,您需要详细说明您的逻辑。例如,您也可以查看演员的运动方向,看看您是在向上还是向下移动,而不是使用布尔值。