我不知道为什么地球上的太阳将万向节锁定在90 *。
在.h文件中
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="World Environment")
ADirectionalLight *SunLight;
.cpp中我将太阳移到的地方
float p = totalRealTimeSecondsPerGameDay / DeltaTime;
float r = 360 / p;
FRotator newRot;
newRot.Pitch = r;
newRot.Roll = 0.0f;
newRot.Yaw = 0.0f;
SunLight->AddActorLocalRotation(newRot);
它的工作原理非常好.....直到达到90 *或-90 *。
我很迷路。
编辑:为了弄清楚这是一个奇怪的错误,或者我只是想丢失一些东西,我尝试将我的C ++复制到蓝图中以精确地复制该过程,并且它也停在90和-90之间。
我什至尝试使用Quats,因为通过搜索,我发现了很多建议。
FQuat quatRot = FQuat(newRot);
SunLight->AddActorLocalRotation(quatRot, false, 0, ETeleportType::None);
答案 0 :(得分:0)
这是一个仅在使用相对旋转时发生的问题。
退后一步,我是否建议您使用绝对旋转而不是相对旋转?在当前的实现中,您将遭受累积的浮点舍入误差的困扰;您的太阳会“飘走”比赛时间。如果您改用绝对轮换方式,则可以保证您忠实于游戏时间,同时更正问题:
float gameDaysElapsed = GetWorld()->TimeSeconds / totalRealTimeSecondsPerGameDay;
float alpha;
FMath::Modf(gameDaysElapsed, alpha);
check(FMath::IsWithin(alpha, -SMALL_NUMBER, 1.f + SMALL_NUMBER));
FRotator rot(alpha * 360.f, 0.f, 0.f);
SunLight->SetActorRotation(rot);
作为脚注,这还允许您应用时间函数,以改变太阳将来的行为方式,而不是线性的。因此,使它像“弹出”这样的动作并在快速弹出之前缓慢穿过天空中心会更容易。