UI things which drive me up the wall

I’ll add to the list as I remember/encounter them, but these two cause me some major R&R (Rage and RSI) today:

  • StringTables can’t be updated by right-clicking and selecting re-import, like almost every other asset can (including DataTables). You need to open the asset, and click the “import CSV” button. If there’s any formatting error in the CSV, you will not get any error message (or even anything logged what I can see).
  • You can’t implement an interface function as a function… unless it has an output return value. You need to add a value you don’t want, implement the function, and then go back and remove it. Otherwise it always becomes an event (yes, I already reported and had this confirmed, but I still don’t see the fix in 4.27).

You can implement the function as an event, then right click it, and select “Convert event to function”.

So people keep saying, but have you actually tried it? Any time I do (from 4.24 up to just now in 4.27) I get the following:


I’m specifically talking about Blueprint Interface functions here, btw. Regular events I know don’t have this issue.

There’s a big reason for this, and changing it will actually break it.

Functions can return values, but events cannot (because latent events will have latent outputs). A function that returns a value can only be implemented as a function, whereas a function that returns no value can be implemented as either a function or an event. Because the implementation will be different for each class, an interface function that returns no values can only be treated as an event.

Again, you are missing the point. Please create an interface function without a return value and attempt to implement it as a function in blueprints. You will get the error message I pictured above. There is no reason that shouldn’t work.

Yes, this is intended behavior:

There is a reason; reread my post.

But you are contradicting yourself in your own post, and you can implement an interface function as a function with no return value using the cumbersome workaround in my original post (which is why it is a UI issue in the first place).

Yeah, I tested your workaround and it works, so your request seems possible.

What I was pointing out with my explanation is that a piece of code that doesn’t return a value can be done with either a function or event because neither will return a value. That gives a class two choices of implementation: either a function or an event. Some classes may choose function, some may choose event. An event has the advantage of allowing latent nodes and delegates. The advantage that events have over functions in this case is why it is converted to an event. I’m sure there are other reasons, too. Once again, this is clearly intended.

If your concern is that you don’t want it in your main event graph, just put it in its own graph, then it becomes no different than a function.

1 Like

Yup, I know all that, I’m just pointing out the UI inconsistencies. :slight_smile:

1 Like

Hmm you are right, it does not work. I must have misremembered.


I wonder why, though…

Do you notice how there is no “interface event”, only an “interface function”? It seems they combined them because they both return no value and chose to use an event because events can do what functions can’t (i.e. you can implement a function as an event, but not an event as a function).

I just tested this on 4.20. It doesn’t have a reimport button (which would be nice to have), but the “Import From CSV” button does update values for me, so it may be a bug in your version.

Yeah, I updated that bullet point. That particular issue was down to a formatting error in the CSV, but I checked both the Message Logs and Output Logs and there is nothing in there indicating that there was any problem (perhaps there’s a third place to check for these kinds of things?)…