Inter-blueprint communication can be difficult to get your head around if you don’t have a programming background, and because there are many ways of doing it. Also the way it works between blueprints that are “in the world” as instantiated objects versus blueprints that are not immediately in the world is different. I’d suggest you go through the online documentation around communication options here: https://docs.unrealengine.com/latest/INT/Engine/Blueprints/UserGuide/BlueprintComms/index.html
The most flexible way to communicate between blueprints is via blueprint interfaces, and through broadcast events, as this communication is dynamic, but to get the job done you just need to make sure you have a populated reference to the blueprint you require:
-
For communication between blueprints already placed in your world, create a local variable in one blueprint of the same type as the one you want to talk to, and assign it in the editor details tab after compiling. That’s direct. For communication from level blueprint to blueprint, you can just drag a reference from your world outliner and drop it directly into your blueprint and then reference (get or set) it’s properties.
-
For communication with a blueprint not already in your world (but is created at runtime, e.g. spawning objects) you can loop through all objects of the class looking for the one you want, cast to it if it has a child class, and set it’s properties directly.
-
for communication with certain predefined types of blueprints that you can access via things like GetPlayerCharacter or GetPlayerController, just create a local blueprint variable of the right type, and set it on the Event Begin Play of the character (or whatever blueprint you require them) and you can reference them via the variable within the blueprint.
For the example above, I use 3) when my character begins, I create a reference to the AnimationBlueprint and store it in a local variable AnimBP which I can access at any time later.
Good luck.
In answer to your other question, if you want to trigger overlap events with anything in your world, I think you need to do it in the level blueprint… since the thing you are overlapping belongs to the level. Different story if you have two objects colliding, you can trap overlap events within the object blueprint. You could also assign your trigger volume along with the object into a new blueprint, and do the overlap event within the new blueprint.
Either way, you get a unique overlap event triggered for each volume so you can set them separately, i.e. one for the ocean, another one for a pool, another one for a lake, etc. I wouldn’t attach it to the character, as you will then be triggering an overlap event every time you’re characters collides with anything at all and having to check what it is first, and then on the odd occasion it’s water, spawn the splash and fire the splash sound. A wasteful approach. In the example above, all I do on the event is set a variable. That variable is checked in the character animation blueprint at the same place I check for footstep impact sounds, and the spawn actually happens in the Anim BP.