As an avid player of VRC with almost 4,000 hours now, and a creator of both avatars and worlds, this update has been something I’ve been pretty excited for from all the hype the staff and their circlejerk have been trying to create over it. Not only did the game get a huge update with a far newer version of Unity (though still old) and other things that theoretically would make the game run better, leak less memory, and so on – they also added a new coding language hand built by them into world creation. As a quick note on the other parts of the update – the game runs the same at best (including all the leaking memory) and at its worst (often) has far more issues now. Bravo! But let’s try and focus on Udon.
Udon is basically a new node coding system made by the VRC developers for VRChat specifically. The concept is a typical anything-involving-nodes thing where you have a box that does a thing and you connect it to another box that does another thing – a whole system of inputs and outputs going to other inputs and outputs. Sounds simple and for all intents and purposes should be pretty easy to figure out – that’s the point of designing it that way instead of just being a mass amount of weird text and parenthesis like coding usually is. This has paved the way for loads of fantastic ideas (though, I’ve only seen examples on twitter, oddly enough no worlds are really implementing anything worthwhile still with this new system) ranging from a device that lets you communicate via morse-code (it turns your clicks on a thing into the corresponding letters correctly so other players can see), working and not unplayable Tetris, worlds like one depicting the famous scenes from Inception, etc.
Really it is a wonderful addition and opens up creativity to a new huge level where over time people may really create games within VRChat that aren’t just simple minigames – it’s an incredible thing for people and I respect that. The coding system even allows for essentially ‘saving’ your data by copy pasting a code you can get in a world – this is another thing I’ve only seen on Twitter in a test situation but they claim it can really work. This means there could be full on RPGs and such eventually within VRChat and with more complex game mechanics to them than previously available (though even before Udon there was some cool stuff like inventory systems and whatnot within certain worlds). There’s even a “dab detector” someone made that throws confetti and blows horns any time the game somehow detects the player dabbing basd on the nodes he set up and how he set them up for it to trigger from where a user’s arms are, the angles they’re at, and so on. Yes, really.
The problem is if you aren’t someone with a history or education or at least moderate interest in coding or programming. For anyone who knows their shit and can tell you what a Boolean is or what “Op Unary Negation” are off the top of their head, sure, this is an incredible addition to your toolset in world building. That’s great, have a blast, make cool shit.
If you aren’t that person, this is a nightmare. If it was just an optional thing for doing unique and creative stuff that’d be great too, however Udon has ended up with them removing all of the old trigger systems so this does not just ADD things it REMOVES a lot of basic and important stuff as well and that is what makes this sting so much. Even if you don’t want to deal with Udon you are forced to.
Say you want a mirror in your world – honestly a must for VRChat – how simple is that to achieve? You need to be able to toggle it on and off for lag reasons as always, and that is where the problem comes in. While designing the world itself is still identical to before (if not a bit better thanks to being able to use Unity 2018 now and more people becoming aware of ProBuilder which was available before but not used that often for some reason, even though it’s great) making that toggle is no longer the same.
Before, the process was this: Select the object you want to be the button to toggle the thing, add a trigger component (2 clicks), set it to local, set it to activate the game object on interaction with this trigger, and set that to toggle then just drag and drop the game object into the receiver. All that is as simple as it sounds, literally just dropdown menus or little checkboxes. It takes about 30 seconds to a minute and is pretty self explanatory. It looked like this – pulled directly from my Coronavirus Bunker world – and in fact this is actually “more complex” than the most basic as I set another game object action to turn off the other version of the mirror at the same time;
I actually learned how to make worlds entirely on my own with the exception of one 10 minute tutorial and a single guide on ProBuilder when (due to a bug, I eventually found out) it was not working properly and no help from anybody either – other than that I just guessed my self through it and it was self explanatory enough. In the above image you can see “show help” is clicked also, this is another thing Udon completely lacks. With the trigger system before and show help on you can see what it means a little in the image too “All are able to activate the trigger for themselves only” as the example there, this way you understand what you’re doing if you aren’t sure. There is NOTHING like that in Udon – absolutely no help structure whatsoever in Unity itself or even in related documentation.
Now, in Udon, to create the same thing the process is…uh…this?
And just for the sake of showing how ridiculous it is, here is another simple thing – a door that opens/closes. Now, that has always been an annoying task but not “difficult” it just needed an animator and a trigger. I’ll admit, the only time I used a working door I just used a mostly prefab asset…but that actually plays into my issue pretty directly which I’ll get to right after this image.
The biggest issue with Udon is that it lacks simple concepts that most node based systems have. Even, for example, the new versions of Blender have a similar system – EXCEPT in Blender the nodes are all basically prefabs, they’re sort of made for you. If you want an avatar’s clothing to be shiny you can add a node that does that to the prior node (or, you know, just put a shiny shader on later but that’s not the point). It’s sensible. In Udon you would need to add several nodes to several things all of which are not clear about what they do and so on.
If Udon had these nodes predone for basic tasks this would be dramatically more usable by the common person at least for basic tasks that are required for basically every single world in the game. For example a node that is simply pre-coded to be an on/off toggle, a node already done to make jumping available in a world just by dropping that node in. Things like that, but that isn’t how it works. Everything is broken down into bools and other assorted buzzwords made for professionals or people who spend their free time learning Python and C++. Why? There’s no reason to leave out something that basic that would just make it so the every-man can still make a world while the turbo-autists could still create insane crazy complex stuff at the same time. Even the fact I can copy from images what I see or, in some cases, copy paste the code itself if people post it, I still have no idea how to apply this to an object or make it toggle the right way and whatnot (let alone not learn from doing so). The answer to why is because this was developed by people who don’t understand who they’re developing for and who are also just not that great at development in the first place – the same problem VRC has always had.
The overall sweeping core problem with Udon is that it really is some real coding system but designed with a visual interface – but that doesn’t really help when none of it makes fucking sense to anyone without prior knowledge in similar fields. I followed along with the official tutorials by Tupper who STILL to this day cannot manage to record anything without the resolution being horribly low making it near-impossible to read a single thing on his screen and it really didn’t help. He does a terrible job at tutorializing anything and always has because he pretends everyone watching already know how to do what he’s doing (as I said, no idea who they’re developing for), thus nullifying the entire point of making the tutorial in the first place. Eventually, and perhaps already, there may be better help – but even then this is having to learn far more legitimate stuff than how things used to be.
I do like what this opens up to hobbyist programmers and whatnot, but at the same time by forcing this they have essentially blockaded the vast majority of those people who would be able to make worlds before from being able to. This is completely inaccessible to a common player, even one willing to try and learn, given there are no real tools to educate yourself with – and one of the best things about VRC was how you could make things simply so everyone could create, and if you WANTED to you could do far more complex things (both with avatars and with worlds this is true). Now, just to make a simple world with a toggleable mirror is a monumental task and requires a formal education in a made up coding system and hours-long discord discussions with strangers just to figure out how to do a simple task.
All they really needed to do with this to make it usable by anybody was simplify it. Why use these specific jargon terms in the interface? Why not call things what they are in a more normal way – not code it more simply but simply have the box that has INSTANTIATION say something less retarded so a person can go “oh, okay, I know what this does” without having to google fucking coder terminology? Why not include pre-done grids for common things? Why not simply add a basic help system where when you hover over something it’ll pop up a tooltip explaining in plain English what this thing does like they used to?
In anything else I would not feel this way; go ahead and better the capabilities for people who will spend the time learning and who are capable of learning that information even if it cuts some people out. Great, better content, wonderful. And, in general, I don’t believe it’s wrong to make something “inaccessible” to certain groups, let Dark Souls be as hard as it wants and don’t put an easy mode because the entire experience includes the difficulty. Here, however, VRChat is a social platform designed around user created content. None of the avatars or worlds created by the actual staff are really ever used aside first time players (and sometimes by me hanging out in the hub purely because I know first time players are there) before they figure out how to leave.
In a game built entirely around player creation why would you make creating such an impossible task for the vast majority of that player base?
The day after I wrote this they updated the SDK3 with a couple of prefab nodes for jumping and running – oddly not turning things on/off or other basics but at least they are starting to do what should have been done to begin with.
In 2022, are things much easier + improved for beginners (i.e. simple components like Doors and Mirror switching)
I’ll have to check it out again soon, I was planning on working on some new worlds anyway so maybe I’ll restart one with udon