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

问题描述 投票:0回答:1

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

c++ math unreal-engine4
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.