我是编辑滚动球的例子地图从虚幻(在虚幻引擎)。我把它改了,所以我的球长了,融化了(这是个雪球),变大了,质量也变了。
我的问题是控制它。示例地图通过增加扭矩来移动球。我的问题是,我的质量变化很多,所以我需要一个扭矩
我的问题是,我的球似乎积累扭矩和旋转很多(我增加了很多摩擦球,它没有帮助,它只是移动了问题一点)。举个例子,如果我按左边一段时间,它就会向左转。如果我按右边,它就会向右转。但是当我停止向右按压时,它又旋转又向左转。
这是我目前的代码:
void ASnowballBall::MoveRight(float Val)
{
const FVector Torque = FVector(-1.f * getNewTorque(Val), 0.f, 0.f);
Ball->AddTorque(SpringArm->GetComponentRotation().RotateVector(Torque));
}
void ASnowballBall::MoveForward(float Val)
{
const FVector Torque = FVector(0.f, getNewTorque(Val), 0.f);
Ball->AddTorque(SpringArm->GetComponentRotation().RotateVector(Torque));
}
float ASnowballBall::getNewTorque(float Val)
{
return (Val * RollTorque * (log2(Ball->GetMass()))) / 10000;
}注:原木是一个测试,以缓慢增加扭矩与质量。它一点也不好使。现在我正在使用return Val * RollTorque,但它几乎同样糟糕。
控制是可怕的,我想知道如何修复它。如果移除扭矩会更好,我会改变它。我只是想要一个反应灵敏的控制,这是有趣的,在那里,球员仍然有一个大小的感觉(大比小慢)。
PS:我原来的体重大约是500公斤,最多可以达到20000公斤(这是一个益智游戏)。我没有设定最初的质量,它是由不真实的相对于它的大小设定的。不过,我可以改变大规模的规模。
发布于 2022-04-05 15:27:09
您可以尝试使用AddForce而不是AddTorque。所以球的速度会被修改成这样:
void APlayerBallBearing::Tick(float deltaSeconds)
{
Super::Tick(deltaSeconds);
BallMesh->AddForce(FVector(InputLongitude, InputLatitude, 0.0f) * ControllerForce * BallMesh->GetMass());
}InputLongitude和InputLatitude是用户在当前框架中按基本方向运动的值,它们对应于您的MoveForward和MoveRight值。
控制器力是你需要调整的东西,以便为你的球运动找到正确的值。我的价值至少为600.0f,我开始有“体面”的行为。
我无法帮助你们的质量,尽管你们需要自己去尝试,我使用的球网的默认质量是110。
https://stackoverflow.com/questions/42420938
复制相似问题