当我将角色编码为0度时,为什么我的角色以45度角产生?

时间:2017-12-15 19:17:37

标签: c++ math unreal-engine4

标题描述了我的问题,因为你可以看到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角度的方式只会返回正角度,我想先让它工作)

1 个答案:

答案 0 :(得分:0)

修正了它:

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;
}