Announcement

Collapse
No announcement yet.

Lacking essential coding utilities in the Blueprint Editor.

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

    [BLUEPRINT] Lacking essential coding utilities in the Blueprint Editor.

    Hi. I know that Blueprints main purpose are to allow designers to iterate quickly. And that more complicated systems probably should be designed in c++.
    But is there a specific reason why you don't allow programmers to rapidly prototype with their full potential in blueprints as well before we move over to c++?
    There are some essential features that I'm really missing!

    1. Being able to freely choose wheater something is private/protected/public.
    Some things, like variables can ONLY be public or private. I might want to be able to access it within child classes, but NOT from other blueprints.

    2. Being able to freely choose accessability for Custom Events.
    Custom Events is required in order to use latent functions like the Delay node, which is saving SOOO much time.
    But it's rarely I want these events to be something other blueprints should fiddle with.

    3. You have a tickbox to enable abstract classes. Which is great. Where are the abstract methods that FORCE you to override them?

    4. I saw that with c++ you can add in PropertyAttributes that allow you to make a exposed variable hidden based on another variable state.
    Is this something you could introduce for Blueprints as well?

    5. I really wish BlueprintInterfaces could support EventDispatchers.
    This happens 8/10 times I wish to use interfaces, I find that I can't really, because I need the generic callback events.

    6. Some variable types like UWorld especially, should be exposed to blueprints.
    Using strings to load in levels is not really a solid method, as they are prone to spelling errors and they dont update if you change the names.
    How ever, nothing stops you from creating a Load Level Instance (by Object Reference) node and converting its UWorld Soft Object to a variable.
    This is super useful and most likely not supposed to be intended. But I think it should be!

    7. You can do the same (as mentioned in point 6) with Event nodes. Create a Bind to Event node and drag the Event pin to a function input, and voila.
    Generic callback method. Works amazingly for certain tasks. Like for example, a custom method I made called MakeConfimationWidget(AcceptCallback, DeclineCallback).
    Please look into exposing these in an elegant way also.

    If you have some comments on any of these I would love to hear your thought on the subjects.
    Last edited by Ledii; 06-26-2020, 10:51 AM.

    #2
    Originally posted by Ledii View Post
    2. Being able to freely choose accessability for Custom Events.
    Custom Events is required in order to use latent functions like the Delay node, which is saving SOOO much time.
    But it's rarely I want these events to be something other blueprints should fiddle with.
    Use Timers instead of relying on Delay nodes. Delay nodes are a quick hack, so it's no regret with using Timers instead of them
    Then you can set the access level to functions, it works since 4.25.

    Originally posted by Ledii View Post
    6. Some variable types like UWorld especially, should be exposed to blueprints.
    Using strings to load in levels is not really a solid method, as they are prone to spelling errors and they dont update if you change the names.
    How ever, nothing stops you from creating a Load Level Instance (by Object Reference) node and converting its UWorld Soft Object to a variable.
    This is super useful and most likely not supposed to be intended. But I think it should be!.
    Actually, it's a matter of adding a simple method like "Load Stream Level (by Object Reference)". Load Level Instance also has 2 versions, accepting string and accepting TSoftObjectPtr<UWorld>.
    Using Soft Object Ptr is all good and definitely intended, but IIRC it was added thanks to a pull request.

    It would be a trivial work to add proper StreamLevel methods, I could look into it. Now, can't promise if they would pull that in

    Comment


      #3
      I think you can do all the prototyping you want without having the specific restrictions of "checked access control" or whatever.
      Make everything public. Only hide it if it gets in the way in some property panel. if it's a bad idea to access something in another class, even though it's public, simply don't access it.
      If you really, truly, need all the power of the C++ type system to express your design, then you should take that as an indication that you really do need C++ :-)

      Comment


        #4
        #6 is simple to do. I have that done somewhere, don't remember the codes right now.
        | Savior | USQLite | FSM | Object Pool | Sound Occlusion | Property Transfer | Magic Nodes | MORE |

        Comment


          #5
          Originally posted by jwatte View Post
          I think you can do all the prototyping you want without having the specific restrictions of "checked access control" or whatever.
          Make everything public. Only hide it if it gets in the way in some property panel. if it's a bad idea to access something in another class, even though it's public, simply don't access it.
          If you really, truly, need all the power of the C++ type system to express your design, then you should take that as an indication that you really do need C++ :-)
          Thing is, some of the blueprints we will use for the final production as well. And I personally know well what I can and cannot tamper with.
          But lets say a college taps into my public variable (assuming it cant be private due to child class access) and sets it manually and the entire blueprint goes into a broken state because of it.
          Its not really great.

          Also, we have just recently started learning the engine. And we all have a fair understanding of c++.
          It just is much quicker to check if the data flow etc works in blueprints.
          And sometimes the budget just tells us that we simply cannot take the time to make it into c++ after all.
          Last edited by Ledii; 06-27-2020, 10:35 AM.

          Comment


            #6
            Originally posted by BrUnO XaVIeR View Post
            #6 is simple to do. I have that done somewhere, don't remember the codes right now.
            Think there might have been misunderstanding. I know how to do it.
            Its just that you cannot select the UWorld object from the dropdown of variable types where you select Int, Bool, etc.

            This is one of many useful types that are not exposed as a blueprint type.
            The only way to get a variable of these types is to convert a pin that happens to be of that type into a variable.

            Comment


              #7
              Yes I get it.
              But it's possible to create a "Open Level" node with a drop-down list of levels instead of typing a level name.
              ​​​​
              | Savior | USQLite | FSM | Object Pool | Sound Occlusion | Property Transfer | Magic Nodes | MORE |

              Comment


                #8
                Ledii

                5 & 7 sound interesting. Any chance you'd offer show-don't-tell anim-gif / short-youtube-clip examples?
                As regards 1,2,3,4 on a BP wish-list...? Sorry but they seem a bit too pedantic / puritanical to be honest.
                BP is better off being less structured and simple (its already far more strict than UDK / Kismet ever was).
                Most devs just want to build stuff fast... Not fight the editor / language / structure, its too much nannying!
                But ofc if you have a large / loosely coupled team then maybe this comes into play more and could help...
                Last edited by EntrpriseCustomr; 06-28-2020, 02:10 PM.

                Comment


                  #9
                  Ledii
                  Submitted a change with these 2 new methods (by Object Reference). Let's hope it will get accepted
                  If not, it's trivial to put this method into your own project's code or plugin... but this should definitely become part of the engine.

                  Click image for larger version  Name:	85954658-60891780-b979-11ea-8fcf-9b6cacf7cf2d.png Views:	0 Size:	65.2 KB ID:	1781915

                  https://github.com/EpicGames/UnrealEngine/pull/7119
                  Last edited by Moth Doctor; 06-28-2020, 02:04 PM.

                  Comment


                    #10
                    Originally posted by Ledii View Post
                    But lets say a college taps into my public variable (assuming it cant be private due to child class access) and sets it manually and the entire blueprint goes into a broken state because of it.
                    That sounds to me like a people problem, not a technology problem.
                    First, someone trying a variable without checking what it does.
                    Second, after trying it, not testing that it actually still works.

                    If you want to save someone the 20 seconds of finding the variable inside the blueprint before using it, then you can name such variables with some prefix, like "privMyVariable."
                    Crude, and very effective. Assuming you don't have problem people on the team. If you DO have problem people on the team, I'm afraid no technical solution is going to fix that for you.

                    Comment


                      #11
                      Originally posted by EntrpriseCustomr View Post
                      Ledii

                      5 & 7 sound interesting. Any chance you'd offer show-don't-tell anim-gif / short-youtube-clip examples?
                      I will see what I can do

                      Comment


                        #12
                        Originally posted by jwatte View Post

                        That sounds to me like a people problem, not a technology problem.
                        Well yes, that is exactly why private and protected modifiers exist in the first place right?
                        Fixing people's habits of coding is not easy. Preventing them from using the wrong stuff is. (or should be in this case)
                        Am I wrong?

                        Comment


                          #13
                          Originally posted by BrUnO XaVIeR View Post
                          Yes I get it.
                          But it's possible to create a "Open Level" node with a drop-down list of levels instead of typing a level name.
                          ​​​​
                          I see. You must have done some simular workaround as I have been doing then?
                          The variable type that allows for a dropdown of levels is called World (UWorld) as far as I know, that is the only one that allows that.
                          Click image for larger version

Name:	world.png
Views:	120
Size:	52.2 KB
ID:	1782009
                          I would really love for this variable type to be available here on this list. That is my wish / request.

                          Now, anyways... When you have a reference to it following the method I described earlier, you can then do this to grab the actual asset name out of it.
                          Click image for larger version

Name:	assetname.png
Views:	115
Size:	71.8 KB
ID:	1782010
                          And if you can use the methods that take the Soft Object as a input pin, that is ofc preffered.
                          But this is still a neat know how to convert a asset dropdown to asset name string. =)

                          Comment


                            #14
                            Originally posted by Moth Doctor View Post
                            Submitted a change with these 2 new methods (by Object Reference). Let's hope it will get accepted
                            If not, it's trivial to put this method into your own project's code or plugin... but this should definitely become part of the engine.
                            Yes absolutly, having consistent options is important
                            Might I suggest this for the "Open Level" node as well?

                            Comment


                              #15
                              Originally posted by Ledii View Post

                              I see. You must have done some simular workaround as I have been doing then?
                              Kind of;
                              In c++ I use soft ptr:
                              Code:
                              TSoftObjectPtr<UWorld>
                              Epic made them usable as UProperty.
                              | Savior | USQLite | FSM | Object Pool | Sound Occlusion | Property Transfer | Magic Nodes | MORE |

                              Comment

                              Working...
                              X