How do I turn emissive on when another object is picked up?

Do you want the emissive on all of the statues to change when one is picked up, or do you want to affect just the statue being held?

Hi,

Unfortunately I’m an artist now trying to create levels for VR in UE4 and have no experience of scripting, so this is probably a very basic question, but I’m trying to learn as I go.

I have a scene with Hierarchical Instanced Static Meshes in it and the material on them has an emissive that I would like to turn on when the player picks up a certain object in the scene. (In other words, a bunch of statues holding bowls that have an emissive for the glowing embers. When the player picks up an object at their feet, this triggers the emissive to turn on in the bowls). Can anyone guide me on how to accomplish this? I have looked at tons of tutorials and read through documentation here, but I still can’t figure out how to implement it.

Any help would be greatly appreciated.

Thanks for your reply,

When the player picks up their own bowl off the floor, I would like the emissive on all of the statues to turn on. Hopefully a screenshot might help!!

ok,

  1. make two actor blueprints BP_PlayerBowl and BP_Statue

  2. In the construction script of BP_Statue create a dynamic material instance promote it to a variable and set the material of the statue to that.

  3. create a function called ChangeStatueEmmisive

  4. in the function get the dynamic material instance variable you made and find the node set scalar[vector] parameter value. the parameter name in the node must match the parameter name in the material. add a float[vector] input to the function and connect it to value on the set scalar[vector] parameter node.

Now the rest depends on how you are picking up the bowl. are you using an interface? so when the bowl is picked up and dropped some event in it fires off?

if so in the BP_PlayerBowl, you can just make a public variable of type bp_statue and call the function. (after you compile and assign the public variable in the editor.)

The dynamic material is a great idea, but you have to do it for each mesh if I’m not mistaken. You can use a parameter collection once to control it within the material you are using and just lerp based on a value in that - it will affect all meshes at once that use the material.

Thank you so much for the replies.

I’m about to have a go at this now. Hopefully my ‘non coding brain’ can wrap itself around it!!! I’ll let you know how I get on!

Thanks again.

Sorry to be dense, but which float do I use within the function?

Just promote the pin to a float variable.

To demonstrate what I referred to, look at Screenshots. Create a parameter collection, then in the material, add the collection node, select the variable to use (use a scalar, in my case called UseEmmissive). When you change it to a 0 or a 1, the lerps pull the color.

edit oops - pin from parameter to 1st lerp alpha is missing - need to connect that.