Currently my enemies are just disappearing. ShooterTutorial will be ported to Mobile some day and I want to be sure that my ragdols can be turned off as soon as possible. That’s why I will add nice dissolve effect. Which should be:
- Component based – can be attached to any Skel/Static mesh actor,
- Using Material Layers – this way I will get original material,
This Tutorial has been created using Unreal Engine 4.10
Make sure you are working on the same version of the engine.
Creating Dissolve Material Function
There’s a great tutorial about dissolve over here. You can read it before moving forward.
Create new Material Function named LayerDissolve and recreate this material:
It calculates opacity mask based on texture and dissolveammount scalar value. Next it’s adding emissive depending on EmissilveBlendSize value.
Make sure DissolveAmmount is set to 0 by default!
Adding Material Function
After creating material function it need to be added to every enemy that you want to see dissolve effect.
I will use Future Soldier as It have custom emissive. Open FutureSoldier material and add LayerDissolve:
Find MaterialFunctionCall node, and then select LayerDissolve in Details panel.
Next break out material attributes:
So we can get Emissive and Opacity Mask from it.
Make sure material blend mode is Masked. It need to have Opacity Mask attribute. Now just add Soldier custom emissive to dissolve emissive and do the same with opacity.
And that’s it. You have final material that can support dissolve. The same thing need to be done to every enemy material that you are using.
Preparing Dissolve Component
Now we can actually run the dissolve.
First create new Float Curve named DissolveCurve:
Here’s the curve:
You will mess with the values here later – when you will see dissolve effect running.
Now create new Actor Component blueprint named DissolveComponent, open it and add these variables:
|Var Name||Var Type||Description|
|DissolveMaterials||Material Instance Dynamic Array||This will store all materials that should be updated by dissolve.|
|isDoingDissolve||bool||Is updating dissolve.|
|CurrentDissolveAmmount||float||Holds current dissolve ammount.|
|Curve||Float Curve Reference||Should point to early created DissolveCurve.|
|AccumulatedTime||float||Holds accumulated time. It will be used to stop dissolve when it gets proper value.|
|DissolveColor||Linear Color||Should be Editable. This will be passed to Material to change the color.|
Now open your event graph and add new custom events.
It basically iterate all static meshes then getting all materials and change them to Dynamic Material which can use parameters. (our Dissolve function have parameters that we want to change) Normal materials can’t use parameters that’s why you need to create Dynamic Material.
This event is exactly the same as previous but it use Skeletal Mesh Components instead.
This basically change DissolveColor parameter on each dynamic material.
I’m using Begin Play to populate DissolveMaterials and change the color, as I want to do this only one time on loading.
This event basically resets everything so dissolve can be fired again.
Tick is updating DissolveAmmount on each material. It won’t be fired if isDoingDissolve is false.
It will enable dissolve.
Enabling / Disabling Dissolve
Now it’s time to use DissolveComponent and find a place to enable and disable dissolve.
I will use BP_BaseEnemy to enable / disable dissolve. Open BP_BaseEnemy and add DissolveComponent in Components View. Then find Die function and call DoDissilve on DissolveComponent:
It will start dissolve effect when enemy will die.
Now the best place to reset dissolve will be in Event Reset Enemy interface event.
Creating ShooterTutorial takes a lot of my free time.
If you want you can help me out! I will use your donation to buy better assets packs and you will be added to Credits /Backers page as well. Implementing game is taking time but writing about it is taking much more effort!