#udon-showoff
1 messages · Page 4 of 1
#VRChat world creators and pool enjoyers rejoice, for the 1.6.0 beta of That One Pool Table That's Everywhere has been updated to Beta 2, adding many fixes, including Three Cushion Carom being made into the right game and not a hacked proof-of-concept.
Check it out:
github.com/VRCBilliards...
oh my god, it's been over 3 years since it was last updated
a creator releases precisely when they mean to
🙂
oh sorry I didn't mean to come off as a criticism, I just didn't realise it had been that long
ooh, I like this, I'll test it out
is it more performant to use code or animator to move stuff?
like transform etc vs animator?
Depends on how well you write it
If there are expensive tasks behind it, then it is better to precalculate it via an animator
If you're doing a quick move then doing it in code would be more effective than placing an animator on it, but if you need smooth animations or the animations last more like than like 5-10 seconds then I'd probably do an animator
my chair is released
visit the demo world in game, search for AutoPosChair Demo
I'll give it a whirl tonight 😉
That gif that give me a very silly idea..."enchanted seats"
Like, you have the normal ones but also the "obviously fairy sized interaction" on a railing or whatnot but that would resize you when you seat, then scale back to normal when you leave. I gotta make that once you release a demo for other creators to mess with your chair... 🤣
lol
oh but, when you close to 20cm tall the avatar breaks, we saw that in testing
so cannot go too small, it's not the chair, its the avatar animations
not related to your prefab
I used to have a spiderMG avatar, it always broke at minimal size ye xD
I always had to put her at 0,4 or something
@fierce flare I have a little suggestion. You see how you have a cube to visualize the area of the chair in your world?
Maybe add one to your prefab, and make it EditorOnly since it isn't neded in-game. But at least the user wouldn't have to guess where the collider is.
It's small QoL that goes a long way to speed up the workflow
A bit similar to how portals have a "cube" object in their prefab
I see your point but I wanted to keep it basic, it may be QoL for you but personally I prefer to see more of the scene, but i can see how it is useful
it is rather minimalistic by design
Yeah but it's editoronly it's literally just debug view and won't make it in-game
so you can add it if you want
already did xD
but it wouldnt confuse a beginner who just wants a chair and is wondering what is this cube
huh, nicer looking than expected
I mean actually...since what's important is the "chair edge" maybe a quad would make more sense
the use is actually to line up the depths
bottom for where it touches the chair, and back for well, the back
calibration, if you will
they won't appear in-game afterward
i imagine for sofas, you might want to actually sink the cube into the cushion, to mimic real life sinking
that makes it super easy to move the object around without having to guess where the collider ends
Yeah the details depends on the creator of course
Idk if possible but I like the little sims diamonds that appear when you get close to the seats to sit.
In just b club 4.0
yeah it is possible
I see a proximity check sphere, probably as easy as in "PlayerTriggerEnter" turn on the diamond, and on exit turn off xD
essentially a diamond shape collider in mid air, with proximity toggle it on and off
Well the shape doesn't matter. You could have it be a seat icon.
It's just a nice touch that I saw just b did
yea
either that or making the interaction's collider a physical object, akin to a 3D icon when you're in proximity
so we're back to making a cube visible, just a deformed one xD
but that's more of a "the user can customize" thing like you said
Does the interaction collider matter or only the "chair front" object? I could try to make it just to see how it looks
I mean for the calculations and positioning the avatar
well, the thing is, you can do any kind of customization in every world, it is up to the world designer
Guess you could go with on hover turn on the visual, dunno if it work outside of desktop tho
it's meant to be custimized is what i mean to say
ye
that part is just flavor so it make sense it's to the user's side
What I was talking about before this icon thing is QoL for calibration it's not the same cube xD
the interaction collider is only for clicking, it doesn't affect sitting positions
ok, should make making the icon extra easy then
on hover, turn the icon on <w<
(idk how to do mouseover objects)
something to do with raycast? never touched it b4
type random words in the node search till you find a thing that works
maybe we should move to udon-general
For their thing, it's basically a 3D interact that then sits you in the chair. I don't think raycasts are even in the question
the game still detects you hovering over the trigger area for the Interact, right?
that is super easy, literally swap the collider with a diamond mesh collider and move it up a little
yea
yep xD
I still have to add the credits (main reason the whole world is still private) but I can publish and send the link in DM if you want to test your chair in action, on the moving vehicle
for the raycast i thought you meant something other than the interactive highlight appears
Nah, if you haven't been to just b 4.0, check it out. Just a cute way to represent where to sit
I've low-key taken a ton of ideas from that world 💀
i went there once and poke around, found all the dolls and got a disappointing avatar XD
Uh...ok, sitting teleported me to spawn point and I'm stuck... 🤣
it is a very well made world tho
yeah we need to move to general xD
ya
oh this is beautiful
why thank you
my first time doing anything with udon
#udon-general message
Niiice moosic for kicking things 👍
sick! how did you do the mesh breaking?
the usual...
deactivate the object
spawn a bunch of gibs in its place (optionally with random + inherited velocity)
the fractured glass is just a Cell Fracture (Blender Addon) advertisement
ooh okay so the meshes arent generated at runtime
the broken glass is just enabled on break
I made this udon script for switching postprocessing between PC-VR and PC-Desktop automatically for the player - it's free if anyone wants it 🙂 https://booth.pm/en/items/6645490
was finding it's actually quite hard to balance post processing for both as dark areas are much lighter in VR
and a lot of the post processing effects that look good in desktop look horrible in VR
Runa detected _(°~°) glad to see robots reign supreme
Wave function collapse online. Gonna need to make like... 100 tiles to stop it being repetitive though.
realistic playable piano!
colliders are kinda janky rn but thats ok!!
I’ve always wanted to know if a piano like this would work if you played an electric piano that was off with finger tracking, while scaled at a size that perfectly aligns your fingers to the in-game piano
Maybe I will get to do that one day sooon
well the proportions of the vr piano and that electric piano would have to match up perfectly
If you're playing an actual piano you may as well just broadcast the sound from it. 🤣
the ones that work with a MIDI keyboard are pretty cool
It’s horrible sadly
I’ve used midi supported software to stream piano audio into my mic and the delay has never been at a playable level
I want to hit a key and hear it instantly
Plus that piano has velocity support so it should theoretically sound exactly the same
Since my electric is the size of an upright, it’s stuck in a room that will never have a pc near it and I’d need to do wireless midi
I’d rather it just be in game :3
my keyboard is in a different room from my computer but I keep meaning to move things just to try this
but maybe I don't want to if the delay is bad
Editor tooling for my ballistics since entering Play Mode takes longer than my patience
wow is it calculated in code?
yes
Nothing like a good bit of udon to destroy the sleep schedule
the sound automatically played in my head
XD
is that calculations for ricocheting projectiles and specific damage areas?
Yes
reminds me of these awesome scenes: https://youtu.be/W9JJt-A36bM
I do not own the film !!!!!
This best-of was made by me
Hope you will enjoy as I did !
yeah it will be neat. I've had the udon runtime ballistics made for a long time now but was waiting for Udon 2 to bump up the concurrent projectile count closer to Monobehaviour performance.
The lag starts to get become noticeable at 120 projectiles being simulated at 20 hz, achievable when firing at 1200 RPM when the projectile life time is about 5 seconds. With Monobehaviour, my code got up to nearly 10000 concurrent projectiles at 120 hz before taking a performance hit while still maintaining over 100 fps.
the wait is too long and I want to move it forward
you do know that Udon 2 was cancelled? Being replaced by Soba, which does not yet have any promises of significant performance increases
how mysterious
just wait for announcements
Techa knows better than most :)
It's more a case of rebranding the thing rather than a full cancellation and restart. ^^"
no it was definitely a full cancellation and restart
but a lot of the goals they had initially for Udon 2 are being worked into Soba
so do you plan on releasing a public package so folks (like myself) can implement your awesomeness?
@scarlet rain yes, I have beta testers right now. They are teaching me alot on how other people approach prefab packages.
I'd be honored to be among those beta testors
I lost all my world files due to a package issue getting interrupted.
So here is my arcade as it was put up on the lab for public viewing with my Animatronics dancing to the beat, functional Arcade Games and the older version of my Highscore persistence, Fun food Props, and Go Kart Track. I've been able to recover everything but my code, the one thing I didn't have save in triplicate.
https://vrchat.com/home/launch?worldId=wrld_5de8a59e-2c93-4ec4-a380-b5030310c76a
Hi five✋
More progress, more optimization. Currently it has support for VR StageLighting GI, LTC GI, and Unity Light Probes.
Friend got 8ms GPU time on 3070 mobile in VR in the world.
GPU particle cost is neglible. Most of the cost is AVPro video player blit and the water shader.
WIP sound testing facility for new suite of udon sound managers I am implementing. This one enforces the lawn
ffs the jump scare and the sound is overly loud
you gotta turn down the gain to like -15 rather than the default +15
if you are throwing sound sources to zero distance to listeners
or i will sue u
sue me.
fite me in vr court
I am willing to go to court over this
I thought "oh is this like a sound system for the grass? hm I can't really hear it let me turn the volume up to max" 😭
rip
let these two brave souls be a warning to others
maybe u should add a red text warning next time
preview of one of the sound managers
it is very cool tho
simulating the sound delay with the speed of sound and whatever?
I would like to see you in court or move that discussion to #udon-general
delay is cool tho
holy jumpscare! 🤣
your thing got everyone better than half modern horror games can dream of. Good! 🐸 👍
same system but with an NPC shooting at rifle at the player
loud noise warning
I made an alternative way to do vehicles from stations, think it turned out pretty well so far. Really like how it lets you both walk around in vehicles while they're moving and meshes better with full body tracking
New VRChat prefab/script: ✨Canvas Sync✨
A script that automatically syncs the state of UI elements across all clients, enabling a dead simple way to create things like a global toggle with just 2 clicks!
Available as a vcc package at vcc.ball.moe
Thank you for everyone who helped me out here in this discord. Special shout out to @boreal nest, @proven totem, and @pallid smelt for helping my launch my first prefab/coding project.
I'm so happy players are enjoying my thing i made.
My NPC system finally launched. I can't believe I've made it this far.
https://x.com/PeterJCasaey/status/1908231038813270272
Behind the scenes of making the NPC rat
***It's time to speed up your hearts before you have a stroke. ☢️ ***
I present to you the first energy drink made, the name is "S.T.A.L.K.E.R."
When you click on the collider on the bottle opener, you will open the drink, you just have to bring it to your face and you will start drinking the drink.
There will be more of these types, and not only with drinks, but also with food, first-aid kits, and so on!
https://bsky.app/profile/did:plc:qjyvh6b4prbglv67nqep5ruu/post/3lm6ocgdess2m I did a racing prefab system that makes use of the VRC+ Drones :3
Introducing Drone Racing for #VRChat !
A FREE prefab for world creators to make courses and race with the newly added Drones for VRC+ users.
Along with it, a newly made world: Nightly Aero!
Prove your flying skills by racing through 5 different courses, compete with others and lower your times!
Made a little prefab that logs all your players in the worlds FPS to your log file and a web page that parses the logfile so you can gather performance info for debugging world updates to see if things run better etc after you make updates.
wooo when i saw the drones come out i knew someone was gonna do something like this 😄
I said that when I first saw the Drone API being unlocked, then thought "Wait, I should try to do it" baha
I've got the site public for it so once i pack up the unity prefab that goes along with it ill put that on the page and people will be welcome to use it.
Just havent got round to that bit yet.
I got inspired to learn how farm worlds were made after seeing quiet a few of them for space jam. So I spent a couple hours of my day yesterday to learn udonsharp instead of graph to make a approach on how seeds trigger plants and they go through their life cycle.
the cube harvest will be bountiful this year
Ngl the spacejam farm worlds were cool to see!
I made a world where you can test SmoothDamp settings
For a secret on how Luna and I did ours, we use vertex offseting to make all of the plant growth in a shader calculation over an animator.
If you tried "Titan Farming and Fishing"
oh ill check it out!
oh wait i think i seen this, this was for the jam! this was an inspiration to learn it it was really cool. I wanted to nerd out and thanks to you its pushing me to learn C#
Oh, well if you have any questions, lemme know
I was the person who wrote all of the scripts
Absolutely! An after spending three days poking around it and learning serialization I can see how much a lot of work and thought has to go into making these farm worlds. Its complex fast.
The best thing to remember is resting a good foundation
Each plant I wrote was a member of PlantBehavior, which has OnPlant() OnWater() GrowthUpdate(long currentTime) OnComplete() and OnHarvest()
are you pushing any sync or is it all local ive only gone to the world solo.
It syncs
There is a separate set of functions that run for the remote player (the player that lacks ownership)
Only problem is you can never go to another player's greenhouse
(use a drone to see it sync)
I plan on adding the ability to visit remote players greenhouses if we hit 500 favorites or 10K visits, whichever comes first
any news to share about the release (date)?
Not as of yet. I have to build and animate my own npc now.
yooo still not finished but i'm happy with the concept :3 everything just events other than cursor movement because InputLook is broken
@mortal ingot
OK u may be mad
But I'm just messing with ya alr
I came to apologise tho
It's OK if u block
?
The cube harvest expanded...im trying to test how many plots will it take to clog my network...so far nothing yet...
fyi, that particular use case of a large number of manual synced objects which sync infrequently should be greatly improved by the recent open beta update that mentions "Optimized some internal network usage"
one interal network usage?
oooh you mean a patch fix for VRChat
i was like searching udon documentation for this for a second HAHAHA
Gotcha 😄
it actually worked really well in testing i have some inconsistency with synced items and thats cause my code but over all it syced like 80% very well with no clogging.
Wait wut...I need details 👀
Somebody found that manual synced behaviors in large numbers still had a network cost associated with them even when they weren't doing anything. An engineer dug into it and found that the source of that cost was unnecessary and could be safely removed.
@boreal nest oh cool so this shouldn't affect my NPC's
This bodes well for the Zero-Grove's fields and farms then too.
Also syncing farming plots is incredibly easy so long as you don't care about late-joiners. Just make your "start growing" code fire off a network command to all users and let them grow in parallel across all users.
Yooo what thats huge! I have sooo many of those in my world
I did and so far so good, i didnt sync the test seeds but the plants i did as i was just raw testing syncing capabilities and seeing how the work load was if there was this many, but just trying to get my core mechanics working next would be 3d modeling.
If you do it right, there is no sync
The only sync should be at the beginning
And that is to take down the starting time
Record it as a long Zulu time
Then just get the time difference for the amount of growth
Nah, you don't even need that. All you need to sync is to know what plant is being grown, and how long it takes, and once it starts it can just chug along locally.
The only person you care about having it ready to harvest is whoever will be doing so, and they'll be able to do it when they see it's ready
Updated my tire friction calculations, it can now slip at the contact patch which can be heard through the transmission when I shift up at low revs from 2nd to 3rd, and 4th gear at the start of the video
nah sync it all
That’s the thing, only need 1 long for the starting timestamp, and 1 int for the type
I use a bit wise operator on the int to flip the first bit if it was watered
The starting timestamp is only set when it is set to grow
So by technicality, I could just use it to know, but again, gamejam had to move fast
Either way, anything that is saved is also synced
Any time you RequestSerialization, ALL sync/save parameters are sent
Make as many “safety” limits as you want, what must be saved must be sync’d by design
Oh...maybe that was this cost that made the server freak out and timeout accounts back when I made PixelCanvas, then xD
Past a certain number of players they'd be stuck in a loop of being kicked by the system as soon as they join the world, and reducing the number of tiles (which were stand alone manual sync udonbehaviors) made the max number of players being able to be in world go up...
1 player worked fine but since the main object was PlayerObject it instentiate for every new player, meaning a lot more of them existing as more players joins (if not that cost issue, it probably reached a hard limit of udonbehaviors by accident ^^")
Hey, sorry to reply to an old message, but could you also send that to me please? Your work looks cool
does that cursor work in vr?
https://vrchat.com/home/world/wrld_2340fa50-a828-4a24-90b9-40718a0c3bb1/info
just published my card game to labs after allot of on and off work. Feel free to try out this initial version. (needs at least 2 players)
pan, pan pan. de ftns. code u, u, u. ar.
(Saccflight, Unity, VRCSDK.)
wow I haven't played that in a long time
I used to play it a ton in high school
opposed to the buses in vr field trip, this one's more interactive and uses a better vehicle system (sacc)
i also coded in some of the mechanics such as the door opening, interior lights, tire ambience and brake noises
the errors dont break anything important but
would this make for a soothing vr ride
Remove the loose SaccLiftBody
or assign the rigidBody for that component; Though primarily SaccLiftBody is used for the Aircraft; I'd have you remove that if you're not using it
lesser headache, lesser overhead of a script trying to access something that's missing
removed
ye
LOL, I immediately knew the course. Very cool! That is a large world you have.
sum procedural terrain gen, very minecrafty atm but unintentional (love voxels 🙏)
kinda proud of this ngl
vr field trip finna get a MAJOR update
yes, it makes for a nice variety of turns
not sure, was planning on doing regular kinda ui for vr like there is in kany other worlds
oh ok so that UI wont show up for vr users in the world its just for the desktop users then?
480 hz vs 120 hz tire physics at low speed using the Pacejka tire model with no low speed hack
An example of a low speed hack used in lower frequency simulation is smoothing or numerical integration of the slip ratio calculation. This is a good hack until you want to simulate smaller and lighter spinning objects that are connected to the wheel (engine, clutch, transmission, driveshafts), resulting in smoother angular velocities but incorrect simulation of these spinning objects.
pretty much, mostly wanted to make the ui easier for testing
oh goodness i just saw this, apologizes for the late response
i coded that with visual scripting, i can show you the The node setup i done for it
Working on NPCs for my club world, Got my version of Spring bones working so the Hats and 'Assets' have physics
👀NPCs you say?
it's no fun to go clubbing alone
Unless you’re doing a bit of trolling
I once told the doorman at sunset that he should let me in because each of my atoms was formed in the heart of a sun billions upon billions of years ago
Needless to say, I got kicked
Yes, been seeing your stuff. Big Fan! My plan is to have my clown girls serve drinks and being very interactive using Centauri's basic AI as a base with heavy customization. Wanted Phys bone style movement but couldn't find any assets that work and would upload to vrchat so created a modified version of SpringBones unitychan script in udonsharp
Dynamic Bone still works on worlds
If you have that
I have wasted my week
I'm gonna take Dynamic bones apart and make my code better, with black jack and hookers
Haven’t seen that reference in a long time 😆
Thats actually one of my goals to. An animated bartender to serve drinks, interact with players, but usefull enough so any world can implement it.
That is a stepping stone for me, my end goal is recreating bionicle Heroes in VRChat, with better enemy AI
And procedural Seed based generative maps for dungeons
Is any of the NPC stuff available yet? Or was the rat the first big test
Rat was the first big test.
Honestly I haven't had time to work on it much.
I crashed out hard a week after april fools day event and all my panick fixing was done.
Then weather has gotten nice and I've been doing a lot more outdoor stuff in spare time.
But to get my npc stuff ready I have to model and animate my own thing.
alot more planned for this but i can register commands n all that
Can you register new commands at runtime?
yes, registerCommand("Name", "Logic", "Formatting")
that looks awesome! what kind of stuff are you planning to have it do or support?
probably just gonna use it for like debugging like being able to tell an npc that it needs to do x thing or like basic admin things like fly, noclip, spectate, etc etc
Glad you were able to figure that out!
Made a cute lil world in the span of 10 hours, sleep well :3 https://vrchat.com/home/launch?worldId=wrld_671d399f-af96-4ab5-9dc9-de40d9878702
loud volume warning
wip shooting game world current progress
Very cool
how is your hit detection done? raycasting?
It's a physics-based raycasting, raycast check is done by drawing the trajectory of the bullet each frame with given starting point, direction, and velocity.
is the bullet a particle or an object? how do you do the trajectory? custom maths or particle emitter or rigidbody?
do u have bullet trails?
it's just an object with Line Renderer & Udon attached to it. The attached udon does the custom maths and raycast check.
and bullet trail is done by Line renderer as well.
https://x.com/arxlight_vrc/status/1909941953363607870/video/1
A bit outdated video. This video shows how the projectile is visible.
(at the beginning you can see bullets on the sky)
making a little recreation of the hexcasting minecraft mod
Is this the right channel for this?
finally released another world, my first publish since the placid plastic duck world
https://vrchat.com/home/world/wrld_478a1a2e-dba5-49c5-beb6-b5bdb6667b23/info
it features a music player i completely custom made
i had a very specific set of songs i wanted to play there, but i didn't want a whole video player, so i figured i'll just make my own music player entirely for this world
oh I forgot you did the duck world, it's amusing
i've been wanting to make a revised version, because i made the original when i was still learning U#
haven't gotten around to it yet though, get a few other projects to do
also thanks :D
a lot more stuff works now, just got all the meta programming working
oh thats cool, is that a grrid snaping setup?
ooh the grid snapping is cool
almost got the touch control for my game done
**Today I released the long-awaited Stalker Anomaly game in alpha mode, where you can interact with objects, talk with characters, as well as take quests, and you can complete them, the achievement process (currently one, there will be more in the future) as well as a bunch of graphics settings. **
This is not the final version of the game, there will be more new game features in the future, such as a PDA, a day and night system, and more.
*At the moment, there are a bunch of bugs in the game, I'm trying my best to fix it all, while having little skill at it.. 🥲 *
https://vrchat.com/home/world/wrld_11796192-27c6-4d1d-8a41-58365acc00ba\
the system of application of objects
cool little seed generator I made.
How do you parse the seed?? I wanna get into proc gen and I have one failed project that used it already, but it was done by adding the seed values to a mathf.perlinnoise or something 🤔
I’m very curious what other ways there are to convert a string of numbers into usable data
it uses 9 synced pickups in a array then generate/move them to a random Y value in-between 2 objects Y values (MAX , MIN)
then i convert there randomized y positions into a 2-digit string then i combine them into a 18 digit string.
i want to use the middle square method for room generation in my next game (inspired by doors/pressure)
https://www.youtube.com/shorts/4ohFpBn2nNo heres a video explaining the middle square method
got generation working !
I watched the video earlier and forgot to mention anything 😅 thanks for teaching me about this!! I’ll probably set something up with that sometime soon, just gotta figure out how to break down a “level” into the necessary parts since I want some open-world feeling parts too
only having to sync 9 pickups for all this is amazing 😭 (all seprate gameobjects for rooms)
i was doing something similar to this abit ago lol, you could use a single synced 8 bit number or a string for faster syncing, hope to see what you do with your generation tho 👀
only time will tell !
https://vrchat.com/home/world/wrld_821dc959-1ef9-4238-90f6-26b57248b355/info
First little look at the world go check it out ingame !
Work in progress ghost catching system for Luigi's Mansion
That is so awesome!! Thank you for doing all of this 🙏
oh my god that looks so good
i cannot wait to see that finished
i love luigi’s mansion
Evil feature suggestion:
Make it like Luigi's Mansion 3. 🙂
But awesome work. 👍
Hopefully i can get a decent demo published soon. just setting up fight events and a script for the common ghosts rn, also need to polish the flashlight/vaccuum system to be summoned and follow each player ;/
something kinda fun i tried a while ago, midi and debug log parsing in tandem allow 2 way communication between the editor and vrc. somewhat based on udon midi web helper
little preview of what I'm working on using light volumes
oh very nice!
Are you making shadows with light volumes?
How are you doing that?
additive volumes baked with static geometry in the way
so far I've utterly failed to bake additive volumes, I keep having hard edges and no blending
i dont think blending works on additive volumes at all
yeah when I go into play mode it's an obvious square of light on the ground
just make sure your volume is bigger than the range of the light source
yeah - been trying but I don't want the thing to be like 50m
it's supposed to be a small movable light and so far I haven't been able to get it right. i guess keep trying.
https://vrchat.com/home/world/wrld_776c40b8-99fa-4dfd-8a86-cc708db710ef/info still a work in progress but you can now try it out for yourself on labs, avatar with light volume support heavily recommended
little update from my previous posts ive added the following.
- synced doors
- a health and money system
- rooms with walls
- fixed up on the math behind the seed to doors
- added weights for the rooms
- special rooms for the 50th and 100th room
? now I'm working on "path-finding" for my entitys.
i recommend A* path finding since its very dynamic and not that bad for realtime things 👀
use Unity's Navmesh for the path finding. its efficent and fairly low impact on performance
Could we let them explore before trying to weigh in what could be the first few results of a search engine result?
I added runtime penetration for NPC projectiles and made same-object concave collision cases more robust for both my editor tool and runtime. Probably up to 10mm precision for concave colliders. First few pictures are from the editor-only tool, and the video shows some visual and audio effects for penetration.
You should tweak Light Volume Color Correction settings to avoid hard edges
Any suggestion about that? I haven't really had that do a whole lot yet, but I might not have tried hard enough.
I did see it in the docs and tried at least a little
Unity's built-in AI Navigation system (which uses A*) is really good and really fast. You just have to be willing to build additional pathfinding code on top of it to avoid the Congo line effect and clever use of nav agent and nav obstacle on the same object to avoid the pushing behavior
doesnt vrc only have the navmesh and that is it or do we have access to something else?
The only main thing we're missing are custom agents https://creators.vrchat.com/worlds/udon/ai-navigation/
AI Navigation allows you to create non-player characters (NPCs) that can intelligently move around the game world, using navigation meshes that are created automatically from your Scene geometry. Dynamic obstacles allow you to alter the navigation of the characters at runtime, while offmesh links let you build specific actions like opening doors...
And their example too (you can find in the SDK's Example Central) https://creators.vrchat.com/worlds/examples/ai-navigation/
NPCs that follow you.
for example, here is my own patfinding code running in VRChat that uses Unity's AI Navigation as a base
& that isnt using a navmesh? 👀
i presume it's using a navmesh to provide paths, but then does its own custom logic on top of that
i c i c, i mean if you want pathfinding for something like a procedural level i dont think that navmeshes would work (unless there is some way to make a navmesh during play that i dont know of)
I don't know about doing that in Udon -- Unity can definitely update or generate navmeshes at runtime, though
Promising!
You can use BuildNavMesh and UpdateNavMesh at runtime
I'd have to actually test it in-game
but it's not obviously impossible, at least 😉
I've only used navigation in the editor so far
I use it to automatically generate signage for one of my worlds
if you do test or figure something out please lmk as i would love to know about this stuff tbh
an editor script asks for the fastest way to get to another part of the map and then spawns the appropriate sign
The only thing you can't do in Udon are custom agents
the navmesh is a part of Unity's AI Navigation
Next time you need to Lerp, SmoothStep, SmoothDamp (which doesn't work in Udon btw), or need to move anything...
Try SpringDamp!
https://github.com/UzerTekton/udonsharp-springdamp
a lot more stuff since last, Airishayn has been helping with models and the environment.
this is a little display for viewing the stuff contained in these cubes
this is pretty cool i think
my roblox-tycoon-like droppers work off an index system, and i just finished this mesh preview. it gets all the meshes of the children of the prefab you put in, and sets that slider's max value to the amount of children in the prefab's child count
so instead of setting the number and trying to remember which shape your dropper will drop, you get to visually see it!
2.5 hours for a small QoL feature :D
that's awesome. I didn't know you could do that kind of stuff with the UI
honestly neither did i, but then i saw the Polybrush package had a mesh preview in its editor window and i got an idea
I built a little "Value" system to make it easier for me to make settings menus.
This is a FloatValue. I can subscribe to it to receive events when it changes, and I can point a FloatSlider at it to control it. Anything in the scene can reference it to read the current value.
Some values (like float values) include extra information to help style them properly
(gotta fix that text wrapping...)
i'll do custom sprites for the UI later
I made a spell casting system with udonsharp
I didn't add Black Jack, but I did add slots and credits.
Upgraded my 'Hookers', I mean NPCs integrating an edited dialogue system and a persistent Affinity System so the world will track how much the girl likes you. And you can give her tips.
Made that stacker game I would see at walmart... idk why
I'm building a straight up dating sim with minigames
An overall view of my most recent gizmos for my custom tire physics. I'm not sold on the slip angle display shown as a red solid arc in front of the wheel, it should somehow stand out more by having better contrast instead of a red solid arc, or the editor should let me select which sets of gizmos are showing
How is the camera following the object in editor view? Or am I just missing something
Shift+F will focus and follow the scene camera on the selected object. Any movement (outside of orbiting with Alt + Left Mouse and zoom with Alt + Right Mouse) will cancel the behavior.
Well that's useful
custom array drawer!
i've been wanting a custom array property drawer for so long, the default one is ugly
vowgan did a dev stream recently where he went over making something like that, and it helped me to make my own
although, how could i improve the foldout part of it? i want to be able to show and hide it, but having the text jump around is a little strange. i just don't know where to put it
oh that's nice, I've been making custom inspectors lately, that's decent
oh - though I'd still want the dropdown the default one has, to hide it when you have lots of other things in there too
maybe i should just put the add/remove buttons below the name
it looks so nice in-line though D:
I like the x inline though, for larger lists.
Or you know, the delete button to work. Unlike in the avatar parameters list.
alright i think this is overall better
since the text won't jump around when toggling the visibility anymore
Nice
in case you, or anyone else, wants to check out the code
You're a saint
i realized i forgot the array size showing when the array is collapsed, so i added that
Ha nice, I was thinking of implementing something like how its done in war of wizards but ultimately couldn't be bothered to do it lol
kinda fun midi thing part 2; pushing audio data to the left client (this is frame-bound, hence the incoming rate being higher than the target rate) allowing continuous playback by continually assembling audio clips as data comes in
data is also propagated over network to the right client (sample rate 7.2khz, 8 bit depth)
in this case the left client is being fed pcm data from a resampler over time, but the idea would eventually be to feed it desktop audio if i keep working on it
it's being pushed over midi to the local client on the left, not network
oh and the sound is from the left? or right?
i'm swapping which is playing with the volume sliders in the video, they both have audio, though the right is delayed because it's receiving data later over network
it's just queued events, but it's still pushing faster than playback is consuming the samples, so the right client can playback in realtime
huh, so it's streaming
cool but what is this for?
its cool lofi radio gadget but you need midi file added to the world? so not real time?
the original intent was to allow streaming desktop audio over udon network, it could also be used for drag and drop images/audio, though the bandwidth is prohibitive for advertising it to others (it'd take more than a few minutes for anything of real quality)
it's not a midi file in the world, you can push data into vrc over midi
oh ok
i wonder if this can be augmenting the player voice, like fill in the missing frequencies at higher ends that got compressed in voice
but it probably wont sync
wait, this can be a piano
or any instrument cos its midi
the intent of what they added is probably instruments, this is the documentation on it
https://creators.vrchat.com/worlds/udon/midi/
Yea I know midi's also used for syncing animations and music. Can sequence cues for specific sections of a song. Or trigger stuff off beat. Stuff that audiolink can't detect.
Anyway your audio-over-midi demo is totally cool!
I made a naval shooting game world and it's live
neat
new arcade game, a shoot'em up bullet hell
This is a character animation system I recently developed at udon. It uses ideas like motion matching to make it turn smoothly. It seems a bit simple for now, but I will work on it in the future!
Ok, that wall hop near the end was very good! all these transitions are looking really good
whole project is a pain, but im liking how its coming along
you need some lighting in that room, i struggle to see in the dark
Well it’s supposed to be dark until you defeat the ghost, then it lights upppp
ok fair enough
Oh that is wild, I gotta try something like this.
that's really impressive!
my sorta jetpack world, it features what i'd consider my best positional extrapolation/sync. it's pretty physical in terms of how you have to control it, it's important to consider your position in the station
the 2nd video shows a perspective of what i'm actually doing because it's probably not super apparent (i'm using my hands for control)
there are also 2 vehicles moving on splines that circle the area. you can land on them and stuff (this swaps to relative sync, only when grounded);
you can see the extrapolation in effect near the end of the 2nd video, there's a yellow sphere trailing the player which represents an interpolated view (it might just be raw positions, i forget)
would love to see some people try it (i just really like flying here); it's pretty motion heavy and takes practice to get used to
https://vrchat.com/home/world/wrld_295e0ef4-9415-484a-8d5a-cea39878d288/info
coool! That looks like really similar to how drones fly
wildly different control scheme, but similar mechanics
i haven't been able to try the drones very much, but i think it might feel somewhat similar yes! it feels really good to get it down, though i don't have a ton in the map to actually practice flying through/around
as a follow-up, i got to try the drones a bit and realized udon could access some things related to them; so i tried adding my own style of sync on top of them. at a higher rate as well as predictive
i'm really bad at flying them so i don't think i showed it off very well
I've been at this for like 10 hours now but I finally got it all working. it needs a lot of cleaning up to make things more seamless but it works.
player instancing. been working on this as part of a project to create persistent, instanced player housing in an RP world i'm working on. always thought it was impossible but clearly if you try hard enough nothing is impossible!
After some numerous addition and optimization, here is the video of me shooting all the guns available in my world.
Features slap reload (HK Slap), dual magazine holding, (mostly) accurate gun mechanism, and more.
Heal system, game system, and more to be WIP!
https://youtu.be/rKMuzlfxoW0
is this teleportation based?
nope. both players are present in the same area.
how do you hide them?
Im trying to wrap my head around what is happening. Or the use case. So players are in the same area but like on different "dimensions" per say?
Basically.
The idea behind this is that i plan to set it up with a system that can spawn/position prefabs in a given space based on what 'room' you're in.
allowing a virtually infinite amount of rooms to exist in the exact same space.
this means i can make a tool that allows people to customize their rooms in-game and store the customization data to their persistance data this creating fully instanced, persistant housing.
this way i don't have to have a dozen identical copies of the same room in the world just to accommodate every player.
an example case of how this could be set up/used is say you have a map that's just 3 rooms, a lobby, elevator and a hotel room
that elevator can just be a loading zone that shifts people inside the elevator around the various instances.
thus, you have a world. that is 1 lobby, 1 elevator and 1 room. yet every player there can have their own personal room there.
Ok. What about voices? Would I hear people stacked on top of eachother?
Nope, because vrc emits voices from the head bone of an avatar. so hiding the avatar in this way effectively mutes them for anyone who can't see them.
I imagine it's similar to how Thad's Home of Cuddles works with it's own custom station based separation. Players not in your environment are locally placed super far away via a station.
👏 👍
ig you are also aware of the weird issues that come with that unfortunately? people with common avatar addons may not be able to use their avatar features and ofc all avatars to be used with the system require some Animator with an Animator Avatar on it.
changing avatars can also cause some weird things since they are exited and restationed during the process.
Prints, Stickers, and now Items (open beta) will also break the illusion as well.
I'm aware of the limitations, but this is mostly for use in a specific RP world where these things are disabled for immersion/rule sake anyway.
sounds awesome for that!
altho i've not ran into any issues regarding animators/avatar interactions. only thing i noticed is that if your crouching when you enter the walk in zone things get a bit wierd.
Still got the shader to do for the SV selection... but i'm so glad I made it this far, for something I thought was impossible to do 😄
Id be interested in this for “alternative dimensions” mechanics for game worlds!
are you using a custom shader or are you doing culling on layers? and putting each player in a different layer or something?
^^ he already confirmed he’s offsetting the players with a station
This wouldn’t be too hard to do but it would probably take a lot of your network data
oh i did not read that lol.
so when it comes to stations, any way to put a remote player into a station without requiring the local player to be in a station?
Send the remote player the UseStation method
Its like teleports, you gotta make them use it on themselves
It wouldnt
you just said only a local player can control if they are in a station or not, right?
Oh, well yeah but it doesnt have to be the one to press a button or whatever
You can send UseStation through a networked event or synced variable method
I was hoping there would be a way to hide remote players without requiring everyone to be in stations for that
Lets move to #udon-general
This actually made me realize my entire setup is a little over engineered and this whole thing can be done without any kind of position sync. The only thing needing to be synced for it to work Is a single boolean, so I got some rewriting to do.
I'd use an int for "room ID" instead of a bool here - that way locally you can resolve if you are in the same room or not without having to mass sync data any time pairings change. You then only have to sync when a room switch occurs.
This is great advise ^
And it's pretty much what I do in Far Citizen for the scene index.
I also use desynchronized stations to reposition remote players in that world.
Not what i meant with that. but yeah there is an additional vlaue for the room id, the bool in general isn't even actuall a bool. it's just me using the immobalized state as a hidden/shown toggle. right now i was manually syncing the player position and all that but i realized that with the severely simplified usecase of this setup over it's original purpose there's no need for me to do all that.
ah icic
since i'm not actually offseting the player when they are visible, only when they are hidden. there was no reason for me to move them around. so i can just mobalize them when they should be visible.
didn't think about it until today tho
It looks pretty cool, especially the mechanics created, like changing the magazine tactically, or reloading Iraq, I've never seen this anywhere, great job!
Honestly, I myself dream of creating a weapon system using this method when I study programming more closely.
Rain fun.
What i've been working on : https://vrchat.com/home/launch?worldId=wrld_9b2e67e2-929f-4852-b324-bcac24cf545a
I'm guessing at a certain altitude the windows change textures or shader?
Working on a 2d Adventure arcade game like Binding of Issac or the 2d Zelda Games hence using gameboy Zelda as a style test base, meant to be a multiplayer dungeon crawler so you can play alone or together getting random items and fighting enemies and bosses, real early but happy with this early Test
Full gameplay Test of my Arcade Shooter built to be light weight and put into vrchat worlds: https://youtu.be/DzNoXKskYec
A test of a VRChat Arcade Machine for a Shoot 'em up Bullet hell style game.
My current world filled with my arcade games and NPCs for those who wanna play it for themselves
https://vrchat.com/home/launch?worldId=wrld_01463d85-1a2e-4d72-8ff8-359e28bd67fd
pretty cool
This is my U# Profiler, I sent it in here about a year ago, but I finally got around to making it support player objects, improving performance of it, and generally just being a little nicer to setup
Oooh. Is there a test world?
touristenfahrten plus. I recommend being in VR for the motorcycles. Beware there are no stability assists and riding experience is recommended
music is REALLY LOUD when first joining. if you can make it easier for people to find the way to turn down just the music easier that would be nice.
noted will add guest ipad
short video recording and sync- running it on player objects in this case; kinda fun, but a lot of data
I was in that world last night. Im curious with the audio and how it blends together so nicely
which part of it are you curious about? How the engine sounds? The spatialisation of the sounds?
@hazy trout idk, like im not an audio guy, but the whole world and engine sounds felt so layered and "correct" if that makes sense. I don't have the terminology to express what I liked about it.
That is probably due to the singular engine sound clip matching the vehicle's RPM. I then do some realtime raycasts to the surroundings to adjust the reverb parameters of the audio source. For observers they do additional calculations such as occlusion from buildings and reverb adjustment by distance
here is a direct example from a mentor showcasing some of these audio effects https://fixvx.com/niko_stenberg/status/1072841877525794816
I tried some tricks to get some sense of space into the soundscape. The car as a whole has mixer effects applied based on distance and occlusion. Individual sounds can have directional attenuation. What do you think? 🗣️👂
#gamedev #indiedev #unity3d #vehicular #audio https://t.co/UjnRT1pTph
Little update from my project, i lost a little flare but finally decided to work on it again. i added dynamic loading and a FULLY working door system that i can add on to setup entity spawning. also i decided to use a "pathfinding" that roblox games like doors would use. in the future im most likely going to use Unity's built-in AI Navigation system w additional pathfinding code on top of it.
Ah neat stuff
(not udon specifically but best channel i found to post this)
Just recently released Open NID: https://github.com/BobyStar/OpenNID
An open source utility tool to easily manage Network IDs for VRChat worlds. Fixes the whole issue of dealing with IVRCSDKPreprocessSceneCallback failing because of a scene change creating an ID conflict.
https://bsky.app/profile/bobystar.craz.co/post/3lsplpnl7pc2n
Just finished Open NID's release. A new open source tool to help get past that pesky "IVRCSDKPreprocessSceneCallback" error from the VRChat Worlds SDK.
Can automatically fix Network ID Conflicts upon Build! And manage your Network IDs in a Scene.
github.com/BobyStar/Ope...
ooh
nice
Hey - I just used this, so I wanted to say thanks, it works great 🙂
sorry if im s little late but u should add some screenspace shader that adds a little screen shake effect to mimmic recoil ive seen people do that on avatar weapons
So, coming from #udon-showoff message I decided to try and implement a full audio codec (QOA) for audio compression. The project has died since I found MIDI at high data rates to make the game too unstable for me to want to keep going on with it, but I have since posted the code in its current state to https://gist.github.com/TapGhoul/bc7f0d9095aebbc2ef6f766ee1a56586
The compression ratio is about 4.9:1, dropping the filesize down to about ~20.2% of the original size in raw PCM. In other words, 7.8MB down to 1.6MB.
The audio is encoded at 25000 Hz mono, but it can easily handle much higher than that and will retain quality - the lower quality was based on the intent to do MIDI + netcode, but alas.
Every day the drumming world grows stronger lol. Been learning more about shaders and optimisations. Keep learnin frens 💪
I wonder if there's a world that takes input from a MIDI drum kit. Even if I know it'll be laggy.
... and that my drum kit and gaming computer are not in the same room.
oh hey I really like the effects you have there
i know there's a MIDI keyboard world. Drums is possible but I don't have a MIDI device locally to test with. Not sure on input delay, currently users in my world use midi -> keyboard for support
Yeah I know the keyboard worlds work, I keep meaning to drag my keyboard into my office and test it for real
Can any1 tell me how to compile Udon...or help me with compilation errors?
feel free to post errors in #udon-general
1:1 recreation of Minecraft Beta 1.7.3's terrain generation with cubic chunks (WIP, ignore the lack of features and broken biome spread, and mirrored terrain)
Every seed including classic ones like Glacier, gargamel, etc generate exactly the same including the distance effects, there are some bugs right now but that's just because i'm moving stuff around optimizing it
at first I was like "why is there a random Minecraft screenshot in the VRChat Discord..."
very impressive work
The only thing that's not gonna be 1:1 is the world size of course since you can only store like, 100kb of save data iirc
So it's probably gonna be like the console edition old worlds
Or just show a screen with a top-down view of the world before you generate it so you can choose which area you want to use
The player movement isn't 1:1 but there's not much I can do about that afaik
You can
Is the save-data consideration because you're wanting to allow live-editing of the terrain as well?
cool cool
for the save data i'll just save the modified blocks and regenerate the terrain
Do you mind if I dm you? I have a proposition.
yeah sure
👀
Working on the rain effects for Continental Drive, my upcoming #VRChat world. Special thanks to @MochieShaders for the rain shader effects! Still WIP.
**❤️ 1 👁️ 9 **
Behold my trap, VRC player sees a shiny object and cant resist touching it. Leading to them existing nearly a million meters to the side and a million meters up.
(jk, this will not be something you find on accident)
https://streamable.com/3eoqqv
do u need minecraft steve type avatars for this or r we able to have our own vrchat avis?
There’s no way to check if the avatar someone is using is a specific type, like a Minecraft character
ah, ok thx
I once saw a tool that estimates what avatar you're in based off armature proportions. This only works for known models but it is something
For worlds
Sure but it can’t do what he was asking for lol, only could like restrict world features if you don’t match the proportions of some pre-scanned avatars 🥴
Could definitely do this.
Incidentally I've been trying to remember/find that tool, but haven't had any luck.
Sounds like it's jetdog's Avatar Hash?
That's the one, thanks! For those looking: #udon-showoff message
Floating point errors, weaponized. I might show this to some of my game dev students ahaha.
I would be honored
ive done that for a roleplay event, was really fun indeed
Added Mirrors and another look at the GPS. 👀 Follow for more updates! Still WIP. #Vrchat
**❤️ 1 👁️ 4 **
DDR style arcade machine test, using the chair to play using WASD but there are colliders for the foot pads for full body, currently using a step map generator that uses the beat of an audio file to generate the arrow pattern, each song has a variation of difficulty for testing and the player can set difficulty which just skips a number of step based on the lower difficulty
And 2 players should work, just need to fully test that
Was informed that Webm doesn't work with mobile so here is a compressed mp4
(Apple moment)
@prisma tinsel time to get your fbt working
no job
get max300 on there
Engine stalling feature with delayed manual ignition. The ignition input is also bound to the throttle for convenience.
My public worlds currently have instant engine ignition via throttle if it stalls, and I want it to be impactful to gameplay in the future by having the engine stall be more detrimental to time based activities
EditorXR...
VRC SDK...
Yeah, clearly ClientSim does not like it but it works.
Basically testing stuff out in Editor.
i'm guessing with the unity OpenXR plugin?
oh. maybe not since it doesn't look like hand controllers are being used.
EditorXR
Oh... have not seen this in a long while!
aye... it's been long abandoned but it kinda... works for some reason. (lol)
i mean just enabling the XR stuff you're required to have with the VRC SDK already gives you "a" view. you have to add a component to the camera for it to track with the hmd tho.
🤔
I wonder; I might look into it
I've been doing some experimentation with... ClientSim... for sometime now... Been sitting on something for a while, should prob just showcase it at some point.
It's called a Tracked Pose Driver. if you want something really, really basic just check the Initialize XR on Startup in the Project Settings > XR Plug-in Management and add a Tracked Pose Driver to the ClientSim Head object in Playmode.
Ooooo
I'll give it a try later!
Rewrote the anti wheeling throttle assist. It is still dangerous to change the lean angle while demanding full throttle
You can now use the truck computer to search and pick up cargo contracts! 🚚 Still WIP.
**❤️ 1 👁️ 2 **
https://vrch.at/qeacw6fq made a drawing world with better pens perfect for tic tac toe
I hope this is useful for anyone: https://jordanro2.github.io/udonsharp-api-explorer/
I mean there is already the exposure tree but I feel it was a problem to check for it
Interactive documentation for UdonSharp VRChat development
no way it's maxwell the cat
Got my Snake game fully working now!! and Here is Brick Breaker too
That's cool! Are you storing each property as a separate array in the udonbehaviour itself? Or is it using data dictionaries?
separate arrays, figured it would be simpler
i added debug info too, so you can see the internal arrays
i haven't used data dictionaries yet
that's a good idea!
data dictionaries aren't serializable so I'm not sure if they'd be at all useful for inspector stuff
Although now that I'm thinking of it, you could behind the scenes serialize it to a json string, and then on scene start deserialize it back into a data dictionary 🤔
wouldn't work with references, however
Regular dictionaries are seralizables on udon 1.2 just saying
And class “structs” also can be using [System.Serializable]
Makes very clean and easy to set up inspectors
Really? I'll need to look into this
If you wanna see an example i can provide you one… in a week when i get my new pc haha
lol
Remind me if you didnt find how to by then
It was so easy, didnt even need custom inspector for it
Made an ability list with ints, strings and all
Been a few months tho
oh you're talking about Merlin's U#
Yep
too bad a lot of the stuff i make these nice inspectors for are code i'm going to make a prefab or share with others :(
i don't get to try udon 1.2
udon 1.2?
it's very nice having explicit types
i had some issues with performance using it recently though, like i had list where i iterated a few elements every frame. it became very expensive to interact with the list itself
i'd still use it for things i don't do often though
i haven't tried the List/Dictionary replacements yet
the other useful thing is data structures, you can do like new SomeDataClass() and hold data structures in a collection, rather than storing things in sequential datatokens within a datalist within a datadictionary which requires like a lot of indirect accessing because of datatokens
(so things end up being less verbose and more explicitly typed, which i find less error-prone)
oh yeah, that's the main thing I use it for
I imagine that U# to Soba conversion is going to be harder if you're using Merlin's U# unless Merlin is able to make their own conversion stuff.
not sure why it would be. afaik Soba Programs (based on the Dev Posts) will be using C# sources and should be about as open as U# 1.2b, if not more. If anything it's probably more prepared for Soba than base VRChat provided U# 1.0
The roadmap does mention migration tools as a specific thing that needs to have focused work put into it, which implies the process won't be that simple. Maybe that's more specifically a UGraph thing?
maybe, tho i imagine the "difficult" part of the migration is replacing all scene references and prefab references (if they are going that route)
otherwise i imagine it's just changing the usings and class inheritance (and also UdonSharp Assembly References if that's being used)
what i feel is that i don't think there is much of a difference between the two version of UdonSharp in comparison to a hypothetical Soba Program migration
they both have C# source files which will likely be the main thing migrated
Oh yah... U# prefabs are very janky....
Tbh id imagine merlin would patch this
He’s been very active at patching new issues that come up and this one would be significant
i just want to see my parse log file menu option be implemented in the VRChat U#
it's in Merlin's U#
it's fairly simple and just lets you give the UdonSharp console analyzer a log file to nab exceptions from like if they were executed in clientsim
Are you talking about the thing that raises an exception in the unity console if you have it open while a running vrc client gets a udon crash?
If thats it, then youre right it is very useful when witnessing a bug firsthand in an instance
exactly
Yeah
tho it's so you can use it with any log file, not just from your client
Sensical
so you don't have to read through someone's logs manually for an exception
tho obv it's only as useful as when people have Udon Debug logging enabled specifcally
otherwise it's a generic exception message which is enough for getting an idea on what broke
This isn't very useful but it is an udon showoff.
Context: I teleported myself 999999 m away in the x y and z cords with a little easter egg i made. I discovered clientsim will crash at this distance and the menu is no longer functional. This was only in desktop though i still need to try it in vr. Ill test the true limits eventually.
https://youtu.be/SXTG5oKesKI
made my star too strong just casualy yoinking my spacecraft out of all orbits XD
Definitely needs some textures and i dont even want to think about proper lighting yet. But here is my World so far, each of these is a randomly generated room.
now that we have light volumes, you can probably get some decent dynamic lighting with point light volumes
I’ll do some research.
On an unrelated note, if I’m able to move around, light probe groups at runtime I could make some very cursed zones where the players are lit horrifically incorrectly
nope, moving lightprobes after they’re baked does nothing
they have an API with methods to move them during runtime, but i believe they are not exposed to udon
you can move VRCLightVolumes though, as long as Dynamic is enabled on it
Hmmm interesting
First world ive been making these past months for our dnd group, everything is dynamic, seamless, realtime lights, with a bunch of simulations https://cdn.discordapp.com/attachments/412296063781830666/1412186966744760442/output.mp4?ex=68b7611a&is=68b60f9a&hm=fb46767e9f45572501ee328bbd9d775d1a997a7128038de2ddea161ef41d53ce&
I was testing an 80 kg rider made of rigidbodies attached to the vehicle and the body moves left and right for leaning. I don't think VRC's handheld camera had this use case in mind on the bottom right of the video
Was able to pull off somewhat decent thermal scope by using modified UniSight shader and cameras (unfortunately). Since it's integrated to my WIP gun system, thermal scope can change color modes by clicking on it.
(The UI in the scope is fake
)
they're a lot nicer than datalists and datadictionaries, but do have some annoying downfalls
✨ PROGRESS ✨
Still some issues that need fixing.
Kinda scared about making a full fledged system of manager scripts.
It's eventually going to become an extraction shooter with persistence for the inventory.
https://x.com/gokonic4/status/1963022531176300615?t=U2kazIcNrZyyykPcJiOVmg&s=19 making a fully functional dragon ball world, just some scripts i created including a newly made flying script mimicking a dragonball game
So many tags @_@ this is why I could never use twitter
Flight & movement look really smooth and fluid!
😂I didnt know which tags to use so I just asked chat gpt
like what downfalls?
it's lacking a couple of things like inserting ranges
can't really remember the others of the top of my head
Still some issues, but the combat system is progressing further
only for Android: Meta Quest / Pico4
I will never understand why this dude posts pictures of the world name instead of direct world links
3rd time this year 😂
why can't you access it from PC
Advertizing your world this way isnt gonna be very effective
I don't think it's correct behavior to challenge, without reason, someone who invites you to visit a world.
@faint charm
I think he's just saying you should use a link to make it easier...
Working on a procedurally generated waterslide world using shaders. Udon for the physics, but everything is rendered as you go.
backrooms af
Wow! Im interested in the technical details if you wanna talk about it
I’m still working on the udon side of things but the general idea is to use a simplified version of the slide signed distance function to generate a normal vector underneath the raft/tube and have it more or less track the inside of the slide, applying a bit of gravity and forward motion. The SDF is just a hollow torus with the top cut off, and since the function is defined everywhere, not just along the surface, I believe I should be able to make the motion very smooth and continuous. Much simpler and realistic than using a mesh collider I think.
As far as the player control, I would like them to be able to shift weight side to side to affect how they take the corners. Maybe even gamify it into a race, like bobsled.
The layout is based on the Truchet algorithm, and is on a square grid right now, but I may try hexagonal as well. It may be a bit more relaxed.
this already looks so fun
so much left to do but Can almost make a croissant I've been at this none stop
I have moving nice looking water now, and a vector to show the direction and speed of flow. Added a bit of color for fun.
No way the infinite ikea slides
Trying some new coloring and water with better refraction. Not physically accurate yet, but close. At least up to the first bounce.
Check out my new Udon world! https://vrchat.com/home/world/wrld_7ecbc7b6-b36d-48af-b9ab-d9df1fe1561b/info
I've been working on a little Liquid Mixing system! There's a few quirks I still gotta work out with it, but I'm hoping to get it finished very soon. maybe I could make a fun potion mixing world for halloween Or just another bar world for ppl to mess around in lol
this looks amazing! Hopefully not too vomit-inducing either 🙂
I got the basic physics working on my slide. No friction or control over anything though, just gravity, so it's wild. Please ignore the buggy water.
haha, much flailing
I finally just published my fully functional 'port' of a classic arcade racer, Daytona USA. No original source code used, just a ground-up recreation by studying the original very closely. Enjoy!
https://vrchat.com/home/world/wrld_0ccde669-6993-448e-b460-b47f6f0abbd9/info
Sick
that's so stupid good.
The third person view of your world made me able to enjoy a vr racing game for once without getting sick. I love your world so much ❤️
Oh, you're welcome! ❤️
i've been working on a runtime editor style thing recently
the ui is very minimal and hard to use without knowing how it works a bit, but the system actually does the thing it describes
it's the result of a lot of my accumulated learning to actually make it in a sane way that can be expanded on. the key concepts would probably be serialization, netcode and persistence
everything defined is synced and persisted, all players can contribute to editing (players can select and manipulate the same object at the same time if they felt like it)
some of the naming i used is similar to resonite, as the concept is very similar
Testing out some fun effects for my Liquid Mixing system
boneworks mechanics in vrchat https://youtu.be/ieCP6P214HQ
This is an attempt at recreating boneworks style physics and mechanics, in VRChat, so it has the best of both.
This is a work-in-progress VRChat world and system, that I will probably share in the future, for others to use in their worlds.
My discord server: https://discord.gg/8UMuEdDYEs
My Linktree : https://linktr.ee/aubarino
This is very ex...
That's so cool!
Is there somewhere we can follow along with development and try this out for ourselves/contribute?
if you add me I could add you to a group chat, that's pretty much it rn, not many people care about it anyway, but I'm slowly improving it
Got the lighting system fully working and 1:1
Still working on moving it to a fake compute fragment shader
aight here me out...that ^ as a tabletop sized area in a world that you can terraform with friends and maybe roleplay tabletop games like warhammer 🤔
I’ve made a hexagonal level generator before but couldn’t figure out how to program the game I wanted around it 😔
not much but it's honest work. a mix of destructible cars and trying to make it run without the headset going brrr
After more than 2 years, I was able to finish this Action RPG World!
I hope to reuse this framework to make a PvE focused game at some point :3
https://youtu.be/QtGOjDcGSjo
Welcome to the Battle Squareǃ An Action RPG PvP Game where you fight friends in this fast-paced combat world with lots of Classes and Game modesǃ Unlock over 70 cosmetics‚ achievements‚ and rackup stats․
YOU CAN PLAY THIS FOR FREE IN VRCHAT! RIGHT NOW!
https://vrchat.com/home/world/wrld_8c4f43da-c0c0-41a7-baa3-bedc30e38048/info
What ...
This is insane, great stuff!!
Thank you so much ^^
I made a little game based on Boomerang Fu to play with my younger siblings and decided to make open source since it was such a pain to develop. I published it yesterday so it is currently still in labs but here's the source: https://github.com/IdreesInc/Shuriken-Showdown
And here's the world: https://vrchat.com/home/world/wrld_b4e39cd7-9a79-4b8e-9669-689c8bb3535d
Hopefully the networking logic in particular helps someone else since that was the most challenging part!
A VR party battler game inspired by Boomerang Fu. Contribute to IdreesInc/Shuriken-Showdown development by creating an account on GitHub.
took ages to get working this attempt to import Street View data into vrchat, but it's gotten almost no response.... do folks just not like Street View stuff? (technically Mapillary rather than Google Street View but same idea...) https://vrchat.com/home/world/wrld_6884d0af-b3f4-4476-8533-991e29032655/info
It's definitely cool from a creator perspective (I'm curious how you managed to get the data into VRChat), but I just don't see this particular application of it being fun.
A ghost replay system that records at 20hz for a 19km road layout, and a non-linear spline based waypoint system for getting the time difference between the current and past laps. This way drivers can race against their previous or best lap for the car.
reminds me of tf2 ghostrunners
4/5 no pre-wrapping causes whiplash
oh i didn’t even think about that actually, i just saw it working and it was cool
Can you elaborate on this in #udon-general
i "fixed" this by just typing out the new lines in my dialogue. not sure how else to do it
aint no way, kinix you finally released it! lets gooooo
Thank you deblob 💙
Im fascinated by that concept. Its making me wonder if you could do a gaussian splat of some city with enough detail to make a reconstruction of it that people can drive around in. All depends on the resolution of those images
interestingly, mapillary actually already provides point clouds (which isn't quite as good as a gaussian splat, but it's a starting point)..... I didn't use them for this because it seemed like a lot of extra trouble, but I have been curious to see how decent they look in VR
(actually now I forget if it's point clouds or like a depth map, but it's something like that)
Labs works in very weird ways. I think even if you have the best world in the game you'll still struggle to get it out of labs without manually boosting it.
As long as a world is in labs it'll get almost zero visibility
Yeah, you need to really catch people's attention with the thumbnail / title before it falls too far from the top of the labs tab.
Launching around the 24 hour player count peak could help too
something that i've tried too is if it gets stuck in community labs for a long time (like more than a month) i unpublish, change the thumbnail a bit and publish to community labs again so it gets a new start
I've also heard that having friends hang out in your world can help a lot
Time spent in world might matter as much if not more than visits
i think that helps primarily because you are encouraging some activity for public instances by being there yourself
i've noticed i could go to one of my worlds and if i spend enough time there it's almost bound to have some random player pop up, especially if it was recently published/updated
helps more with friends
there is also just the self advertising you could do by going into a public instance of a more relaxed public world and asking players to check your new world out
helps more if the world is similar to another existing world that players are active in.
Not much but it's honest work. WIP Working on a dynamic animation system & automated 2D card game (ignore the card textures, they're just temporary while testing).
fully 3D so it'll support Desktop & VR players*
I see that * for VR. let me know if this helps: https://bobystarvrc.booth.pm/items/5007241
simple thing to have on the side that lets you get approximately where the VRC ui pointer is in Udon
Oooo that's fancy
Does it work with native UI elements?
define native UI
as in anything on a Canvas
looks like it does from the video 😄
it should work for anything that is a Canvas and has a VRC Ui Shape component (should be same requirements as VRChat's UI interactions)
but you can interface with it in Udon to get a Ray for raycasting your own elements
like what i'm assuming you are doing for Desktop
Yeee pretty much. I've got base class for generating the ray and handling the mouse pointer, etc. Then two classes one for VR & one for Desktop to just define the ray origin and directions for it
Want the Desktop version to be fullscreen using another camera so it's like a normal game outside of vrchat
but ty ty for the suggestion, i'll give it a look over ❤️
i re-created the mechanics of a silly mobile game by myself!
it was fun to solve the little challenges it presented.. like when it spawned 5000 balls in one second and crashed unity instantly
I’ve adored games like these, you have at least one fan 🙏
i tried playing it on my phone a couple days ago only to legitimately have an ad every 30sec, so i decided "fine, i'll do it myself"
We need more mobile games on vrc anyway 😤 some of them are fantastic pastimes, especially with a few people to hang and chat with
Even better if its synced so people can watch each other play
little progress update, i implemented multiple levels and better spawner control
Finally finished my whole Liquid Mixing and Effects system!
Nice! Will this be available anywhere?
There's 2 worlds on VRC that use the system currently:
https://vrchat.com/home/launch?worldId=wrld_b2592fa6-b39f-4c38-8997-b750ee12ab08
https://vrchat.com/home/launch?worldId=wrld_6ccc5e40-0af7-43c5-937a-8c5d1ab7c4a2
And the system itself is for sale for other world creators on my Gumroad (link to that is in my Linktree on my bio, idk if I'm allowed to send it here
)
Step into a Witch's Tower filled with mysterious brews․ Mix‚ drink‚ and discover the secrets behind every potionǃ Layer on top of each other to create dizziness‚ whispers‚ hallucinations‚ and moreǃ U…
made a little debug ui for my world (uses my custom api)
it's a little slow rn
What is it for? Remote world/inter-world management?
Yeah kind of. I have a central dashboard that I can easily update settings per-world, or globally across all worlds using the system, and it will update live in any open instances.
Here's the config that's being pulled if you're interested: https://api.cosmos.srckat.me/api/collections/worlds/records/wrld_114e7e0o4k4yf63y
I had no idea you could communicate between worlds. I thought I would have to try to update some common database, then download that common state from individual worlds (and maybe that is what you're doing). I hadn't considered what's possible with something like inter-world API.
I haven't really gotten close enough to player data / persistent data to try anything like that. Could be cool for special, global "player did a thing!" events.
afaik there is no way to get direct communication between worlds, but a custom server in the middle can serve as a way for communicating between worlds (or really anything at that point in general). It's how those cross-instance worlds work.
Basically, all my worlds will pull from one global API, and I have implemented (still yet to improve) the ability to change settings that apply for all worlds, just one world, or a specific instance of a specific world. Here's an example:
All from my dashboard, eliminating the need for rebuilds to change things that would be changed a lot.
That is really smart. I haven't delved at all into managing worlds post-upload. I'd be really worried about losing player data somehow, so something like this for minor data-level updates is brilliant.
Well basically, I am just polling my own API every ten seconds.
db api go crazy
The thing is, I don't know if many people will recognize how much goes into this. As far as I know, something on this scale has never been done before.
If only the devs saw these crazy things I do
For the average user, unlikely to notice since they're not really familiar with that stuff. I had my own per-user settings persistence system in the avatar search world back in 2023 long before proper persistence was a thing, and almost no one noticed lol.
But that's what udon-showoff is for. Very cool idea, and well done 😎
I am curious though, how do you handle the fallback case of if the user doesn't have untrusted urls turned on? Just run with the default values in the world? Or do you have a less frequently updated static copy of the data on a trusted host like GitHub?
It just goes off default values. I'm using a modified version of Udon, so I can make non-behavior classes, and I have made a helper class that allows me to specify a config key, and a default value.
For any of the text, it's just filled with read text that says "PLEASE ENABLE UNTRUSTED URLS". It auto refreshes the config every 10 seconds, so that they don't have to rejoin.
The GitHub idea is actually smart, but my system just wasn't designed for it.
I also have a debug console in the game, so I can easily see where it fails.
I imagine that's how that Tower of Babel world worked
First few times I ran into pre-Persistence Update persistence I noticed it, but I was either confused and/or thought it was my imagination, lol
Had a project I've been working on for too long, and finally got it rolling, the Hero Script System https://youtu.be/Vor0wK0GUbc
Welcome to the Pre-Release for the Hero Script System! I've been developing this a long time in order to make a tool to pave the way for my future projects, as well as give people the ability to use them in their own worlds! Come check out what it has to offer~!
~Check it out on booth: https://heroesnfools.booth.pm/items/7631255
~Any feedback y...
vod shows bunch of what's in it, but its a modular based system that allows sloting in/out many different functions, as well as adding a configuration based scripting system to make it easier to customize. I hope to get it functionally capable of running somthing like a Dark RP or GTA RP kinda world
rn main bits i have are items, ways to hook into various vrchat functions, persistance along with other ways of handling data, along with various values that can be stored in players, items, or in world with complete sync
i've been working on custom networking lately, this resembles working with something more akin to client-server
it's pretty far into networking territory and i don't think i did it justice with this long boring video, but maybe people who like networking will find it interesting anyway
pretty neat!
I've created systems that instantiate the non-networked elements (for example the renderer) of networked object, but this goes quite a bit beyond that
That’s really neat!
So the networking is done via events, right?
If so, I've been thinking about it and I have a couple of questions:
How does it handled people joining the world in a staggered manner? Does it restart the sync for everyone? Does it split up the rate among everyone? Does it put people into a queue?
And I presume you have your own system for choosing the host that is separate from VRC Master system, right? If I understand the docs for Master correct, event-passed networking can desync if you rely on master.
there's a single event that acts as a channel
in my handling, joiners are added to a queue and provided info directed at them, one at a time
right now i determine the host by first joiner (master), but this cannot change, it stops working if the host leaves (by design)
nod nods
that is really awesome, heck i can’t even sync basic stuff sometimes and you got custom networking
i wish networked instantiation was simple, if it was then i could make my current project actually succeed
It can be simple! Unless I’m missing something crazy somewhere 🤔
I just started writing generalized scripts out of my current instantiable-item system yesterday… I’ve got one more script to set up for that today then I can send it over so you can understand how/why it works? 👀
the premise of network instantiation isn't too difficult, with known prefab types and a central source of identifiers, you can refer to objects on anyone
i.e. "hey everyone, spawn this object with this prefab type and give it this identifier." now everyone has an object they can refer to as the same instance
the difficulty (in my opinion) comes from late join handling and modularity
the systems i've seen people use are generally rigid/specific to their object types, which can be hard to extend/maintain. my handling resembles working with something more like a network library, in that i can implement arbitrary network behaviours without any specific handling or knowledge of what they are on the manager level
that's the part i feel requires decent understanding to design
i'd be curious how you handle it btw if you're interested in sharing
Just a suuper simple implementation of your same description, sync the spawning of an item prefab and add to an array then give that item an ID equal to its index on the array, then sync a string on your PlayerData for left or right hand grabs that includes the itemID and its pos/rot offset from your hand bone so others can use that synced string to “attach” that itemID to the hand
Synced string has extra space for pos rot velocity that is re-synced on drop so everyone drops the item and throws it in the exact same direction as the original player for perfect (enough) physics
how many of these synced buffers do you run?
I only sync two different grab/drop variables per player currently, haven’t thought of or tested synced spawning since the original script that’s based off of just spawns all the items during a level generation loop
I don’t like syncing new data every frame, this system avoids that by using the original calculated offset + itemID to position it anywhere the player goes without clogging the network data
yeah using synced offsets is much more efficient for pickups, i believe it has some difficulty with hidden avatars and potential oddities with swapping avis, so i tend to avoid it personally, but it is very efficient
It looks horribly offset when their avi is hidden yes 😂
Here's a chopped-down, sorta merged version of my dev talk posts in my server. If you want to see the full thing, the link is in my bio (kinda hard to fit so much info into one message lol).
My most recent world may just seem like an empty room, but it's actually full of a lot of technical surprises, and challenges.
My goal was to create a configuration system that updates in (almost) realtime, which allows me to change anything in my world from a dashboard without updating.
There are a few challenges with this. Firstly, VRChat has a hard, global limit of one request every 5 seconds. This means that it's impossible to make a truly realtime system, and the room's entire string downloading limit gets backed up with requests when you try to download something elsewhere. This is also very performance heavy, not only on the game, but also the server, due to the way in which it was designed. The instance owner downloads 11kb of data every 10 seconds from my API (which runs on a slow laptop), and then syncs it to every other player in the instance, causing major lag spikes. I tried to reduce this by only pulling everything when changes are detected, and that would work, if it actually detected changes in relations (my database uses a lot of those). The more stuff I added to the config blob that it downloaded, the worse the latency got. Last time I checked, there was around 1 and a half seconds of latency, which is absolutely horrible.
I wanted to implement user linking, but designing a system for that would cause a whole set of issues on its own. I then discovered this system called "VRCLinking", which supports adding custom JSON data into the config that it downloads. I asked the dev about rate limits, and he actually offered to lower down my cache time, so that refreshes were faster. I haven't tested this in an actual world with numerous people in it yet, as I will have to rewrite my framework to support it, but in theory, it should allow me to keep everything in sync with a maximum of ~15 seconds wait time while everything syncs to the world.
This will basically allow me to not only do the cool stuff that I was already doing with the world, but also control certain aspects of the world with Discord roles!
The existing API system (based on PocketBase, an open source all-in-one database and API solution) was lacking many features required for the realtime system that I was designing, so a lot of (potentially inefficient) workarounds were used to make it possible, which included clever rerouting, custom raw JSON modification, and an ungodly amount of huge custom database queries. This caused the system to sometimes get clogged up with requests, and it was hard to add new features without getting a headache.
The recent updates have introduced a new "sync server" that allows me to integrate my existing system into VRCLinking for easy account linking. The first version of this was done by hammering both my database, and VRCLinking's API with requests every 5 seconds, resulting in absurd bandwidth usage. The second version still spammed my database with requests, but introduced a hashing system to reduce the requests to VRCLinking's API by only posting data when it was changed. The third version (which is live now) subscribes to a "Realtime SSE" channel on my database, so the sync server gets notified when data changes, without having to constantly request it. This is still a bit unstable, as my server likes to kick random sessions off for some reason (still debugging the cause of that), so data may not be sent if it was changed in the process of a forced reconnect.
.
There was maintenance that just happened with my server which was due to me adding custom JavaScript functions to my API, which automatically sort the data directly, reducing the need for a large amount of database queries at once. Instead of querying the database for each relation (or link to another table), it queries it all in one go, then filters out the unused or old values that don't need to show in the final result.
All of this increases the efficiency of the system, as less requests are made overall, and less bandwidth is used while processing those requests, due to them being smaller.
Here are some random screenshots of my progress in no specific order (I'll send more later when I find them):
If you read all my yap, thank you lol.
While it's still not realtime, any reason not to use image requests in parallel to reduce the time between requests from 5 -> 2.5 seconds? The max size is smaller (16 MB of data per request if using raw pixel values), but otherwise it's useful for speeding up both sending and receiving data. Even easier now that we're getting the ability to distinguish between the request types in the main release soon.
For VRCanvas, I cut down on bandwidth by generating whole frame snapshots of the data on the server every 5 seconds, alongside a diff frame which only contained offset values relative to the previous frame. Clients only get the whole frame when they join and then once every 5 minutes, or when they place a pixel. Otherwise they just request the diff frame, which is usually just a few hundred bytes. Obviously a bit different with JSON data, but the same principles could apply with just providing data that's changed on one endpoint, and the whole structure on another for joins and resyncs.
I thought the global limit for any kind of HTTP request was 5 seconds, no matter what you request on. But I never actually checked if there is two seperate timers.
Video, image, and string are all on their own cooldowns 🙂
That is strange. But good to know.
i've been adding support for network object parenting. i wasn't sure about adding it at first because it wasn't part of the original plan and i had limited use for it. i decided to make a test case for it that made a bit more sense. on the host this example looks like a trigger enter or exit that sets the parent, it happens to handle the case of objects in a cart pretty well
it does require some specific handling on the interpolation side remotely to swap out the working values upon parent change; when space switches between what is effectively world space and cart space. otherwise it's pretty straightforward
Actually a really cool project. Do you ever plan to make this open for others to use or do you have some use case you're building it all for/wanna share the end goal?
have been working on emulating early 80s LCD games, by porting the mame drivers to udon
i've been feeling restricted under vrc's networking model. there's a lack of true central authority and no network instantiation. pooling and PlayerObjects just don't scale at some point or work for certain things (hard limit and fixed ownership respectively.) i got to the point where i felt i could try making an alternative
i'm considering making a public version eventually, but i'm new to releasing public facing stuff and it's not especially user-friendly as i don't know editor tooling or codegen. it also isn't a great fit for vrc's drop-in, drop-out style. it strictly cannot change host, but maybe some would consider that acceptable for more advanced logic (it may be hard to explain to players though)
there's not a real end goal, i'm currently using it for personal samples to figure out what things are working or what i need to add
All of this should be a whole lot faster now, since I have access to an enterprise-grade VPS (thanks to one of my friends). I'm going to start experimenting with on-the-fly mesh data downloads, as someone told me that it's possible.
Just gotta keep within that 100MB limit
I encountered this a few months ago and ownership management was a nightmare. I thought "maybe everyone who makes a cool world goes through this and I'm just dumb", but transferring entities between players is painful for me. I think it'll still work out, but just when you think you work the bugs out, they come back full force in a real VRC instance.
If you manage to come up with some kind of accessible framework, the barrier to entry for making more engaging worlds would lower dramatically.
i think it's really glossed over in the context of vrc because it's just the norm, but it really does take a lot more effort to make what i'd consider correct networking
i think it adds up a lot across different logic
i was making a mining style thing, you go hit large rocks, ores pop out, rocks respawn eventually
in distributed authority that's not very straightforward to manage
if you want the resulting ores to be synced, they need to be pooled and you need to route through the master anyway to avoid race conditions. this is with the premise of not using player objects simply because they can't be interacted with on other players in a normal way (picking them up wouldn't be easily possible for example)
rock cooldowns have to be synced in some way so anyone can query and see if a rock should be respawned if they're the authority of it
hitting rocks/determining who gets ore from the hits isn't straightforward. if you use the default vrc style way of ownership transfer it's even more convoluted than routing to the master imo
it's so much random complexity across things. and it doesn't really exist in a server scenario
the master can randomly become unresponsive or change out so it's not strictly reliable, but i end up having to use them regardless because it's still better than swapping ownership in a lot of cases. so it's like this worst of both worlds thing where suddenly you have to account for this central figure randomly disappearing at any point
like to present the alternative; in a server-based system with instantiation, it's trivial to determine who the host should allocate mined ores to from incoming events. there's no strict requirement for pooling or hard limitations. it's trivial to run a rock respawn cooldown on the host, with no concept of that needing to be networked, just the resulting fact that the rock is there or not there. like i can actually just consider the logic of the systems, it's not this weird "what if someone randomly has to take over now"
i've had a lot more fun just implementing logic without those issues, it's the most amount of item types i've made in any project i think. though i wouldn't consider it approachable to the average vrc creator that's maybe more familiar with the distributed authority concepts
sorry for the rant lol
no worries, haha. It's nice to have someone who has also suffered this to commiserate with. I feel like after I make this world, I won't make things in Udon anymore and I'll be like an anime character taking off their hidden body weights. Standard Client/Server will feel luxurious.
Your rocks are my fish. I divide the world up into zones, each with a "ZM" who spawns from the zone pool, so not all pool spawns are through World Master (WM). For scalability, fish use a standard prefab then "polymorph" into different species/variants by swapping the mesh, texture, and material at "spawn", so I can get away with ~256 pooled prefabs per zone. I think if I had to do rocks, it would be a zone-level ownership thing, and the ZM would determine who gets the ore based on RPC calls, then spawn a pooled "item" prefab, polymorph to rock, grant ownership to first striker. Maybe naive.
Yeah, world master (or ANY) player just logging off is another obstacle. If a player dares to log in, enjoy your world, and log out, then they have done the forbidden and your world will be punished. We should just incentivize players to never log out, but having an "orphan management" framework (for managing those lost items from logouts) seems to work. Just have to be careful of handing off state and re-initializing it when World Master logs out and everything is yeeted to the new WM.
Yeah, I can't wait to be done with Udon.
that's interesting fish handling/zones. i usually handle differences in prefabs as seeding, though with rocks of a specific type the necessity for variation usually stops after color and localScale
in my rock scenario (since it does require a host in my new logic) i incentivize the host to stick around by providing a tax cut to them on any ore sales that players make
Yeah, haha. That's the fun part. Finding lore friendly ways to maintain network stability. I'm planning to make caught fish rot over time to incentivize players to return to the market. I know if they enter the market, I can transfer their owned entities gracefully before they orphan them with a logoff.
I know I had a lot of difficulty with what seemed like a fairly simple task: the ability for two players with different decks to be able to draw cards that are pickupables that can then be picked up and interacted with by either player.
Think I finally found my solution:
local player determines they need a new generic pickupable card object and requests one from a central authority player (with a backup to resend the request to a new central authority if the previous one leaves)
the central authority finds a generic pickupable card object not in use and not recently handed out and sends that object's id to the requesting player
the requesting player then claims ownership of that card object and sets its networked values to indicate it is in use and also what type of card it is (the card type is then used to instantiate the rest of the card)
some pretty recent testing i've been doing in extrapolation and origin shifting
all of these include 2 clients. in the helicopter portion, the right client is piloting (i don't think it's very apparent)
Making a Sims-Like starting with build-mode. Works and syncs up okay so far. 🙂
Still planning how I should handle roofs.
Dope. Making a flight sim.
My suggestion for the actual assets that will be used for the building should be a few swappable trimsheets (to change wall materials) and everything else ideally would be a modular kit.
I initially made it that way by having a few wall variants.
But, it required too many cached objects.
So, instead I decided to simply have the walls cut up, so I can set whichever one inactive depending on the state variable.
So, for example, if its a window frame, I would set the 'middle part' inactive.
If a door frame, 'middle' and 'lower'.
That's kind of the work around I found.
Outside of that, there will be 'snap points' that I'm going to add so that the player can for example, add a window to a window frame.
That won't be using the same cached structure system as this.
follow-up to this, i added my jetpack type vehicle to test alongside air vehicles
objects (in terms of sync) operate in a global coordinate space while the local perspective is origin shifted as needed
NIce.
We have roofs and ceilings in the system now. 😄
Multi-section tire temperature by storing neighboring indices in the Editor and then looking them up at runtime to transfer heat to neighboring sections
dm? interested in this :x
Did you have a question or something?
yes how you are setting this up I might be able to help~
i'd pref speaking in dm though I rarely check servers.
the silly cube
I love it :3
trying larger scale sync sorta. i tried making a write-up because i think it's cool
https://github.com/Occala/netcode.notes/blob/main/NetworkedConveyorOres/README.md
What a madman
After not finding anything online, I've made a pretty simple spectating system for VRChat worlds (also allows you to give the system your own defined camera tracking behavior and apply different tracking methods on a per-player basis) https://github.com/Vincil-VR/VUSharp-Spectate-System
Super cool are you gonna turn it into a katamari damicy like word?
just thought i'd share another cool custom inspector i made, cause i find making a bunch of automated stuff with buttons to be really cool (also, the colors can be changed dynamically with my theme picker, i just have it red and green for christmas)
Custom inspectors are fun
it’s especially nice learning editor scripting, because of all the automation you can do
like, instead of having to go through and type all that information, or drag in all those different references from the hierarchy, i just tell the code to locate everything for me
and i can even load my sprites from the assets, so i literally don’t have to do anything except type the description and name for my duck cells
Oh right, ducks, now I remember
Got the udon world out~, first time trying moving vehicle scene.
https://vrchat.com/home/launch?worldId=wrld_477de0d9-71ab-4a48-b75c-f991743d9832
been working on an intercom system that plays your voice across multiple speakers throughout the city in real time. This video is of a person with a voice changer using the system in real time
Nice, does it use a station to locally move the announcer player to the closest speaker?
Pretty much yeah
🙏 Please give us more tools related to the player transform so we don't have to do stuff like this.
how do i get a voice effect like this?
In this case, she's using FL studio and creating her own voice changer. I sadly can't tell you exactly what's in the secret sauce but she spends a lot of time perfecting these
She also just sounds like Ellen McClain which makes mimicking the voice a lot easier
I created a course to create a multiplayer game with VRChat and Unity. https://www.yourvrexperience.com/🎮-learn-to-build-a-multiplayer-vr-game-with-unity-vrchat/
🎮 Learn to Build a Multiplayer VR Game with Unity & VRChat This course is a hands-on introduction to programming, multiplayer systems, and game development through the creation of a real multiplayer VR game. Students learn by building, testing, and improving a complete project using Unity and VRChat. Expand the sections below to explore who
A PVP with guns and fakehitboxes would be a good lesson to learn as well
Also audio listeners so we can hook them to audio sources and have proper mics and speakers... (shit didn't realise this was 7 days old, sorry)
That could be done with taking control of player transforms too. The idea is that we could desync them locally versus remote just like people do with stations. But yeah, if we had more direct access to everything that would be even better.
Yeah I know about the transform desync idea, but I think more toys in general is better yeah
Procedurally placed obstacles for my racing game island marathon, everytime you restart the race, the obtacles shuffle around the track, instance owner and other players can see the exact placement using a networked seed
This project has taken a lot longer than I wanted it to 😅 Might be the one to finally push me into U# over graph
I made a image compression script for udon. The source image on the left is 768kb lossless, the right image is only 114kb total~
It takes an input image then:
- Splits it into Y Cr Cb
- Make the Cr / Cb half resolution
- breaks each channel into blocks
- determines a max and min value for each greyscale block
- determines if each pixel in the block is closest to the max, min, or one of the two inbetween values
- packages four pixels at a time into a single byte (2 bits per pixel, based on above) in an array
- Sync each channels bytes, and accompanying min/max byte arrays
- Does it all again in reverse on the client to build an image.
So for my example output, it's using
- 64kb in value data for Y
- 16kb in pallet data for Y
- 16kb color data for each Cb & Cr
- 1kb in pallet data for Cb & Cr
= 114kb total~
You can scale the blocks up and down for each channel which is fun to play with~ Thanks @sharp yacht for pointing me on the right direction here
neat, sounds similar to dxt/s3tc/bc. what's the use case, make world sizes smaller or just for fun? if for world size, how does it compare to crunch or just normal dxt?
looks fantastic! So you could have a camera or a drawing pad and sync the image, right? Something like that?
@steady gazelle / @warm pewter exactly~ I want to use it to sync images across clients in udon, I'm building a world centered around taking and sharing photos~ and I've never been very satisfied with the polaroid "take all photos client-side and hope it looks the same for everyone" solution.
I started closer to BCn compression, where you pick two colors as the pallet, but choosing those colors required really intensive processing, so I ended up doing a more jpeg-y approach~
Even with my compression, a 512x512 image could take 10-20 seconds to sync from client to client... so every bit counts~ I'll have to build some waiting into the game~
it's worse than most image compressions 😅 but you can't move in-vrchat generated textures from client to client~ and straight color arrays are massive, so I had to make up my own way~
In my experience polaroids aren’t client side only- I see on polaroids what the other player took, not what I would see in my end? 🤔 unless I misunderstood phrasing
Usually yeah, they're what you see, just taken from another player's pov, but that's not always what the other person sees especially in busy scenes where syncing isn't exact. I think this approach can enable exactly what the other sees similar to prints. It might be handy to see what they see especially on a different platform
Oh weird, didn’t know it had trouble in heavy instances
I mean. Things in motion aren't synced exactly. Only at rest are they the same for everyone eventually
The Polaroid themselves are taken locally the only synced part is the cameras position and the event that tells you to locally take the photo. It doesn't send the photo to other players which is why you commonly see default robots and diamonds on polaroids on your end because on your end you didn't have their Avi shown so that's what the camera saw
And Im pretty sure they're talking about the in world cameras not the vrchat plus one
Except… I don’t?
I see other people’s views when they show me polaroids
I have everyone disabled 24/7, polaroids show me what THEY saw when I get them
I’m very confused about all this because I swear I see their perspective, not mine
guess you'll just have to do some science to find out ❤️
Their talking about the in world camera prefab that make poilroids not the vrchat plus ones
In graph??. Impressive
Ive made something similar to this, but very barebones and in sharp
well done
How's the time performance of the compression and decompression for images of varying sizes?
Like his long it takes the program? Not great! But not unbearable.
All my tests have been 512x512 since that's the max I'll use for my game.
In desktop mode my computer hangs for a second or two on encode and then again on decode. It might be a little worse in VR
Certain jobs here could probably be good fits for some kind of compute shader, but I'm ok taking the L for now and having people crash out a little
Pretty jank, but hopefully gives people ideas of how to exploit all U# scripts inheriting from UdonSharpBehaviour https://github.com/Vincil-VR/VUSharp-Reference-Handler
Button Masher Race game, testable in my Barcade and Test world for those who want to try it out for themselves or vs your friends
Test World: https://vrchat.com/home/launch?worldId=wrld_0204bed8-0a6e-4f26-bfcb-4d5b9cdc3023
Barcade: https://vrchat.com/home/launch?worldId=wrld_01463d85-1a2e-4d72-8ff8-359e28bd67fd
cute
woah, that's super cool!
what's the performance on this like?
Thank you! Performance like what? 🙂
like, how fast is the encoding/decoding?
It crashes the vrchat client for like 1-2 seconds when the user is encoding 😅 decoding is never more than a second
that's for 512x512 which is the most I would want to send over the network anyways ❤️
just wondering if you can divide it to run in batches, and run each batch in the next frame or a predetermined delta time, so it wont freeze
that would be really smart!
yeah like just swap out every 'sendcustomevent' for a 'send delayed frames 2' or something
Arcade Shooter /Light Gun simulation works
I believe VRRefAssist does something similar
VRRefAssist is editor time. Mine is runtime. Also my thing has support for player objects
aaah i see! very nice
what would be the benefits of doing it by runtime?
aside from playerobjects
I made a fully custom piano networking with batching and time syncing
Everything you hear went through the VRChat network
The player with the sound (right) is not the one playing (left)
Apologies for the bad playing my hands were sore
I'm planning to add a 100% accurate mode which buffers the audio by 1 second to guarantee time accuracy of every input, at the cost of more network usage... And 1 second latency
does it limit polyphony? the old piano prefab would overload the sound buffer with too many voices. i hear that it has velocity sensitivity, can it also play staccato?
It has a polyphony of 24 by default, but it's extremely easy to change the scripts adapt automatically to how many voices you put in the prefab (Maximum is 32, VRChat limitation)
Also yes it can play stoccato or very precise timings
Prefabs instantiated at runtime will be able to access these references
I was finally able to get a set up to create a "database" to be able to reference at any point during run time. This will essentially allow me to pull data about any monster/card type and return all the respective data for them. This just shows the name and the associated ID with it. Research points would be tied directly into playing to unlock more cards and to progress for single player runs with permanent upgrades
When I was experimenting with a card game database, I made an editor-side system that used scriptable objects to generate a persistent database which would give each card a UID, make a link between that UID and its prefab, and then update the database prefab that was used in world at runtime
made a "physically" clickable button
I think I have something similar to this. Since I have a default game object with an Init() method for all of its stats. I instantiate that initial one, then init them with the respective stats I want, then store those objects in an array by their respective ID numbers to pull from
Well to clarify, the goal of the external database was to support VRC Persistence. That is, no matter the changes I made in my scene and project, the UIDs saved to a player's Persistence Data would always point to the same cards.
The system is also designed in a way where to add new cards to the external database I just need to click a button in my editor, never needing to hardcode stuff in my scripts.
is that done with the new physbones/contacts for worlds?
you could do that, sure
I see! I have persistence for like the player inventory/deck, but the real main purpose of my database is to serve as a sort of "base" for the respective monster/card to reference with stats associated with the monster. Same goes for towers and the supporter cards (since some can be used on both teams, but will do different effects)
So my goal will be to create, lets say an enemy that when it spawns during the game it will be able for reference the ID of the card the player casts, then check the database for the base stats, then create a new GameObject of the respective with all the updated stats during a game
It would be so much easier if I could use a constructor though 😭
I tried physbones first but the physbones collider size is fixed to a circle and hardly matches the shape of the button. It uses contacts instead. Technically you could make your own colliders for this, but using VRC's contacts makes it much easier (and likely more performant)
Please make a mechanical keyboard simulator so we can try out different keys... in vr
Is the set up on all hand/finger contacts? Or just hands
right now it takes all fingers plus feet
Now going to use it in a world project of mine so I can get a feel of how it works in practice and will make updates as needed.
[WIP] I am but a humble shepherd, gaze upon my fluffle.
Experimenting with shaders and ZTest/ZWrite to handle unit UI and highlighting through objects. Also featuring bit of AI Navmesh stuff and a little bunny model I made, using blendshapes so every bunny is unique. No real project for this yet? maybe a pet sim or rts idk lol
Awwwwwww
Made contact clickable UI buttons where the contacts will resize themselves to the size of the UI button
why capsule shaped?
that's the only shape that contact receivers support
that and spheres if you want to count them as a separate thing
this showcases the map loading for the tower defense I am making. essentially it loads from a long array of ints with the associated tile id
I have added a feature for my projectiles to be able to spawn more projectiles. Submunitions, explosion fragments, recursive projectile spawning are now possible.
There are also coefficients that I came up with that tweaks the bias of fragments being spread out horizontally or centrally
So now it makes more sense to hide from artillery! We can see that one of the fragments can still penetrate 3.6mm of rolled steel at 500m
neat
Okay but now make each submunition spawn more submunitions
I can only describe it as pop rocks for the recursive spawning
Ahhh, reminds me of the Helldivers 2 Eruptor, pre-shrapnel nerf 🥲
can't wait for the "shrapnel for every explosion" update
Awesome!
this may be controversial
https://github.com/UzerTekton/vrc-rms
am I misunderstanding or is that just a group instance with extra steps?
the world author is allowed to make and advertise an official group for the world
Am I misunderstanding or does this system automatically and without consent bans users based off a preexisting block list?
automatically with consent
Where is the consent obtained?
at world entrance
Ok, so why even have the "moderators"? Why not just have at the world entrance the rule of "you agree not to be on the ban list to use this world"?
because that would become preemptive
and preemptive is not allowed by guidelines for whatever reason
But this system is preemptive. It is applied with preassigned specifications without choice on the users part outside entering the world.
this system is deterministic but not preemptive, well the rules of any world are prescribed without anyone's choice outside the world and they always have the choice of leaving the instance if they decline (which is their only option for any world)
There is no rules about rules, it can be anything the world author decides as long as it is not "inflammatory" like the guideline describes
If a person makes an instance and then is joined by someone who is on the ban list, will the person get automatically banned without choice of anyone involved because of actions not taken by that user in the instance outside joining the instance?
No, because that person would be instance owner, and instance owner has immunity from the list (also, instance owner also becomes the "built-in" moderator as part of VRChat function)
(and the "moderator" on this system)
I'm talking about the person on the ban list who joins the instance
What action would the banned person have taken to get banned?
They will be instabanned by a moderator, if one is in the instance. If there is no moderator, no action is taken
No, what reason was the banned person banned?
The action would be failing a Vibe Check by moderator
How does your system determin that that person should be banned
By a name list issued to moderators and instructed them to instaban
So the banned is manually performed by the moderator?
No, it is automatic
And is the name list preemptively in the world?
"Preemptively moderate users by using a static or dynamic “block list” or similar systems"
You are applying moderation on users via a block list, correct?
yes
Please, just use an official group instance. Don't design a system that could only possibly be allowed if you successfully torture the meaning of a single adjective to the point that VRC staff allows the violation just so they don't have to argue it with you.