UdonTycoon is a new VRChat experience [search “Udon Tycoon” to play] that’s easily the most amazing game I’ve seen created on the platform. (And I’ve seen some amazing ones.) Basically a mash-up of Roller Coaster Tycoon but in VR and in a multi-user virtual world, it includes a user-controlled toolkit that enables players to create and save their own rollercoaster tracks and -- this part makes my head spin -- share them in the same space with other players at the same time.
“Yes, it's all fully networked,” lead creator Reimajo tells me. “[Players] can even preview the parts that other users intent to place with them.”
Reimajo and her collaborators have been building this in their free time for over a year, coding gameplay (as the name suggests) in UdonSharp, the user-made C#-to-Udon compiler popular with VRChat developers. But at first, she didn’t even intend to turn it into a full-fledged game: “[W]e just worked way too long on some things that we personally found cool because nobody else had done it before.”
That community tinkering aspect distinguishes UdonTycoon -- or for that, most every other great VRChat experience -- from professionally made VR games.
“A regular game studio couldn't justify the development time that we put into some ‘gimmicks,” as Reimajo puts it. “That's why most VR games today are still not very immersive and use laser pointer UI for example, or simple buttons that you can only click with your trigger button, but not physically press with your hands.”
Launched last week, it’s already attracted nearly 40,000 visits, which is a higher play rate than most studio produced VR titles. (As I write this, only some 1500 people are playing Beat Saber on Steam.)
“All of that is mostly just the product of hanging out in VR with my friends and I'm the person who codes all the time,” Reimajo adds.”I taught that to myself 2 years ago when Udon was pretty new, together with all the needed Unity skills. There was a lot of stuff that I was missing in VR (why are there no good non-plane flying games?) so I wanted to learn how to make it myself.”
More from Reimajo on creating UdonTycoon below:
2 minutes of RAW experience in #UdonTycoon pic.twitter.com/Y2Su2sWBly
— UdonTycoon (@UdonTycoon) October 26, 2021
Creating the Creator UX
Every random playtester that we invited showed us how terrible of a job we did explaining how things work, so we ended up refining instructions over and over again. We hate UI and menus in VR so we wanted a physical book instead. But it had to be as awesome as the other features that we spent way too much time one, like that rollercoaster transfer track system which took forever to create and is completely unnecessary, but extremely cool. And then you see a random streamer on twitch saying to his friend "wait, let the cart drive again, I want to show my viewers that transfer system" and you know there are people who will value that extra work.
I worked super long on the code to make the book page flipping in VR possible and enjoyable. It's more code than the hang glider has. The motivation was simply to create something unique that nobody has done in a VR game yet, despite being really unneeded. And some users freaked out when they found out you can just flip the book page with your fingers.
Creation UdonTycoon’s Physics
It's all UdonSharp code, similar to C#, but with less features. I also rarely use any Unity physics at all. I prefer to have full control in code over everything.
But coding physics is just painful. You see only the working version, but the glider caused so many issues over months and was just garbage most of the time or would end up causing weird feedback loops that would shoot the player into space. Working around VRChat's player controller (which you cannot directly control or access) and their station components is definitely a time killer. Station components are the only way to rotate a player and they are mostly intended for making simple chairs. Complex vehicles where the player is rotated 90 degree offset to their playspace are definitely not the intended usage for it. Every player has a custom avatar and you cannot expect even the most basic things, like that a player has a head bone for example. That's why coding those was costing many months of headache.
Doing this in Standard Unity and not VRChat would be really simple in comparison, especially because you don't need to work with limitations and performance issues caused by the VM where your code runs in. But then again, that would also be too simple. Making a rollercoaster builder in Unity has been done many times before, but nobody managed to do that in VRChat back then.
Enabling Users to Save Their Builds
Allowing people to save their builds was the easiest part. It was simply the result of designing the track builder the way it is, independent from the control panel and both master and client running the same code even while building. It was much harder to design it that way, but it paid of in the end. We also added some stupid features to it like multi-track capabilities that we didn't ended up using in the end, but they influenced the code architecture in a good way because it's universal now. The same code can build a rollercoaster, waterslide, train track - and tomorrow we can build a race track road with it. The pieces are also generated in code, we throw in a single 1m variant of the track piece and my Unity Editor script generated a whole catalog of pieces from it, including the setup for VRChat and the thumbnails for the building panel. This allowed us to quickly change small things on the track until the very end without doing it to a few hundred models, because there is only one model.
Allowing people to save their progress uses way too much encryption, obfuscation and other security related coding to make the world cheater proof, even for people with full Unity access. But that's just me. I cannot handle someone saying "I hacked the code". We have a funny sound that plays when people try it anyway.
Thanks to Adeon for the tip!
Update, November 2: Corrected Reimajo's pronouns by request.
Aw. SOME.
Posted by: Gwyneth Llewelyn | Monday, November 01, 2021 at 03:06 PM
All of the code is written in UdonSharp, which is comparable to C# but has fewer options. I also barely ever utilize the physics engine in Unity. In my ideal world, every aspect of my life would be codified and under my control.
However, it hurts to write code for physics. You only see the finished product, but the glider was a source of frustration for months due to its frequent failures and the bizarre feedback loops it created that occasionally sent players into space.
Posted by: kipas guys | Tuesday, January 17, 2023 at 08:55 PM