【问题标题】:Why is my character spawning at a 45 degree angle when I've coded it to be set to 0 degrees?当我将角色编码为 0 度时,为什么我的角色以 45 度角生成?
【发布时间】:2018-05-30 00:49:45
【问题描述】:

标题描述了我的问题,您可以看到here 我的角色以 45 度角生成。角色总是在 (0, 0) 处生成

我已经为动画创建了一些代码,这些代码使用角色的位置和所需的位置来计算角色应该处于的角度。这个角度是通过使用角色到其目的地的距离百分比来确定的(这些目的地只是 Y 值。X 每个刻度增加 1)。我已经做了一个方程来确定基于行进百分比的角度。等式:-(9/500)X^2 + (9/5)X。这是一条与点 (0, 0)、(50, 45) ← 45 度角和 (100, 0) 相交的抛物线。

我使用这个方程的代码如下:

float GetRotationDegrees(int Current, int Target, int LaneWidth) {
    int numerator = Current - LaneWidth;
    int denominator = Target - LaneWidth;
    float X;
    if (denominator == 0) X = 0;
    else X = abs(numerator / denominator * 100);
    return -(9/500)*pow(X,2)+(9/5)*X; // function: -(9/500)X^2 + (9/5)X.
}

LaneWidth 始终为 400,Current 是角色的当前 Y 坐标,Target 是目标 Y 坐标。在 Y = 0 时,等式应该是 -400 / -400 * 100 = 100。当你将 100 放入等式时,你会得到 0,然后使用这个值 0:

SetActorLocation(FVector(1, sin(angle * PI / 180), 0).Rotation());

我现在真的很困惑,因为每当我手动尝试它时它都不起作用。

这可能是我做的一些愚蠢的事情,我经常看东西并且数学不太好(我也是 C++ 新手,所以错误也可能存在)。如果有人可以帮助我,我将不胜感激!

(顺便说一句,我知道 GetRotationDegrees 决定 X 角度的方式只会返回正角度,我想先让它工作)

【问题讨论】:

  • 希望你不要把PI定义为3
  • 我没有 xD。我希望它会那么容易哈哈
  • 无论如何,您需要创建minimal reproducible example 并提供预期的结果以及如果您真的想获得帮助,您会得到什么
  • @Slava 你需要更多的 PI-lons。
  • @user4581301 我还需要什么?

标签: c++ math unreal-engine4


【解决方案1】:

用这个修复它:

float GetRotationDegrees(int Current, int Target, int LaneWidth) {
    if (Current == Target) return 0;
    int MovingFrom;
    if (Target != 0) MovingFrom = 0;
    else if (Target > Current) MovingFrom = -LaneWidth;
    else MovingFrom = LaneWidth;

    float Percentage = float(Current - MovingFrom) / float(Target - MovingFrom) * 100;
    if (Target < Current) Percentage = -Percentage;
    bool isNegative = Percentage < 0;
    if (isNegative) return -(-9 * pow(abs(Percentage), 2) / 500 + 9 * abs(Percentage) / 5);
    return -9 * pow(Percentage, 2) / 500 + 9 * Percentage / 5;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    相关资源
    最近更新 更多