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