【问题标题】:Unreal Engine 4 C++ - How to make an actor move up and down along the Z axisUnreal Engine 4 C++ - 如何让演员沿 Z 轴上下移动
【发布时间】:2018-04-17 03:51:27
【问题描述】:

我是 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);

【问题讨论】:

  • 你的意思是if (NewLocation.Z &gt; CertainHeight) { NewLocation.Z += ... }
  • 是的,如果 NewLocation.Z 达到一定的高度,停止它并让它下降。
  • 或者使用 bool 命令?
  • bool 命令是什么意思?
  • 如果陈述是真的,那么让演员下去,或者如果陈述是假的,那么做同样的事情

标签: c++ actor unreal-engine4


【解决方案1】:

我猜你的问题与如何在 C++ 中做事有关,而不是虚幻引擎本身。

使用 if 语句可以检查您是否高于或低于特定高度。然而,如果你想让你的演员上下移动,你需要保持某种内在状态。例如添加一个bool 成员变量来跟踪它。在你的类声明中(.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);
}

您还需要确保您的演员在此范围内开始游戏,否则可能会永远上升或下降。

这只是一个基本示例,如果您想让它真正健壮,您需要详细说明您的逻辑。例如,您也可以查看演员的移动方向,以查看您是向上还是向下移动,而不是使用布尔值。

【讨论】:

  • 尽管使用了你的代码,演员还是继续往上爬,你说的高度是一个数字,对吧?
  • 是的,特定高度就是您希望演员开始下降的高度。它应该是世界坐标中的绝对 Z 值(以厘米为单位)。在编辑器中选择您想要的高度并检查其 Z 值
  • 即使有一定的高度,它一直在上升,它不会下降,这真是令人痛苦的**
  • 更新:actor 正在停止但不会停止
  • 哦,是的,当它低于一定高度时,它又开始上升
猜你喜欢
  • 1970-01-01
  • 2020-11-09
  • 2019-12-11
  • 2014-04-27
  • 2016-02-17
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 2020-11-19
相关资源
最近更新 更多