Announcement

Collapse
No announcement yet.

Select nodes vs Branch nodes

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Select nodes vs Branch nodes

    Do you use Select nodes often? I like the idea, but the fact that they execute every input no matter what is scaring me off, especially when there are some more complex pure getter functions connected or when they're inside loops with many iterations... Then I usually change them to Branch nodes.

    Click image for larger version  Name:	SelectNodeExecution!.png Views:	1 Size:	95.7 KB ID:	1399938

    I wonder if it would be possible to improve the Select node so it won't execute every input. If so, maybe it would be a good idea to post a feature request for that. But I'm afraid that this is just the way the pure functions & function inputs work in Blueprints...

    #2
    I must admit i still have no idea what the select node does or why you would use it. Actually i thought you feed it an index as an int and it would return the selection you picked (Like if you have 3 select options "red, Blue, green" and you feed it zero as the index it would return "red"). Your example completely confused me i must admit.

    What i recently used quite often instead of Branch was "Switch on int". So in my game if the user selects one option from quite a lot of options i save it into an int reflecting the options and then switch on that int to execute the code for the option. A bit more elegant than a hundred of branches that check "Int equals 5", "int equals 6" and so on.
    My Patreon page (UE4 goodies!)

    Comment


      #3
      Yes, Select nodes can also use integer value, so then you can choose between many options, like your "red, blue, green" example. It can also operate on boolean value - so in this case, if boolean is TRUE, it will pick value from input A. If it's FALSE, then it will pick value from input B.

      Comment


        #4
        Hmmm, interestig, i did not know that. But for boolean i think it does not have any advantage over Branch if i understood it correctly. I think most of it's use would be to translate an integer (index) to a value.If i have to construct a usage example i might use one day then maybe to store a big number of greetings for a character according to his mood level. Like say 0 is the worst mood, being very angry and 10 is the best mood being very happy that function could select a greeting based on mood. Lets say mood is 0 it would return an angry greeting like "Ah you again, i was hoping you were dead". Mood 5 is neutral like "Ah hello there" and mood 10 like "oh my best friend! How pleasing to see you".

        To me that node (from what i know now) is a translator from an index (integer) to some other stored value(A string maybe). But yeah the node definitely lacks a good description and examples. I think in the UE4 flow control documentation it wasn't even mentioned.
        My Patreon page (UE4 goodies!)

        Comment


          #5
          Are you certain select executes every pin every time?
          https://www.casualdistractiongames.com

          Comment


            #6
            Originally posted by OptimisticMonkey View Post
            Are you certain select executes every pin every time?
            Bash me if I'm wrong but it should only return the item according to the index - or in the case of the above example either 2 or 4 according to the boolean value.

            My Patreon page (UE4 goodies!)

            Comment


              #7
              Fronzelneekburm Select node should be fine when we input some pre-calculated values. But sometimes we need to calculate different values dynamically, e.g. inside a loop, based on current iteration. Then calculations for every input option is executed, even if only one is actually used. That's why I have these concerns about the Select node.

              OptimisticMonkey In my little test case, the pure 'Function' function has a Print String node inside. It prints only once in the Branch node case, it prints twice in the Select node case. It's probably one of the easiest methods to check that.

              Comment


                #8
                This whole topic really goes back to this thread really. To add my 2c:

                Pure nodes are a PITA imho, except for calc's or building strings etc.
                You can't F9 debug them, so you have to use Print-Strings vs Watch.
                They execute everything in Select / AndOr logic too which isn't good.
                Its better to just use Branches and collapse to Macros if you need to.

                Conclusion:
                Debugging Pure nodes is pure hell, but Impure Branch nodes take up way too much Graph space!

                Edit:
                You can Disable Impure nodes too, which is key as Kismet had this!
                Last edited by ClavosTech; 12-14-2017, 08:46 PM.

                Comment


                  #9
                  Oh, so I see that I'm not the only one with these concerns... Short circuiting would be a good solution... Since we don't have it yet, then as you say, probably just using Branches is the way to go for now. Thanks for the info.

                  Comment


                    #10
                    I would also like this. SELECT often makes the graph much simpler, and can be useful in macros without execution input, so it is unfortunate if it does not true branching.

                    I just experienced this in a simple function for getting the parent actor's transform. If there is no parent, that branch will yield and error, which it seems cannot be guarded against by the select condition:

                    Comment


                      #11
                      True branching *should* be doable in select if they put the work in. In theory upon hitting a select mode, execute the selector before the options and only execute the selected option and it should be the same speed.

                      Comment


                        #12
                        Originally posted by Mattk50 View Post
                        True branching *should* be doable in select if they put the work in. In theory upon hitting a select mode, execute the selector before the options and only execute the selected option and it should be the same speed.
                        Aye, one would think it would be so simple. The actual practice is that it'd take the effort of about an entirely new feature to BP - such as this - to actually fix short circuiting. It'd be a great feature for sure, but do consider that what seems easy is actually very complex under the hood.
                        They broke the signatures so I removed mine thinking it'd be awhile. The signatures work again, but I haven't redone my signature yet.

                        Comment

                        Working...
                        X