Dont fire ActorEndOverlap event if actor stop move

Hi everyone

The context :
I try to manage the distance of displaying some informations. I have a map with some actors and widget in this.In my pawn, i have a collision sphere, represent the max distance to display widget. On my actor in my map, i have a ActorBeginOverlap fired when the collision sphere of the pawn overlap this actor. This part work fine.

The Problem :
The problem is, when the pawn stop move (for stay near the actor) the event ActorEndOverlapis fired. So, the information (widget) disappears and when i move again, the BeginOverlap is fired again. What i want is, the widget dont disappers when the pawn dont move, and disappers only if collision sphere really EndOverlap.

I dont want perform some verification in tick (of actor, or pawn) for check distance (cause i can have many actor at same time).

What is the way to achieve that in easiest way with less ressources ?

Thank you very much.

Not entirely sure I get it, but I think the problem may be collision detection. To be entirely sure you want to set your sphere as being detected as a unique entity, for example a “vehicle” if you’re not using that collision channel. The best way is to create a new collision channel by going into project settings and adding a new collision type.

This is because the issue may be that several types of collisions are being detected. I had the same problem with my characters since they their mesh (pawn), their armor (world dynamic) etc firing the events. Once I set up a custom collision for my sphere and detected only that, everything worked fine.

This is what I use for any kind of end or begin overlap with an interactable sphere that activates text widgets, glow, enemy AI etc:

Thank you, for informations. That work. I have add new object type collision, I have set my collision sphere to OverlapAllDynamic, and on my actor, Custom collision, ignore all, except for my custom type collision, like in your screenshot and this work, but sometime it’s seem unstable.

I try some setting in collision but always unstable. Except the first time i have tried. Very weird.

Very tricky yeah, after some test, i have set my two actor (pawn and target) with same setting in collision, and ii’s work fine.

Collision system it’s very ambigus in fact. I need to take the time to study this in more depth.

So, thank you again for your help !

It may be that there are still other collisions being detected, for interaction spheres like this you want to ignore everything except the sphere. Make sure you set the same exact settings in both the actor that does the overlap (usually the player) and the actor receiving the overlap (object/ai/etc).

Overlap events are tricky. Especially if the other actor is moving. Be very careful how you set up your code and if necessary use some bools with branches, delay, do-once, etc.

So, it’s me again…
I have tried with many actor, and again the widget disappears. all actor have same setting, with only the detection of sphere collision overlaping. But, again, if i dont move, all disappears :frowning:

I dont know why sometime it’s work and sometime no…

Gimme a sec I’ll show you how mine work

I got this result too, but only if my pawn move. When my pawn stop moving, all widget disappears. I have this setting on both actor and pawn

268948-annotation-2019-02-18-235422.jpg

Well that sounds like it is colliding with something that causes it to fire so much that it’s constantly triggered. Here’s a little cheat for you:

268949-overlap.png

!n my actor blueprint

268981-annotation-2019-02-18-235825.jpg

Yeah it ensures only the player can trigger it.

Yep,i see your post only after i have sent mine

Well, you have other actor there so you can still use those branches.

What exactly are you overlapping? You generally want to do that by adding a collision sphere component to your actor and use that for overlap.

So, in my map, all other actors have collision set to none, and after check if actor == player pawn, dont resolv the problem :frowning:

Ok, here is what my collision detection actually looks like in the level:

So he has an outer sphere to just show his name, and another sphere to bring up the interact message.

The documentation say “EndOverlap is fired when actor stop move”, this is what i try to pass over

What are you using to detect the overlap?

Sorry for multiple post, i dont refresh the page all time, so, i can miss some reply.

I dont have collision sphere on my actor, but only on my pawn (maybe it’s wrong). So, the collision sphere in on my PAWN, and, in my actor, i have “ActorBeginOverlap” node to detect if actor is in Collision sphere.

Ok if I get you right you are saying that your enemy/ai or just the non-playable character has the collision sphere, whereas your playable character has the actorbeginoverlap event?

The overlap event should be on your non-playable character that the widget is attached to.