Why do some interface calls get a letter and some a green dot?

Both of these are interface calls:

Why do they look different?

2 Likes

It’s because you’re selecting the wrong version of the call.

The one between you ( the current BP ) and another actor gets the envelope. Other variations ( including calling it on yourself ) get a yellow pin.

Type the name of your interface call into the lookup and notice there are several.

Nope, I already tested and added them both. They both look like that:

bild

Don’t pull from a pin and search, do the search without touching anything first…

In the left side, you are calling on a concrete class whereas on the other side, you’re calling on an interface.
Calling on the concrete class is slightly cheaper, for what it’s worth.
To get the interface dispatch, you need to assign the concrete class to an intermediate value of type interface, and then call on that interface value.

I’m not. It’s weird, in one blueprint, I get many more options when I search, and no letter symbol, but in another blueprint, I get very few options when I search and always a letter symbol:

I’m afraid I don’t understand this. Look at the two screenshots I posted above. They’re the same interface, but called from two different classes, which both implement it, yet the nodes I get look different.

Call it on an actor ( reference to actor ).

They’re both user widgets. There’s something else going on here…

You’re not showing the types of the variables, so there’s no way to verify whether what you’re saying is actually true.
My experience has been that calling methods on actors that are known to have that method will get blue dot, calling interface methods on actors not known to have the method, or on interface instances, will get yellow dot.

There is actually an issue where sometimes the correct version of an interface won’t be used in a BP for some reason. What you can do is create the correct node in a different BP, then copy and paste it into the BP that isn’t cooperating.

The default sky doesn’t implement this

image

:slight_smile:

Please tell me what additional information you need:

Woooow, that worked. Ok, so bug confirmed, I guess?

I’ve never had that…

1 Like

It’s a weird one, but I have seen it a few times with sibling BP’s (i.e. basically identical BP’s acting on the same nodes). The copy/paste workaround is easy enough that I haven’t really tried to find what the actual problem is. It’s most likely stale interface data in the BP that’s having issues, but who knows.

:exploding_head:

OK, that’s crazy! I guess I’ve been lucky and never run into this.

2 Likes

Oh, noooo… when I hit compile, the letters disappeared again and the yellow dot appears! :sob:

(Interestingly, they do not appear if I copy it the other way around to the class where they do show up and hit compile.)

It’s because the call is on itself, like I said… :wink:

Basically, if you use interfaces for what they’re designed for, which is anonymous signals, you will always get the blue ping.

The whole point of BPIs, is you’re are making a call from actor A to B, and A should know nothing about the internals of B.

1 Like

Except that I copied my “Select Option 2” interface call to the CRPGMenu class, which if you check in the screenshot above, does not implement that interface, so how can the call be on itself?

I want to use them as anonymous signals, but apparently, if Unreal detects that a class implements the actual interface, it doesn’t see it as anonymous anymore?

Are you making a call from class X to class X? Different actors of the same type?