2017-03-13 2 views
0

J'ai un pion/acteur qui est une sphère (une boule de neige). Quand je roule sur la neige, elle grandit (je la redimensionne et ajoute de la masse). Problème: J'ai un comportement bizarre, ma balle roule mais elle saute parfois (ou rebondit).Mise à l'échelle d'une sphère crée des collisions chevauchantes

La raison semble être que la balle devient plus grande et se chevauchent avec le sol, provoquant une grosse collision.

J'ai essayé de changer sa position avec un décalage (Ball->SetAllPhysicsPosition(Ball->RelativeLocation + FVector(0, 0, newRadius-pastRadius);, mais je dois toujours le même problème. (Il « travaille » avec un grand hardcoded offset, mais pas avec toute taille).

Auriez-vous un idée sur la façon de corriger ce comportement?

Voici le code que j'utilise pour rendre le ballon plus grand. ajouter un couple pour la déplacer.

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); 
     } 

    } 

Répondre

1

ne pas modifier l'échelle, changer le rayon Ensuite, parce que vous connaissez le nouveau rayon, vous pouvez faire une ligne trac e descend du centre de la balle vers le sol et déplace la balle vers le haut (ou vers le bas) en faisant la différence entre la distance de la ligne et le nouveau rayon.

Si la physique est importante pour la balle dans votre jeu, cochez CCD dans les propriétés de l'acteur pour permettre une meilleure détection de collision par image. Cependant, cela peut coûter cher, alors assurez-vous de profiler votre jeu plusieurs fois.