我有一个球体(雪球)的棋子/演员。当我在雪上滚动时,它会增长(我会扩大它并增加质量)。
问题:我有一个奇怪的行为,我的球滚动,但有时"跳跃" (或反弹)。
原因似乎是球变得更大并且与地面重叠,导致大碰撞。
我试图用偏移量(Ball->SetAllPhysicsPosition(Ball->RelativeLocation + FVector(0, 0, newRadius-pastRadius);
来改变它的位置,但我仍然遇到同样的问题。(它"工作"具有大的硬编码偏移,但不是任何尺寸)。
您是否知道如何解决此问题?
这是我用来使球变得更大的代码。我加上扭矩来移动它。
void ASnowballBall::NotifyHit(...)
{
float resizeValue = 0.0f;
//If the snowball collides with snow, it grows
if (Other->GetName().StartsWith("Snow", ESearchCase::IgnoreCase) && Ball->BodyInstance.GetUnrealWorldVelocity().Size() > 50.0f)
{
// Max size based on mass
if (Ball->GetMass() < 10000.0f){
resizeValue = (20.0f / Ball->GetMass()));
resizeValue = FMath::Clamp(resizeValue, 0.0f, 0.003f);
Ball->SetRelativeScale3D(Ball->RelativeScale3D + resizeValue);
Ball->SetMassScale("None", Ball->BodyInstance.MassScale);
}
}
答案 0 :(得分:1)
不要改变比例,改变半径。然后,因为你知道新的半径,你可以直接从球心到地面进行直线追踪,并将球向上(或向下)移动线距和新半径之间的差值。
此外,如果物理对于游戏中的球很重要,请在actor属性中选中CCD,以便每帧更好地进行碰撞检测。然而,这可能会变得昂贵,因此请确保您多次描述您的游戏。