Best ways to communicate between BPs

Hi everyone,

I found three way to communicate between BPs:
Way 1. Custom Events
Way 2. Cast To
Way 3. BP as Variable in other BP

Im not sure when to use what and in my example two of them fail, because I guess Im not using them correctly.

What Im trying to achieve: I can set different materials in my actual Blueprint by getting the materials from another BP called “BP_Color_Menu” which has a variable “WhatColorWasSet” that contains the material.

Way 1: Not using Custom Events because I want to transfer a Material between BP.

Way 2: Dont know what the Object should be. I tried many different objects but I dont get it why an object is needed so I dont know what to choose.

Way 3: In this case I created a variable and choose my Blueprint “BP_Color_Menu” as the variable type. But then I get “Accessed None trying to read property …” Which from what I understand means my variable is empty/ has none information. But I set a color in my “BP_Color_Menu” BP and I can see that color on my screen during runtime so it cant be empty when I press the MointionController (L) Trigger.

Can someone help with my example and tell me what way would be the best. (If there are actually three ways ;))