Destructible mesh loses collision and physics after packaging in 4.18.2

I have a helmet mesh in my game that is rigged as a destructible mesh so it can explode in a bloody mess. This has always worked fine. After upgrading to 4.18.2, however, the destructible mesh gets no physics or collisions in the packaged build! It works fine in-editor. You can see what I’m talking about in this video: Destructible Bug - YouTube

As you can see, other destructible meshes are working as expected. It seems to only be the space soldier helmet that has this issue… which of course is the only one I actually need.

This question seems to detail the same issue. Thinking it might be a case of migrated files breaking, I deleted all the old files used for the space helmet, re imported the mesh, recreated the destructible mesh, stuck the destructible mesh back in my custom blueprint, and repackaged… same results.

Why in the world would some destructibles work fine and others break?

1 Like

Hi SlimeQ,

I was unable to reproduce this in a fresh project that I created. Is there any chance that you can provide a sample project that just contains the assets causing issues when packaged.

Also have you tried creating a brand new project in 4.18 and adding in the assets. I would be curious if this was only happening when upgrading a project.

Thank you.

Yes I am still experiencing this issue, I’ve only had 1 workday in which to reproduce it

I’m not sure I can provide a sample project with the asset as it’s derived from a marketplace asset. I can almost guarantee this is caused by upgrading the project but it is NOT caused by the actual asset being upgraded.

The asset does have a two sided material, I suppose this could be a factor.

I’m doing it now. One weird thing I’ve noticed is that the “Create Destructible Mesh” option is missing from the context menu:

In my normal (upgraded) project, it’s right here:

Did something change in 4.18 with regards to destructible mesh creation?

EDIT: Nevermind, just had to enable the ApexDestructible plugin

Yes something did change in 4.18. First it was changed to now be a plugin that is not enabled by default. So you will have to navigate to your plugins and search for “Apex Destruction” and enable that. Once it is enabled when you right click on a mesh you will have the option to create a Destructible Mesh. I have added a screenshot for clarity.

Okay, just confirmed the asset works fine in a clean 4.18 C++ FPS template. Now to try an upgraded project

  1. Created FPS Template 4.17
  2. Upgraded to 4.18
  3. Added mesh
  4. Created destructible mesh
  5. Added apply radial damage on Enter key to character
  6. Packaged
  7. Tested

works just fine, unfortunately

Did that, see above comments

I am marking this as answered for now due to not being able to reproduce the issue and a lack of response. If you are still experiencing this issue and would like to reopen please feel free to comment.

If that is the case have you attempted to create a fresh 4.18 project and import the asset?

Edit: Marking this as answered now that it is working fine when packaged from the new project.

Just an update. The issue seems to have something to do with the reference to my custom actor class. I have a C++ class which extends ADestructibleActor that I spawn on character death. There is one particular instance that I use for all characters which seems to be causing the issue. ANY destructible mesh that I set on that actor breaks, and ALL instances of that destructible mesh (meaning ones not associated with the actor at all) exhibit the behavior I showed before in the packaged app.

Figuring this would be an easy fix, I made a new actor and used the “Replace References” function to replace references to the old one with the new one. This actually just made the problem much worse. Now the destructible mesh is STILL broken, presumably because it was set in the destructible actor I deleted and now, since it’s deleted, I can’t clear the variable to reset things.

Another update.

I managed to recreate the actor in a way where it actually works in my packaged build when placed on a map. HOWEVER, I still get the error behavior when the actor is spawned into the scene at runtime. I think it’s safe to conclude that this has something to do with whatever code in UDestructibleActor that has changed in 4.18, perhaps the constructor or something

Yet another update.

I think I’ve got it. I found that in the code for my destructible actor class that I was using GENERATED_BODY() instead of GENERATED_UCLASS_BODY(). Why? My guess is that I pulled that from the old DestructibleActor code. So I switched that over, added an empty constructor (wouldn’t compile without it), made all existing properties public (which is not the default when using GENERATED_UCLASS_BODY) and created a new blueprint with the class and now everything seems to be working correctly in the packaged build.

EDIT: Spoke too soon; the error was back in the next package. On the right track though.

It gets weirder. The actor (and all destructible meshes of the instance used in the actor) stops working as soon as it’s referenced by one of my characters. If none of those characters reference the actor, the destructible actor works fine again. I know at least 2/3 characters were migrated, though I’m not sure about the 3rd. More research needed

Another update.

I ran a test where I basically just made a default blueprint of my bot class and it was the only actor referencing the destructible actor. This worked.

So, I made a new blueprint for my player character, migrated over all the important values, removed all destructible actor references from the old characters, packaged, and tested. In this configuration, the destructible mesh was once again BROKEN. Removed references from both characters, and the mesh was fixed. Tried 2 builds with only 1 of the 2 characters having the reference and it was broken again.

Hello Jeff A,

I have not heard from you in well over 10 days so I must assume you aren’t reading, but I have managed to recreate this bug in a fresh project. Here are the steps to reproduce:

  1. Start with C++ FPS template

  2. Create a C++ class which extends ADestructibleActor

  3. Create a DestructibleMesh from some static mesh (I used a sphere)

  4. Create a Blueprint based on that C++ class and assign your DestructibleMesh

  5. Create some actor (in blueprints) which you can trigger to spawn the Blueprinted mesh actor. I just used a sphere and on overlap with a player I spawn an actor by class.

  6. In the C++ code for your character, add a UPROPERTY like so:

    UPROPERTY(Category = Destructible, EditAnywhere)
    TSubclassOf DestructibleActorRef;

  7. Compile

  8. In your character blueprint, set DestructibleActorRef to your blueprinted mesh actor.

  9. Package

  10. Test

For whatever reason, this sequence of events breaks ALL instances of the blueprint. Your blueprinted mesh actor will spawn but will not have any collision or physics enabled.

For reference I have created a project with the bug present, you can download it here: DestructibleTest.zip - Google Drive

Pressing enter will trigger radial damage, so to test the destructible mesh behavior you just have to walk into the blue sphere to spawn a destructible sphere and then stand near it and press enter to destroy it. This will work fine in editor, but will break in a packaged build. If you clear the value for DestructibleActorRef in the character blueprint and package, destruction will work fine.

Hello,

I apologize for missing your responses.

With your latest comment I was able to reproduce the issue in a clean 4.18 project. Also following the new steps you provided I was able to have this happen in a 4.17 project as well and was just curious if you had the same results as well. Thank you again for the clean and concise reproduction steps and I apologize for taking so long to get back to you.

Thank you very much.

It’s very odd to me that you were able to reproduce in 4.17… It was definitely working in my project before I upgraded. I have not attempted the repro steps in 4.17 yet, but this would seemingly indicate that something else is going on.

Spent a few hours searching for a workaround. Found, interestingly enough, that simply adding a blueprint event to the character that spawns the actor by class also breaks the mesh. Why doesn’t this happen when a generic actor bp spawns the actor? Does it have something to do with the character class itself?

Hello, I have created a ticket for this issue. you can follow it here at: 54133