Create a new version of VRCStation
hdorriker
VRCStation needs an alternative for many reasons. Here are some:
- Too many issues with the introduction of every new feature.
- Too many undocumented behaviors which seem to change from (client) update to update.
- Full of difficult-to-reproduce, obscure bugs that are much too time-consuming to debug for more casual creators.
- Excessively sensitive to implementation and usage factors to the point of total absurdity (Try putting an Udon behavior on the same object as a Station and writing to another Udon behavior's variable.)
- Changes behavior based on the number of people in a world.
(I've seen this several times and it breaks the game.)
- It doesn't even know which player is sitting in it.
- Solutions to some Station issues are already in the SDK but not implemented apparently such as the animator fix for full body tracking which exists in the Avatar SDK but is missing in the World SDK.
- In practice, UDON Solutions and workarounds to VRCStation issues can work less effectively over time, demanding constant maintenance and causing worlds to stop working entirely.
PROPOSAL:
Because numerous existing worlds currently make (hard fought) use of VRCStation's quirks for actual features, you can't simply get rid of it, as this would break a huge number of very cool worlds. Instead of re-engineering the existing VRCStation (nobody wants that!), Create a brand new VRCStation alternative and creators may choose between the two (an extremely worthwhile choice to present compared to the alternative of not fixing anything).
This new VRCStation2 should have the following:
- The Player must never be misplaced or "thrown" because of playspace origin or other factors separate from and totally irrelevant to the transform of their head. Players must always be positioned where they are expected to be at all costs even if it hits the frames a little to correct it (because the UDON acrobatics we have to do to make this happen without this assurance are going to hit frames harder anyway. Nothing is being saved by doing this quickly but incorrectly. I cannot stress enough how important this is.)
- The Station must have a public variable or method by which to get the VRCPlayerApi object of the player seated.
- The Station must be movable by any mechanism by which a GameObject can be moved (Animation, RigidBody, updating the value of the transform position/rotation), with no exceptions or conditions. Usage of this must be as simple as possible with no hidden/undocumented behaviors.
- The Station must not immobilize the arms of a player by default. In practice, players are expected to be able to interact with things with their arms when seated so it would never make sense for this to happen without the world dev explicitly specifying it.
- The Station must have a facility for player exit by calling a method on it/sending an event. This is imperative for ergonomics and feature-rich worlds.
- The Station must have the ability to NOT restrict FBT movement, as this is widely used by many players and there are entire forms of emergent gameplay and experiences which depend on this. There is currently a community workaround for this, don't break it.
- Stations should be able to sync their positions relative to their host GameObject.
If a player is adjusting their seat, their position should be synced because without it, players don't know where each others heads are and this interferes with social interaction. It is unreasonable to require a world dev to have to crack into Networking in order to sync the position of seats because Networking is among the most difficult parts of UDON and most world creators will just skip it if this syncing isn't included in the component (and you can't really blame them, some people just want to casually make a room with a couch or something and don't have time to learn Networking).
- Stations should orient the player to match the Up direction of the Station's local transform, and NOT the Up direction of the world. The current implementation which orients to world's up creates a huge amount of nauseating misalignments where players end up sideways in a seat because it's on a vehicle, if the vehicle isn't completely flat, and in-practice it is absurd to ask players to only enter a vehicle when it's on flat ground.
This might be a lot of things, and in general with some exceptions, it matches the functionality of VRCStation, but the key is that the new one needs to prioritize expected behaviors and cannot have the entropic "decay" in reliability exhibited by the current one.
I have spent many hours trying to drag VRCStation into doing exactly what it's supposed to do, entirely because I needed to get events from it or any myriad of other various ways it can find a reason not to work right. This component's vagaries have even evaded the skills of friends that are far better at this kind of thing than I am. This component is a disaster and it's only getting worse with time.
Surely, I can't be the only one who is at the end of their patience and resources in dealing with VRCStation. So please, for the sake of future world development and the health of the platform, please consider creating an alternative to the existing VRCStation component.
Thank you.
Log In
★ Klonoa ★
I wonder if something like this could be used to address the issue of desktop users having their heads being shifted around in a station when far from world origin (like flight worlds and really large driving worlds where floating point jitter is noticeable.)
hdorriker
★ Klonoa ★ I suspect it could be related, although built-in floating origin could also solve this issue, but I highly doubt VRChat will ever implement that even though it’s dramatically easier for them to do it network-efficiently than it is for players to cobble it together in Udon.
★ Klonoa ★
I admit I dont know much on it, it's just I notice it happens when things jitter. Was something that only started happening recently ish. Probably a symptom of the stations being broken over the years
hdorriker
I want to update the proposed solution since it’s been 2 years:
The follow-up to Stations (“VRCStation 2”) should consist of two separate components which must be FULLY INDEPENDENT:
- A component that attaches a player to an object’s position and rotation.
- A separate component that tells the player’s avatar to sit (or whatever else specified)
These two parts should have as little to do with eachother as possible. This will allow us to set up stronger ergonomics that cannot be trashed by hacky avatar systems, better games that are harder to cheat or break, and all without breaking the existing Stations used in worlds.
BluWizard
Look, we got PhysBones 1.0 & 1.1, and VRCPickup 1.0 & 1.1.
I see NO REASON why they SHOULDN'T add VRCStation 1.1 (or 2.0 in this case).
Dalken Starbyne
I've next to no experience with stations on the back-end. So I can't really attest to the difficulty of their implementation firsthand. But I can say that they are currently the most common way for me to encounter jank in VRChat on a regular basis, and in all kinds of different ways. It has brought games and activities to a complete halt on several occasions, even when everyone was willing to try again multiple times. So take that as you will, but it does seem like something that needs some serious attention.
existentialbean
Very much need this. The amount of personal testing I've done just figure out what seats are doing is exhausting. The one where if the chair isn't perfectly upright was particularly annoying to figure out as it wasn't documented anywhere.
I've been able to do workarounds with the animator and setup certain things using rotation and world constraints to get something predictable. But dang it, I wish I didn't have to.
I use seats on avatars for a variety of novel things. I would add to this list a parameter or contact sender that indicates to the avatar deploying the seat that it is occupied.
Jaximogen
A detail I'd love to see in addition:
Sitting in a station often requires several attempts of adjustment and reentry, because there is no default way to adjust your position within a station.
Additionally, it's very easy to accidentally leave a station, either by bumping the joystick or through joystick drift (or, ever tried to pilot a camera and accidentally fallen out of the chair?)
Both of these could be solved by allowing reduced movement while seated in order to adjust a player's position relative to the chair, and delegating "leave the chair" to some other input, like the jump button.
hdorriker
Jaximogen a solution that myself and others I’ve worked on worlds with have circled in on is that the component to place a player in a seating pose and the component to pin a player’s position and rotation must absolutely be separated as two distinct Unity components. As two separate parts, these can be dramatically simpler and vastly more maintainable because it does away with any need for nearly all “modes” and options and allows us to isolate issues better. This is the way Stations should have worked to begin with.
hdorriker
The issues with both VRCStation and the low-performance Udon workarounds for getting players to stick to objects and vehicles are now on full display for upwards of 20k players at a time in the number 1 world (FISH) on VRChat as of this writing. Everyone is seeing the cost of VRCStation’s architecture prioritizing “a sitting animation” over the position of a player’s viewball being where it is expected to be. Everyone. On every platform. The solution to the stations issues has been proposed many times, but here it is again: Allow us to pin a player to an object without any avatar animator interaction.
kawashirov
Also stations should place ppl relative to selected bone (hips by default).
This is nonsense when ppl fell or pop out of chair because size of their avatar.
`Squishy
100% agree. Much needed.
A very small additional request I'd like to add to any efforts to rework stations, would be an opt-in checkbox for stations on avatars, to enable the user of the avatar to "sit" on their own avatars stations. Whilst the reason it's disabled is very obvious and makes sense as a default, there ARE fun usecases for this that used to be possible in the past, and I would love to have that back.
Please and thankyou! Would make me happy!
Jar
Please also allow entering stations when using a non-humanoid avatar.
Load More
→