Projectiles going through objects without overlapping, even with continuous collision detection on?

Has anyone experienced this? I’d like to let my projectile go through multiple objects, firing events as it passes through them. For my thinner objects, like walls, the overlap event triggers very infrequently. It’s not even a particularly thin wall. I’ve tried turning on CCD for the capsule, but it doesn’t seem to help. My blueprint is fairly simple: Imgur: The magic of the Internet

Look into physics substeps.

Thanks, I’ll test it out. Any idea why CCD isn’t working? I’m assuming turning on substepping for the entire project would have a much bigger performance impact than just figuring it out for this particular object.

Post pics of your:

  • Collision settings for the capsule, static mesh and one of the SM’s your projectile is passing through consistently.
  • Projectile Movement settings
  • Overlap event logic

it depends on projectile movement speed vs size of collision.

If you move a 10cm object at 10cm per frame you will always get a response. But what happens when you move a 10cm object at 100m per frame?

@Rev0verDrive

Collision settings for capsule of projectile:

Collision settings for the static mesh of the projectile:

Collision settings for static mesh of projectile it’s passing through randomly (again, I occasionally get overlap events, it’s just sporadic):

Projectile movement settings:

Overlap event logic:

Imgur: The magic of the Internet I have more complex stuff planned here, but I wanted to make sure this was working reliably first.

Is it potentially because my root object for my projectile is not the capsule or the mesh? I tried doing a test where I re-created a similar setup on a new object with no DefaultSceneRoot component, and it seems to be doing better, though I haven’t controlled for all of the variables.

My only problem with this is that I’m inheriting from a base actor class that I hoped to have provide some extra functionality, so it would be a pain if I had to create a new class and duplicate this functionality just to get the SceneRootComponent to go away.

I thought I had a good lead on this front, but it turned out to be a dud. I tried using OnBeginComponentOverlap with my capsule component directly, rather than OnActorBeginOverlap, thinking this might work, but it still seems to skip over the thin objects. I also tried turning on CCD and sub stepping, but neither worked. My best candidate seems to be the one I mentioned in #7, but I’d really like to find a better approach.

You didn’t read or understand my message at all.

What is the size of your projectile collision?

what is the size of the object you are wanting to collide against?

Will you be able to catch an overlap event with a traveling speed of 7000?

@dellis23 Here’s a post on how I set up basic projectiles. https://forums.unrealengine.com/deve…nt#post1792891

Projectile mesh should have no collision and does not generate overlap events. SM’s are only for visuals if needed.

**MostHost LA Does have a point about substepping. **

My projectiles don’t use overlap … always blocking hit. My projectiles speeds sit between 650 M/s and 930 M/s with no issues.

Re: size. I think I understand what you’re saying. I skipped over it because partially because I’m not sure how to measure the objects (they all seem to say “scale 1.0”), and partially because they’re quite large for projectiles and walls. I’d estimate the projectile is 15cm and the object I’m colliding against is 10cm. I’ve also tested at speed 3500 with the same problem. I’m mostly using default assets (the wall, for instance, is in the starter pack) and have kept them at sizes that tutorials have had no issues with.

Depends. If the wall is one side plane, collision failure at speed is common…

It’s the Wall_400x200 asset. It’s not a plane. It has a decent thickness. I estimated 10cm earlier, but I’m second guessing myself. It might be up to 30cm. I’m not sure how to get an exact measurement.

A decent start is to use the collision visualizer.
if you have tickness to the wall it will show you the collision.

the second thing is to enable sub stepping with default settings, since at a speed of 7,000 with a tickness of 10cm you shouldn’t be getting issues.

The third thing is to check the projectile. Maybe you just haven’t added a collision mesh to it.

Fourth thing, is to code an OnTick event to make the collision longer and scaled backwards (like a long tail) based on current velocity, so that collision is forced to happen.

Also, collision wise maybe on hit vs on Overlap could do the trick of the other 4 points still fail.

Oh and, yes. Reviewing things you have on BeginOverlap but the wall is set to block so an overlap event shouldn’t happen?

I concur, the wall …any actor/object he wants to interact with with overlap should be set to overlap.

So he needs to create an object type for projectiles and set each actor to overlap projectiles.

Projectile Movement does not use Physics, so enabling the CCD flag or setting project settings for physics substepping will not help you here at all. The Projectile Movement component has it’s own settings for substepping (which are setup by default already), and it already performs CCD in it’s own way because it moves the object kinematically, by performing raycast sweeps through the scene to the target location.

The root component of your projectile should be it’s collision component - NOT a scene component or a default scene root. This can be a mesh or a collision sphere/capsule etc.

Overlaps are only generated when the projectile moves inside an object and stays there at the end of it’s movement frame. For performance reasons, you don’t want to substep overlaps updates (though you could probably edit the movement components ‘Tick’ function and force it to do so).

In terms of Physics, CCD does not help with detecting overlaps anyway - it’s only designed to prevent objects passing through blocking hits. If the projectile moves quickly, it will pass through overlap responses without generating events. You will always get this whether with Physics or Kinematic movement.

Projectile Movement has an “OnStopped” event you should bind to to detect the surface it hits - you shouldn’t really be using overlap events which are much more expensive (if anything, physics events like overlap generation should be disabled on projectiles).

6 Likes

Interesting because it doesn’t match to how I have things running.
On a projectile object the capsule component as root is set to simulate physics.
This effectively works and has the projectile bouncing around with physics, with sub-step to help colliding along.

High speeds have the potential to fowl things up. So its necessary to increase the collision size based on speed, but thats all it takes for it to bounce around a expected.

The OP is using Projectile Movement Component, which is incompatible with Simulating Physics. You could use a true “physics” simulated projectile if you wanted to, but Projectile Movement Component is probably a better option 99% of the time.

I didn’t want to shut down the other suggestions, but this is indeed what ended up working for me. I can now crank my velocity up to 70k+ and have made my projectile orders of magnitude smaller, and it works just fine.