x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

AddDynamic is permanent!

Hello guys,

I'm using UE 4.18. I find myself in this situation, in a constructor I have:

 CapsuleComponent->OnComponentBeginOverlap.AddDynamic(this, &ABaseCharacter::OnCoverVolumeBeginOverlap)

This is the ONLY place where the function OnCoverVolumeBeginOverlap is added to the delegate OnComponentBeginOverlap. It all works fine until I decided I don't need this binding. So what did I do? I removed this code from my constructor. Guess what? This thing doesn't go away. The function OnCoverVolumeBeginOverlap keeps getting called. I cleaned my solution, rebuild it several times, deleted the Binaries, Intermediate folders and it still persists. What is going on? This is driving me crazy. I'm absolutely sure this is the only place that this binding is happening. I tried calling OnComponentBeginOverlap.Clear(), still doesn't help. Anyone experienced such madness?

Best regards.

Product Version: UE 4.18
Tags:
more ▼

asked Jan 31 '18 at 01:33 PM in C++ Programming

avatar image

kbrizov
89 5 15 17

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

1 answer: sort voted first

Posting here for completion's sake:

I suspect what is happening is that a blueprint subclass of this class is causing the issue. Some UE4 delegates can be serialized (saved), and when you created the blueprint, the constructor created that delegate binding and serialized it to the saved blueprint asset.

If you change the constructor of a class in C++, there's no guarantee that those changes will propagate to existing blueprint assets you have created - so you will have to delete and re-create the blueprint from scratch. There isn't an easy solution to this problem in general, unfortunately.

In this particular case, you might be able to add a 'Clear' method to the constructor then open and re-save the blueprint asset.

Hope this helps!

more ▼

answered Jan 31 '18 at 02:15 PM

avatar image

TheJamsh
718 50 74 120

avatar image kbrizov Jan 31 '18 at 02:27 PM

Hello TheJamsh, I will give a try ASAP. That's a very good guess. Will let you know how it goes.

avatar image kbrizov Jan 31 '18 at 03:56 PM

For future readers, indeed the only way to fix it was to recreate the blueprint. I tried using OnComponentBeginOverlap.RemoveAll(), OnComponentBeginOverlap.RemoveDynamic(), OnComponentBeginOverlap.Clear() in the constructor in question and nothing helped.

(comments are locked)
10|2000 characters needed characters left
Viewable by all users
Your answer
toggle preview:

Up to 5 attachments (including images) can be used with a maximum of 5.2 MB each and 5.2 MB total.

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question