I’m having hard time with AddExplosionForce() as far as I can tell it has no effect or a negligent effect on the rigidbody.
My scenario is of a top-down 2.5D game, so all rigidbodies have their position Y constrained. In my particular scenario an object explodes and I’m spawning fragments, then I want the fragments to be pushed by the explosion of the original object that blew up.
So my code really is quite simple, a previous piece of code randomly created a few fragments around the object and the relevant piece of code is:
foreach (var fragment in fragments)
fragment.rigidbody.AddExplosionForce(BlastForce, transform.position, BlastRadius, 0, ForceMode.Impulse)
If I replace the above code with the following:
foreach (var fragment in fragments)
{
var posToFragmentVector = (fragment.transform.position - transform.position);
var distance = posToFragmentVector.magnitude;
var dir = posToFragmentVector.normalized;
if (distance < BlastRadius)
fragment.rigidbody.AddForce(dir * BlastForce * (1 - (distance / BlastRadius)), ForceMode.Impulse);
}
Essentially doing what AddExplosionForce() advertises, minus the torque, then things work as expected.
I should note that the trigger for this piece of code is from an Update() and not a FixedUpdate(), but since I’m using a single call with ForceMode.Impulse and since ApplyForce() works I don’t think that’s the problem.
Am I doing something glaringly stupid, or is there something wrong with AddExplosionForce() ?