Everything you wrote is just as true for a well written text program, and untrue for badly written blueprint spaghetti!
Lua is great and I'm a huge proponent of it but different tools are meant for different use cases.
I say that as someone who's worked on both sides and shipped production Lua, Unreal script and C++ during that era. Visual scripting/programming tools are for your designers/artists/animators or as glue code between content that is under high iteration cycles. You can do things such as "find all references to this actor" or realtime visualization of states that just aren't as streamlined as text based languages.
The tradeoff is there's a level of complexity where text based languages are better at expressing abstractions and structure, you use them in different contexts and for different parts of a project.
I can understand why you might want to use it for shaders. (but not really)
And when it comes to placing volumes and marking up the scene I'll absolutely want visual gizmos.
I genuinely believe that if Epic had taken all the effort they put into blueprints, and put it into a text based programming environment, game designers would be more productive.
Sure, that's pretty clear :). If you want to re-read my post above I wasn't saying that would be as good at game rules and there's a very real limitation as soon as you get away from scripted encounters and into anything more complex.
At the same time consider there may be people, teams and designers who it does work for. Very few things are in absolute and there are places where I've seen tools like this used effectively.
The only reason I commented at all was because the OP listed a bunch of stuff that was good in blueprints, but I believe all those things are good in text too.
update: just watched Tim Tillosons twitch stream about it. I had not seen that before.
I think it'll be a massive game changer for unreal and am super excited for it.
The original claim was there are no alternative to blueprints, not scripting languages.
And, of course, c++ is an alternative. Maybe not the best, but an alternative to blueprints. In the Unreal documentation [1] we can find:
- Blueprints only
- C++ and Blueprints
- C++ Only
This is why I think it is common to mix and match them.
[1] https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScrip...
I haven't yet run across a lua integration that was actually reasonable to use. Every time it's a choice between "just hack in what I need to but there is no way to verify I've accounted for all the edge cases and it will be fragile as fuck" or "spend dozens of hours wrapping the exposed api in a safer and more usable OO or FP interface."
Oh also I hope you like implementing build systems virtually from scratch, and also dealing with every downside of C if you need anything more powerful than prototypical inheritance.
Six months of professional lua work has really, really drilled into me that a programming language isn't shit without its ecosystem, and it's meaningless to discuss one apart from it. I haven't used blueprints but it sounds a lot better than any lua system I've worked on.
The only really fun part is you'll often come across an undocumented function that someone obviously forgot to remove or didn't understand the implications of and you'll get DEEP system access through abusing it, or even just a straight root shell. No joke.
And I think it would be scary to have a team of programmers coming on and off a Lua project doing things all subtly differently, even rolling their own OO for example. You would have to be very disciplined as a team.
Where blueprint shines is strictly limited to animation rigging (what animation to play when a character is doing what or response to user control) and visual effects (what the result would be if i mix certain elements, apply lighting, shader etc).
Outside of these two areas that are meant for content production, you won't find many studios employing professional blueprint programmers because it is far too slow and difficult to debug.
To illustrate this create a blueprint for a simple C++ loop with a dozen switch statements with conditionals inside each, that is a lot of mouse clicks, movements and typing. When you write code, you don't need to worry about how to organize nodes that is readable, there is no hand eye coordination of where to place your conditional node that will branch easily to a dozen or more wired connection.
In addition, for performance boosts and debugging, you are almost guaranteed to always use C++ and it is NOT the most user friendly experience especially for those who are not exposed to C++.
I just want to warn anybody from taking oneoff786's comment at face value without really realizing the full cost of using UE for its blueprint, you will be sorely disappointed and this is backed by up by many who have shipped games before.
Unity has visual programming, it isn't the the selling point of Unreal, and that isn't why large studios are using Unreal for. If you are an indie developer or a hobbyist interested in shipping games, Unreal will greatly delay and lead to frustrations.
I'm just warning anybody in case they think that blueprints are all that is needed to wire up a game in UE, that is NOT the case, you might be able to pull it off with purchased assets without much focus on novelty, but you could easily achieve the same far faster with Unity.
Game development is hard but its especially hard when relying on UE4's blueprint. Even more so when you are stuck with waiting for someone to reply to your forum questions and told to rely on Intellisense to figure out which API method to use because the document is out of date.
In fact I recall being told to just compile the UE engine to learn the inner workings, if I was a professional C++ developer at a game studio sure, but I'm a hobbyist shipping games on Steam, its a no go. C# is far far more accessible as many decisions are made for you as well as there are far bigger community and tutorials around Unity3d.
If you have the money and experience to use Unreal, go right ahead, you can absolutely make amazing games, but I guarantee you will end up using C++ and its 3rd party productivity tools since what's offered out of the box really is going to take ages for a shippable game compared to whats possible with Unity.
Finally consider the financial incentive of Epic, they need money from established studios that has a history of shipping games to cut them a royalty check, you can't do that by investing in hobbyists and indie game developers who are unlikely to ship a game ever!
> To illustrate this create a blueprint for a simple C++ loop with a dozen switch statements with conditionals inside each, that is a lot of mouse clicks, movements and typing. When you write code, you don't need to worry about how to organize nodes that is readable, there is no hand eye coordination of where to place your conditional node that will branch easily to a dozen or more wired connection.
For each node -> Switch nodes -> switch nodes.
Collapse the switch nodes so that you have only one master switch statement. Easy. And way way cleaner than code imo. And less time to code as you don’t need to manually specify each switch if it’s something nice like an enum?
I agree this is a shitty way to manage complexity, but at the same time it's super intuitive for lots of people. Maybe find ways to apply it conservatively and guide the non-hardcore emacs users down a path that won't drive you mad.
|----||----||----()
X1 X3 Y1
The above program is a series of two "contacts" (like a switch), the "-||-" symbol, and the output "coil" which is meant to symbolize a relay coil. Simple bit logic: if X1 and X3 are true, Y1 is set true. There are many more symbols like comparisons symbols such as -|<|- which will allow you to compare register/variable values as well as timers and other function blocks.Fun fact I learned: Many (all?) rail signal and control blocks are written in ladder with ALL valid states of that rail block predefined in ladder. The logic is simple but the task is incredibly critical. Supposedly it is much easier to visually verify/test the program using ladder vs a written language.
Also: Blueprints reload instantly and are easy to debug.
Its a frequently overlooked feature. Itd be great to have more accessible outside the editor.
Despite being a grammar perfectionist myself, I know several people who don't even bother with simple apostrophes. Yet, these same people run congitive circles around me in many areas.
I wouldn't be so quick to judge. Tolerance is a good thing. The underlying content is ultimately what matters, especially on an international public forum like HN where you typically don't even know who you're talking to or what their context is.
You do realize that common mental conditions like ADHD cause people to commit these "syntax errors" in language all the time, right? What an ignorant, ableist, and frankly pathetic take this is.
Since you're throwing accusations at random people online, are you sure you aren't dyslexic or lazy?
By the way, spell checkers are a thing these days. Seriously, check it out. People you write to might appreciate the absolutely microscopic amount of effort it takes to check what you're typing.
Look, I care a great deal about proper spelling and grammar, and put a lot of effort into it, but errors can still happen (I've noticed I've been making more spelling errors in recent years than I used to, which worries me). Your comment just sounds needlessly dismissive of people with dyslexia. You could also put effort into proper spelling without trying to come off as a dick (which frankly is probably worse than bad spelling).
Thank you for proving my point in one sentence, comparing those with dyslexia and those who are lazy.
> By the way, spell checkers are a thing these days.
I use spell-checkers all the time. To be honest, I think spell checkers are one reason why people complain about this in the first place because offloading the cognitive load of spelling and grammar to software inevitably means that people stop thinking in those terms and eventually lose the ability to communicate perfectly without the assistance of software. And then when that software isn't available in every input on every application, mistakes get made.
I have major problems with third-party browser plugins that read all of your browser input in order to fix your grammatical errors, so I typically don't use them in the context of HN. Since I'm writing a comment into a browser text input and not a word processor, this isn't content that I'm trying to sell or polish. It's just to communicate simply and sometimes mistakes are made. Should we always send texts in complete sentences so that our recipient fully understands the depths of our command of the language? Plus, how many times have you seen a grammar checker get it wrong? I have many times. Spoiler alert: software isn't perfect.
I would understand the argument against grammatical ticks in a context where content is paid for or traded on a professional level. When I buy a book, I expect it to be tight and free of errors. But I'm not paying to be on here, I'm here to exchange ideas, and some of the most intelligent people I've come across in my career aren't necessarily the most eloquent, polished communicators.
* makes the engine api very discoverable, which is huge. It’s a step above intellisense and auto complete. The api is likely the reason it’s so dominate in games. It’s the bulk of game programming. Visual programming isn’t very good for coding new things from scratch.
* let’s you read code and clearly follow execution from start to finish.
* let’s you visually document concepts with collapsed nodes, and colored containers and what not. Good blueprints are literally written as long form pseudo code, with double clicks to see actual implementation.
* concepts like const functions are just conceptually clearer. Const functions have no execution pin. They (should) have no side effects. Just a calculation. The engine doesn’t enforce this I don’t think but it’s close…
What it explicitly does not do is allow you to code games without knowing how to code. Countless beginners just die on the first steps. You still need to understand object oriented design and basic coding concepts to do well.