I’m having trouble getting my head around what seems to be two parallel but not crossing paths in Blueprint. Execution nodes and non-execution nodes.
Execution nodes seem to control all flow and logic, and are what kicks things off, but all the utilities and useful functions I am given to do things don’t connect to execution nodes, so how do I actually do anything useful in that flow?
For example. I am trying to read the value of a string, branch based on logic (execution), and then make a new string literal based on that logic. However there is no way that I can find to go from the logic node to the make literal node.
Obviously I’m missing something fundamental here, I just don’t know what it is.
Funcs, that don’t have execution are info nodes. They do not do anything, but operate with information(+, -, convert information, etc). So, if you need to print a string, or do something, that uses string information, u need to execute the right function with these information connected to this func.
“There are tons of nodes with no execution pin that do tons of useful things”
Functions, that has exec, do something in a game(set variable, move object, rotate somthing, prints something on the screen, etc). Functions, that don’t have exec operate with information(convert information, do math, etc.). I can’t explain well because of my English, sorry
Lets see an example…
You must buy some apples in a store, right? You tell urself “Lets buy apples” and then you must understand, how much apples you need to buy. You get the apple count u need, how much u have, N - H = Buy. So “-” function will be without any execs. Like this:
So in this case, Buy Apples is what you DO, and the rest is info for this Doing.
Basically “Execution” nodes are responsible for all kinds of interaction between components. Like setting a value or calling an event (which is pretty much all they will ever do… those two things) while the other nodes are responsible for all kind of variable manipulation and little tools which won’t do anything by themselfs. I mean just calculating 1+1 won’t do anything unless you write it down. Or shout out the result so everyone can work with that answer. That’s the main difference between them.
If you want to create a new string depending on which int the variable is you can do it like in your picture. But it’s not actually a variable in the common sense. It’s a temporary variable in the compiled code but you can’t access it like that. You will have to set it to some variable you created or set something to that variable (for example a UMG text). Those will have an execution pin.
Thank you both I think I see what you mean. My background is actually programming, so I think that is confusing me. To me, things like Substr are executable pieces of code, so I see them as doing something. It seems here I need to re-arrange my thinking a bit, but I think I got it. At least I managed to make my thing work lol.
I think you only need to imagine that the nodes with exec points are like the first, left most, part of a command in a conventional programming language and the other nodes are what you build the arguments with.
If x > y then…
If is the node with the exec pin and the then is the out exec pin, x >y returns a bool which let’s the if node trigger the out exec pin. The non exec nodes evaluate all the bools in this case whenever they’re called.
to me the basic idea is this:
utility nodes could require execution or not, but most of the time, you don’t need one.
The distinction of whether or not a execution line is required or not based on this following 3 simple things.
is the flow gonna change or stop?
do you query something from outside source?(read: getting something with function that runs on a scope outside of your class instance.)
do you change anything? either to a different object or variables?
I’d say above 3 covers almost all exection nodes, and if there are exceptions, it’s gonna be pretty rare.