【问题标题】:How can I make the mouse hit point location vector variables be rounded to 0.5?如何使鼠标点击点位置矢量变量四舍五入为 0.5?
【发布时间】:2019-11-22 12:31:03
【问题描述】:

我想在鼠标位置生成演员,但我需要在四舍五入到 0.5 x 和 y 坐标上生成它们。

我试过乘以 2、四舍五入和除以 2,但它似乎不起作用。

这是我的 BP 的截图。 BluePrint

我希望我的演员只在四舍五入到 0.5 的坐标上生成,但它们会在任何坐标上生成。

【问题讨论】:

  • 四舍五入后加0.5?
  • 您是否要在网格上生成您的演员?
  • 是的,我正在尝试在网格上生成它们,但它们不是已经在默认网格上生成了吗?
  • 当我说网格时,我的意思是一个固定的位置并将演员捕捉到这些位置或网格点。例如:将演员捕捉到最近的第 100 个网格点。这将是一个在点之间有 100 个单位的网格系统。
  • 是的,这正是我想要做的。我是在 Unity 中完成的,但我真的很难适应 Blue Prints 的工作方式。

标签: unreal-engine4 blueprint


【解决方案1】:

要将矢量捕捉到统一网格,您应该使用以下公式:

GridPoint = Floor(Point / GridSize) * GridSze;

GridSize 是标量,Point 是您的输入。 GridPoint 是你的输出。

使用蓝图和内置数学库函数非常容易。

基本上只需将您的位置向量除以首选网格大小(浮点数)并对其进行舍入/取整。然后乘以网格大小,您的位置将捕捉到最近的网格点。

UE4 蓝图示例:

UE4 C++

    // Define Grid Size
    float GridSize = 100.0f;

    // Get Actor Position
    FVector Position = GetActorLocation();

    // Calculate Grid Position
    FVector TmpPosition = FVector(Position / GridSize);
    FVector GridPoint = FVector(FMath::RoundHalfToZero(TmpPosition.X),FMath::RoundHalfToZero(TmpPosition.Y), FMath::RoundHalfToZero(TmpPosition.Z)) * GridSize;
    SetActorLocation(GridPoint);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2017-03-26
    • 2012-01-03
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多