#udon-networking
1 messages Β· Page 31 of 1
Holy crap
Array syncing
Exciting stuff
I mean, someone already put the entire bee movie script into an avatars 3.0 sub menu so it's not far off of a possibility
lol π
Submenus have like no limitations lol
but pls dont
But I already did
I wrote a python script to generate them
Working with unity .meta files are a nightmare though
I think during the Open beta you had to expect that people will be trying bunch of EXTREME stuff with this and overloading shit π π
why do you want this kitty to cry πΏ
Inb4 someone makes a byte[] array with just an mp4 of the bee movie and forces it to sync across the network
π€¦ββοΈ
ok beta cancelled

And just shows each byte of the video individually on the ui
justified
Fair point
true
If udon on avatars was a thing that happened all hell would break loose
And I think I'd be okay with it
the data will still be throttled down - not sure how much of the bee movie you could actually sync in a byte[] before things slowed to a crawl or exited to save itself
also, byte[] isn't working yet 
updated the docs to reflect this
just use ulong[] π
this is beautiful, momo β€οΈ
Is there any plans of adding a way to like make api calls or get HTTP from remote server? Like, I had this world idea a while back wherein I'd host a bunch of board games that fit into a template on my web server then the vrchat world could auto download them and just change the text on the canvas to have different games but I was disappointed to find out it seems like vrchat doesn't really have a way to do that rn
Security
Or like have a bunch of avatars in a list and the world grabs them and sets pedestals id's to that
Yeah Ive thought about that but I'm sure there's a secure way to implement this
Ofc giving people full access to the internet is a big no
Would be super nice.. Would love to use it for leaderboard and some other board stuff but Security..
It was only a matter of time until someone ruined it and then nobody would get to use it
So I guess it's better the way it is
But what would be nice to have is a way to store some kind of a save file.. π
I dunno, storing on people's computer sounds even worse of a loophole
Then someone just makes a world that's 5000gb of random garbage and destroys your hdd
.. Limit ofc
Very much so
couple KBs is enough for normal people
For me personally ? 128kb more than enough maybe even
Also are the limits, bandwidth staying the same as it is now or might it be changed before release ? π€
It's probably the same reason we don't have udon on avatars cuz what stops someone from throwing a while(true) in there and just completely demolishing the perf of the game period, same could be said about the saving mechanism, someone save enough times and you'll soon lag out the read/write and that thing's dead and who knows what else could happen
Udon has a 10 second timeout that could easily be reduced to a few ms...
What does Suffering mean π ?
Is that the amount of bytes that needs to be sent out ? π€
that means the network is suffering, yes
lol
the network is a good boy, don't hurt it
Its just for science but yes.. Network is very very good boy
Hmm I guess we can make our own string array sync π€ Already doing it in Live but here you can go bit larger I guess π€
Has a couple of things in it showing off random networking features. I've thrown this up quickly because hey if it's open might as well screw around with it π
I need to try the object pooling that sounds amazing, is it like network instantiation?
It behaves quite differently but the goal is the same, yes
Is there documentation on it yet?
yeah it's in here https://docs.vrchat.com/docs/udon-networking
There are four ways you can synchronize data and events in your world: 1. Continuous Variable Use this when you have a variable that you want to update frequently, and it's ok if it sometimes doesn't update to save bandwidth for other things. This will sync for late joiners. Example: A tree that g...
Yo its Riesen, thats a german thing :D
Wow.. So far I am LOVING THIS! The options! The possibilities! π
I think it would be nice to get access to the suffering thing from Udon if possible
GetSuffering() π€
The "chewing for 7 minutes" candy :D
Why literally all canny posts are about documentation π ?
After doing SetOwner, a processing in the OnOwnerTransferred event is ignored only for the new Owner... π€
For non-owners, the processing in OnOwnershipTransferred is executed, but only the new owner is not executed.
In this graph, only the "true" part of the branch doesn't work.
This might be a graph bug unrelated to the beta. Can you try again but have two valueText nodes instead of sharing one?
I did it separately, but it didn't work either.
Also, only new owners were displayed this warning.
Every time an update happens my head hurt more and more lmao
Cannot wait
I built an entire system to late joiners object sync giant arrays in emission. I'm both pleased and sad that I should toss it for the new one lol
Is it good practice to always do this? Single-use each copy of a variable nodes?
I'm unsure if the bugs were fixed, but I have seen issues where reusing nodes caused the compiler to skip large portions. It would still compile, but just not do things, making it really hard to detect. I would say it is currently a good practice to not reuse nodes. I don't use graphs much though so I'm not exactly one to listen to here.
some quick testing results for people. if you want to grab the owner of a object you should not do it on start. looks like it should be done on the onownershiptransferred event. it will be called for late joiners after start.
also i think its a bug but onenable gets called before start.
OnEnable before start looks intentional
I think the intention was drag down a second copy of the variable node. It appears you made a second unique variable (which might not be set)
I mean isn't it kinda what you would expect ? OnEnable then Start ? That's what I would expect atleast
i would expect it to fire when a gameobject gets enabled not at the start of a scene starting.
I'm not sure what happens for MonoBehaviours. I only know Awake is called immediately and start is on the next frame. OnEnable is most likely on the same frame as Start but not sure if before or after it.
When a scene starts, the object is enabled for the first time π
i guess thats true. haven't really used onenable before in U#.
https://feedback.vrchat.com/udon-networking-update/p/add-a-way-to-read-client-suffering This sounds so amazing without any context π
Unity's initialization phase of scripts typically calls OnEnable before Start(), but in order to call before OnEnable would require Awake() which I wish we had the ability to use.
https://docs.unity3d.com/Manual/ExecutionOrder.html for reference
^ this, was just reading up on it
I think just to most new Unity dev's, the naming of the functions can be a bit confusing.
Yup
So long story short, please give us access to Awake() 
Having a form of prestart would be nice but we can work around it with execution order.
I mean doing a bool check in OnEnable to fake an Awake works but shouldnt be practiced.
That doesnβt give the same affect as on awake. All components βawakeβ method is called first, and then start is called. With udon, you are not guaranteed one on enable comes before anotherβs start.
OnEnable() -> FakeAwake() -> FakeEnable() -> FakeStart() 
Even this doesnt resolve what comes first or not when other scripts are enabled, but it gets you closer. It helps that we have behaviour priority but still.
lol
Again, something that shouldn't be practiced at all.
Then again, developing anything for VRC isn't standard practice so I shouldn't complain much there.
π true
So how's the network upgrade looking so far.. ? I haven't really found any major issues so far π€ Is there something extremely broken that I don't know about π€
Well sadly not many people are going to try their worlds out until it goes live. Then suddenly everyone will find the bugs. πΌ
My world was not complicated enough...
π working on a simple object pool system to have the master assign ownership of objects to people joining.
I tried all the things I have use for and they all work fine.. 
I tried my mahjong world unmodified, things seem to work as before. Though, I can make them work better now for sure :)
I have not yet redone my world fully with this new stuff cause.. There's waaaay too many things and I don't wanna redo it and then find out that things will change when its released π
We're not expecting to make any major changes before release, just fixing any bugs or issues that come up during this open beta period (and addressing some that were found before).
such as not being able to pick up the camera
π
@frozen igloo Does syncing a solo uint work atm
pretty sure it works, yeah
hang on
From the testing I did yesterday: ```
These types prevent the owner from sending synced data:
Char[]
VRCURL[]
These types prevent remote clients from receiving synced data:
Byte[]
SByte[]
ULong
These types do not stop the rest of the object from serializing but they silently get turned into an int32:
Char
Byte
SByte
Short/Short Array
UShort/UShort Array```
actually maybe I missed uint, hang on
lol i currently have this system working on live
but damn this new networking update
it is looking absolutely great
its going to make everything so much better
I understood the intention, but I thought it would be more reliable to separate the variables, so I did that.
I did this process with U# as well, but it doesn't work.
Is it a bug...π€
Yes, this is a bug. OnOwnershipTransfer doesn't fire for the owner...
Jesus how I love this update... Already have 3 new features for my world prepared as soon as this update releases.. π
Oh reallyβ¦
Thank you for the informationβ¦!
By the way, is there a canny for this bug?
There was no existing report, so I made a new canny.
https://feedback.vrchat.com/udon-networking-update/p/only-new-owners-is-ignored-onownershiptransferred-event-processing
are you sure you are on the beta build. i know live has the issue.
this is how it looks on live.
I didn't know that there was a problem even at live performances....
I'm using network beta now.
π i think you will find the new features working for you better now.
a funky bug ive been running into . https://feedback.vrchat.com/udon-networking-update/p/remote-player-broken
feature. ship it.
Combat system again?
nope its looking like if a player teleports around the time someone is joining this happens.
found a issue that i think will heavily affect worlds currently in live. if a udon behavior is set to continuous with a program source it will send network data even if there is no object sync, synced variables, network events being used.
I noticed in my currently live prefab world I was hitting the network limit even though there was no udon behaviors being synced.
so old worlds with a lot of udon behaviours will have issues.
aaaaaa i cant wait to be back home
I wanna do so much udon stuffs , but im stuck in the hospital now
ree
the Shift+~+6 menu just gets minimized to the top left of the screen when you are master and have a ton of UdonBehaviours that are not synced : /
why do behaviours with no synced variables even show up in the menu? I have a few hundred UdonBehaviours that get selectively enabled and do not sync anything that just fill the list and make it lag out
ah it's spamming
2021.03.18 12:35:10 Exception - NullReferenceException: Object reference not set to an instance of an object.
ΗΗ
Η
Η
Η
Η
Η
Η
ΗΗ
ΗΗΗ
ΗΗΗ
ΗΗ
Η
Η
ΗΗΗΗ
ΗΗ
ΗΗ
ΗΗΗΗ
Η
Η
ΗΗΗΗΗ
ΗΗ
ΗΗ
ΗΗ
Η
Η.Η
ΗΗ
Η
Η
ΗΗΗ
Η
ΗΗΗΗ
Η
ΗΗ
Η
Η
Η
Η
Η
Η
Η
Η
ΗΗΗΗ
Η
Η
Η
Η
Η
ΗΗΗΗΗΗ
Η
Η
ΗΗΗΗ
ΗΗ
() (at <00000000000000000000000000000000>:0)
ΗΗ
Η
Η
Η
Η
Η
Η
ΗΗ
ΗΗΗ
ΗΗΗ
ΗΗ
Η
Η
ΗΗΗΗ
ΗΗ
ΗΗ
ΗΗΗΗ
Η
Η
ΗΗΗΗΗ
ΗΗ
ΗΗ
ΗΗ
Η
Η.ΗΗΗ
Η
ΗΗ
ΗΗΗ
Η
Η
Η
Η
ΗΗ
Η
Η
ΗΗ
Η
Η
ΗΗ
ΗΗΗ
ΗΗΗΗΗ
ΗΗ
Η
ΗΗΗ
ΗΗΗ
Η
Η
ΗΗΗ
ΗΗ () (at <00000000000000000000000000000000>:0)
Η
ΗΗ
ΗΗΗ
Η
Η
ΗΗΗΗ
ΗΗ
ΗΗ
Η
ΗΗ
ΗΗ
ΗΗΗΗ
ΗΗ
ΗΗ
ΗΗ
ΗΗ
Η
ΗΗ
Η
Η
Η
Η
Η
Η
Η
Η
Η
Η
Η.OnGUI () (at <00000000000000000000000000000000>:0)
I think it's always been there .. we just couldn't see it
Only way to be sure is to get response from dev but I think it was always there as I was having issues with syncing in my super old bad version of my world when there were like 1k Udon behaviors..
And there weren't many synced stuff back then
I know there have been issues with alot of udon behaviours in a world but i dont think its ever hit networking like this.
usually you get the death runs on live if there is a issue.
@ruby tulip that's definitely something we saw happening a while ago but it was fixed before this latest udon network beta. Are you sure you're on the open build? The closed build is outdated.
i should be. i only have the "danly - udon reliable and array sync" available, other then choosing none.
oh wait
Yeah that's the closed build. The open build is accessed from the password SyncYourTeethIntoUdon
ive been too exited to test things out my brain has been skipping the importent info.
ill take a second look when i can get back too it.
12 people really wish to read client's Suffering π€ I wonder if they mean the same kind of suffering I do π
Is there any chance of SendCustomEventDelayed being merged into this branch if it hasn't already?
It will be, but not for a few weeks. Rough schedule:
- Release to Open Beta (we did it yay!)
- Collect feedback, bug reports, etc for 2-3 weeks (we're here)
- Merge in changes from Master (including this new Event) and then fix bugs
- Release another Update
- Collect feedback for hopefully not nearly as long
- Release to public!
So we have about month more or less to prepare our worlds for this update if we want 
@thorn adder looks like i was on the wrong build. was using a old closed beta build. just checked on the current public build and your right the onownershiptransferred is not working.
also found the return value for onownershiprequest is being ignored will type up a canny about it.
I see.
I was surprised that there was such a bug...
Thank you for sharing the information.π
that specific event has been broken and fixed several times. it gets hard to track when its working or not.
Oh, this bug may be well annoying.....
@jovial gyro I've only been studying programming in high school for 3 or 4 months, will this be easy to understand?
?
In simple terms: every player thinks it owns the pickup and tries to send the position/rotation manually to other 2 players. VRChat on the other hand says the owner is one of the other 2 players and doesn't send anything as far as I can see.
So it looks like Networking.IsOwner is not working when testing with multiple clients atm.
I am also not sure whether this is U# related or VRC related (I use the 0.19.6 beta of U#)
@jovial gyro ?
If you are familiar with Unity coding Udon is fairly similar when using UdonSharp created by Merlin. I think it is easy to learn but it will take time like all things.
You can learn the basics in a few days
depends on your background and experience with coding in general
without prior coding experience it will take a lot longer (weeks)
or just follow any unity coding tutorial and really try to repeat every step, make mistakes, fix them, rinse and repeat. This is off topic though.
I created a canny for my issue: https://vrchat.canny.io/udon-networking-update/p/networkingisowner-broken-or-ownershiptransfer-is-broken
local test or diff accounts?
Same account, same machine (test build option with 3 clients)
FairlySadPanda told me that pickups would be broken so I assume that this is confirmation currently until I hear otherwise.
I usually avoid local test because of the issues that prop up so frequently in them
i tested ingame too with a friend and the same problem could be observed. Also without pickup and also with a station. Seems to only affect manual sync objects though.
Hmm. I know manual sync is supposed to be the fastest, but is continuous sync supposed to be this much slower?
methodology: Another client simultaneously 1) triggers a RPC and 2) updates a color variable on the cont/manual spheres (requesting serialization on the manual one). Four seconds later, it resets the synced color variable for cont/manual. For the RPC, a local timer resets the color.
Suffering is zero, of course.
yyyyup
hmm. If I want to make the timing of e.g. object syncs and manual syncs line up better, is there a way to get that time delta to use in my own logic to delay updates?
If folks would like to test a networking patch version of the almighty pool table prefab: https://github.com/FairlySadPanda/vrcbce/releases
v0.2.0 has a public package now you can download.
Just want to say by the way: great work on this new networking system overall, I had a good time last night deleting thousands of lines of U# that worked around bugs and limitations in the old system :)
Thanks for all the feedback and clarifying questions! Looking forward to getting the last bugs squashed so we can roll this out in a few weeks.
I'm going to have another bug to report tonight too - didn't have time to get a minimal repro but I think I found a case where manual sync is unreliable
Make it quick.. Really need Manual sync cause group of hackers just decided to raid my world every single day
And now way to prove that its them cause I can't see who is spamming networked events which should not be called straight up
is there a new video player that actualy work cause the one i used is broken after this update and i was synct and had a url link
If you're using the Udon Networking Update branch, the video player in the UdonExampleScene should work. If you're using a custom video player that you did not make, I suggest you get in touch with the creator of that player to see if they have an updated version that works with this beta branch.
K thank you for helping :3
If I request serialization in a manually synced object in OnPlayerJoined, then a frame after OnPreSerialization request serialization again, is it guaranteed that the newly joined player will receive both transmissions?
reliable sync does not guarantee that every single transmission will be received by every player (though there's a good chance because it is high priority). It only guarantees that if it stays on a value, everyone will receive it eventually
Hmm. The docs talk about manual sync being useful when intermediate values matter, if they're not synced that does change things a bit
Can probably still work with it but that should probably be called out in docs
from previous testing it looks like you should only request serialization every .2 seconds at the fastest. while you can request sooner there will be a delay.
the frequency you can successfully sync depends entirely on how much data there is to sync. 0.2 is the shortest but if you have a lot of data it'll just keep going up. An int array with length 100 took about 1 second from what I saw
in my testing, with a single client a pair of clients, I was able to transmit much faster by waiting for OnPreSerialization, then RequestSerialization on the next Update call
there is some latency before transmission begins however
would it be possible to send data more quickly by using multiple udon behaviours?
probably. but you still have the 11kb per second limit.
when live
2-3 weeks @fresh stump
pinky promise????
I can pinky promise C:
You can hit the 11kb limit with a single behaviour if you use large arrays
2-3 weeks 

How often can you theoretically change Owner of an object with sending the manual sync variable right after that ? π€ Once per second ? Twice per second ? 5 times per second ? π€
Do we have an idea when SendCustomEventDelayed will be added to the Networking beta? No rush, especially if it will delay the Networking beta even in the slightest.
In the next beta release, but we don't have an ETA to share on that yet.
π
Just came into this channel to ask about SendCustomEventDelayed but I see I am bit too late.. π
Also seems like being able to read Client Suffering is not planned in any way :/
is parameters for custom network events planned for the network update?
not this update, no
@obtuse beacon Its pretty easy to do your own with Manual sync π
Nice https://docs.vrchat.com/docs/udon-networking is updated
There are four ways you can synchronize data and events in your world: 1. Continuous Variable Use this when you have a variable that you want to update frequently, and it's ok if it sometimes doesn't update to save bandwidth for other things. This will sync for late joiners. Example: A tree that g...
Why am I getting unread message here every couple hours π€
Someone probably posting something and deleting it π€
Anyhow excited for the release..
Already have about 20% of all of my scripts Network Update ready
For me, I'm fairly certain most of mine will convert without issue
My concern are objects I store viables on that are also pickups
Those will be fun to fix
So I know that if you call RequestSerialization and then someone joins they get the variables automatically sent to them without needing for Another RequestSerialization but.. Is there any chance that perhaps those variables will be recieved in more than one OnDeserialization ? I'd say not but am I right ? I mean it would be weird if not ? But with Udon sometimes.. 
I would not rely on getting the event exactly once. Probably good to still have some sort of record system that ignores duplicate data.
I don't care about duplicate data which I should have noted in my message I care about that if ALL the data will already be included in the first OnDes or will part of it be in first and part in second (If it actually does happen to get called twice)
Like 5 variables in first 5 variables in second
if you're using manual sync, you should get it all at once yes
continuous sync might be a bit more fluid
THANK GOD!.. That's literally what I need though should makes me a bit worried but 
Any special reason why byte is not supported according to this ?
Ah hmm CTRL+F I found that byte[] is planned π€
isnt char basicly kinda the same as byte?
π€
Theoretically could be used as a byte but it isn't the best way
I have couple synced byte[] so let's hope it gets properly added.. π
yeah kinda weird that they got all those types implemented but not the byte Β―_(γ)_/Β―

Though when I am looking at this.. Network is gonna CRY.. π
Though.. Its ONLY for late joiners.. And gets Serialized only when someone joins π
So in really its better than what I have currently in world.. Where the Continuous sync is syncing all of this but in rotating strings.. π
It was removed from the list due to a conversion bug, it will be back
Gotcha
So I can safely use it and expect it to work once Network update is released to public π€
Yes, we expect to release support for byte and byte[] sync

Based devs
In the meantime color32 can be synced and contains four bytes :)
Ha! Nice workaround. I think it's just a casting error that's keeping them from working right now.
Synced pickup spawning (without loads of faff) inside the Spring 2021 Networking Open Beta for #VRChat #MadeWithUdon
Demo here: https://t.co/LFfbHLL0Ai
@Phasedragoon
@Vowgan https://t.co/CiGQ3dOOvt
Hello, I noticed a problem with version 2021.03.22.18.27 is that sometimes, I don't see the people who are on the world, I have to leave and then come back to the world to see them, its people see me, but not me
Some quick observations from the network beta regarding bandwidth consumption on manual synced objects:
- If you need to transmit a lot of data, you can trigger
RequestSerializationfromOnPostSerializationto queue up the next round of data. - The maximum bandwidth you seem to be able to send with a single udon object without impacting latency seems to be around 8KB/s (tested using a big array of Color32s).
- There is a minimum delay between manual syncs of about 220ms. When the bandwidth limit is exceeded, it seems to result in a longer delay than would be expected from missing a single transmit (normally serializations occur every 220ms, but occasionally it skips 550ms between serializations, and this continues for a few serialization rounds). This seems to work by deferring OnPostSerialization and OnPreSerialization.
- Manual sync seems to be quite reliable - if you suspend the receiving process for 10-20 seconds, it will still receive all of the updates sent in the interval, in order.
If you really push it you can get about 14-15KB/s but sync latency will really suffer
https://feedback.vrchat.com/udon-networking-update is inaccessible it seems
https://feedback.vrchat.com/vrchat-udon-closed-alpha-feedback/p/network-beta-dont-allow-a-single-manually-synced-object-to-queue-an-arbitrary-am please move this to the networking beta canny board (which is currently closed to normal users)
Is OnSpawn working ? I am not able to get it to work..
ObjectPool does work synced all but OnSpawn is not getting triggered
public override void OnSpawn()
{
Debug.Log($"I have been summoned! {Networking.GetOwner(gameObject).playerId}");
}
I have this in script that is attached to every ObjectPooled object
Or is it triggered somewhere else ? Not in the UdonBehaviour attached to just spawned object ?
Absolutely - the demo ObjectPool demonstrates this, with OnSpawn both resetting the position of the object as well as logging to the console. However - there may be a bug where it doesn't call this method the very first time it spawns? With the demo ObjectPool I was able to see the log after returning a box:
ok - yeah just tested this and it looks like OnSpawn is not called until after something is returned to the pool and re-spawned. Will fix!
would this fix allow for udonbehaviours to be initialized (start and network setup) before objectpool disables them? want to spawn and set ownership but have to do a work around to delay the objectpool setup till after udonbehaviours get setup.
Not sure, that's def danly territory.
It looks like the network beta canny category linked in the pinned post is still locked, should issues just be posted to udon alpha feedback in the meantime?
This one shows as locked? https://feedback.vrchat.com/udon-networking-update
Ah, ok. I can't see that since I'm logged in.
Wait so, where am I suppose to enter this code it talks about for the Udon Network beta? I was just able to download it immediately and cause my project to go berserk because I still have no idea what I'm doing half the time lel, thank god for backups
This should be available again, thanks for the heads-up!
You put the code in the Beta code field in Steam.
Ahh...See I thought that that was what it referred to but, that makes sense. Only thing I gotta work through now is fixing all these compiling errors...Ugh.
^that post explains how to do it if you're new to Steam betas
Ah sad π¦ Any ETA for the bugfixes ? There's quite a few I'd say and currently I am just writing code for my world and I have absolutely no idea if it works cause there are some bugs in functions used there π
oh glad I wasn't the only one having trouble with that - thanks for looking into it.
also having some trouble with the object pool not synching at all, but I'll see if I can figure that out myself π
That one seems to work fine so probably you're doing something wrong ? π€
Are you using TryToSpawn ? And Return only
just to make sure they're not lost: I filed two cannies while the board was closed that should probably be moved over:
https://feedback.vrchat.com/vrchat-udon-closed-alpha-feedback/p/network-beta-dont-allow-a-single-manually-synced-object-to-queue-an-arbitrary-am
https://feedback.vrchat.com/vrchat-udon-closed-alpha-feedback/p/network-beta-allow-specifying-qospriority-of-manually-synced-objects
moved them over, thanks
Yep, only TryToSpawn. https://gist.github.com/daalta/be5355e35b86d8a789c8d87b63728511
Works fine for the master, but not for other players.
Interesting I'll test it out more later π€
It sounds like other users here aren't having any problems, so maybe there's something weird on my end? The pool is quite large, 1000 objects.
N-networking..... when did this get here?
a few weeks ago, when we released the Networking beta!
π
Does this include animation syncing as well?
Nice @errant siren!
Will it return boolean ?
If suffering will be more than how much π€
I posted a small essay in https://feedback.vrchat.com/udon-networking-update/p/network-beta-dont-allow-a-single-manually-synced-object-to-queue-an-arbitrary-am about why getIsSuffering doesn't quite go far enough in some cases. Still good to have though as a blunt instrument.
(I feel somewhat strongly about this particular issue :P)
Appreciate the feedback. Yes, IsClogged is just a boolean for now. We're talking about how and what to expose for more detailed information. One issue is that bandwidth limits, etc may change down the line so we don't want people relying on staying under a particular number which may change, but we could offer a green/yellow/red or something with a steps for more granular info.
Well, my bigger concern is that just having a big global "are we okay" flag leads to starvation without a global bandwidth controlling thingy
because if you have a bunch of UdonBehaviours implemented by different people, some will be more aggressive at taking bandwidth than others (and they'll always win...)
agree it would be bad to encourage people to throttle to a specific target bandwidth
Yea I think that would be good Green/yellow/red
Spitball idea, maybe a normalized float (0.0 to 1.0)? Could easily represent 0 as green, yellow as somewhere inbetween and red as 1 (or maybe visa-versa), but would also allow "fractional/weighted networking" where a behaviour could proportionally reduce it's serialization demands based on that ratio.
that is perfect idea!..
Yeah, a normalized float makes some sense - lets us update the targets if needed without breaking backoff systems that already exist. Will discuss internally.
It'll need some smoothing I think. Still has some issues where multiple objects each trying to avoid overloading the network can end up in an unfair allocation due to the feedback loops involved not being aware of each other
Normalized float per udon behavior in addition to global?
π€
Something like Networking.GetGlobalSuffering() and behavior.GetSuffering()
The behaviour one might return the percentage of the max buffer that it is taking up maybe.
That would allow for each behavior to (for the most part) be concerned with itself only I think.
yep, but requires every behavior to reinvent the wheel for congestion control
I mean you could have a behavior take an array of other known behaviors and have it be a management script, but that's a solution to a problem caused my a solution to the problem that was originally trying to be solved, so idk.
Figured out why I was having issues with the object pool component. Just needed to change the attached UdonBehaviour's sync method from continuous to manual.
Question: Is this by design that an udon behavior which is the child of another gameobject with an udon behaviour does not change ownership when the parent changes ownership?
parent (pickup, position sync object, udon behaviour (no variable sync))
|
-> child (udon behaviour (manual sync))
Yes. You need to manage ownership for each UdonBehaviour separately.
Ok, thanks!
I noticed something: when you RequestSerialization multiple times in the same frame all changes after the initial request don't sync to other players. Shouldn't the serialization happen as the very last thing during that update and use the "final state" of the variables?
The issue occurred when I reset a bunch of UI Buttons which all have a OnChange method attached, each of which requests serialization at the end. If the delay method was already in the network beta I could delay the request by one frame but I don't think this should be nessecary π
Manual sync puts the onus on you as the creator to manage when sync happens, I think you'll want to limit your logic to one Request per frame. You could set a book like 'needsRequest' and check that at the end of the frame to see if you want to RequestSerialization
With great power...
Ok, noted. I guess I'll wait until the delay methods are available in the beta version of U# then.
With great power comes bad life choices
Alternatively I could just increment an integer every time I call it and every time in OnPostSerialization I decrement it by one and Request again if it is still > 0. Β―_(γ)_/Β―
Why do you need some many RequestSerilizations ?
Because my UI elements trigger the request for each changed element
Try designing it better then
Do not spam the network its not good practice π
and I have a reset button which changes all elements at once
but only the first change gets serialized atm
or I can use a bool as a lock object to prevent serialization due to changes by the UI 
Well from what I understand .. You won't get it to work anyway.. It seems that you can seriliaze only once per about 200ms for it to be reliable and fo rthe other side to get both
this should work:
public void OnSettingsChanged()
{
if (_preventChangeEvent)
{
return;
}
// ... update objects that depend on ui values
betterPlayerAudio.SetDirty();
}
public void ResetAll()
{
_preventChangeEvent = true;
// change sliders etc that trigger OnSettingsChanged()
_preventChangeEvent = false;
// manually update only once
OnSettingsChanged();
}
public void SetDirty()
{
TryRequestSerialization();
}
private void TryRequestSerialization()
{
var localPlayer = Networking.LocalPlayer;
if (Utilities.IsValid(localPlayer) && localPlayer.IsOwner(gameObject))
{
_serializationRequests++;
RequestSerialization();
}
}
public override void OnPostSerialization()
{
if (Networking.IsOwner(gameObject))
{
_serializationRequests--;
if (_serializationRequests > 0)
{
RequestSerialization();
}
}
else
{
_serializationRequests = 0;
}
}

Ima test it ^^
well... it doesn't seem to work, it only syncs 3-4 values at once even though I only request once now... and udon throws weird errors. I guess I hit the serialization limit...?
... without using _preventChangeEvent it works but syncs only one change at a time and takes around 3 seconds to update all values...
Manual sync is limited to roughly 49 Kilobytes per serialization.
I am definitely below that so I wonder what is going on here
(12x float, 3x bool is manually synced, so a little over 48 bytes)
Add some debug log or indicator when you call requestserialization to make sure you're not doing it too often
As I was saying from my tests you can call serilization every about 200-250ms it seems.. (Not confirmed)
depends entirely on the size of what you need to sync. Though from what I saw there wasn't much if any penalty to calling it too often. It would just wait longer
I tried syncing 1 int and if you sync it too fast it just skips
Let's say.. You are syncing integer and changing numbers starting with 0 and every 100ms you change it +1 and request serilization you do this for 2 seconds and the other person recieves only perhaps [1, 3, 7, 10, 12 ,15,18,19]
But.. recieves it like this - > [0,1,1,3,3,3,3,7,7,7,10,10,12,12,12,15,15,15,18,19]
= Actually recieves 20x the serilization but only 8 different data
As expected. Every time I press reset only one value changes on the other client now. Even though the request is now the very last thing that is called. **Update: my fault, see further below π **
Would you be willing to share more of the relevant code?
That shouldn't be happening but I'm not sure what you're doing either
sure, I can send you the link to the files on git
oh nice
file that triggers the sync in the BetterPlayerAudio script (triggered via ui button which is bound to ResetAll()): https://github.com/Guribo/BetterAudio/blob/0808dedf128a6aa01be76838a54e9f3c99473703/Scripts/BetterPlayerAudioUiController.cs#L140
BetterPlayerAudio: https://github.com/Guribo/BetterAudio/blob/0808dedf128a6aa01be76838a54e9f3c99473703/Scripts/BetterPlayerAudio.cs#L567
{
Debug.Log($"[<color=#008000>BetterAudio</color>] " + $"OnPostSerialization called");
if (Networking.IsOwner(gameObject))
{
_serializationRequests--;
if (_serializationRequests > 0)
{
RequestSerialization();
}
}
else
{
_serializationRequests = 0;
}
Debug.Log($"[<color=#008000>BetterAudio</color>] " +
$"OnPostSerialization: (queue length = {_serializationRequests})");
}```
I don't think any of this is necessary, is it? You should be able to sync everything in one serialization, you shouldn't have to handle multiple ones
It isn't yes
but it doesn't send everything for some reason (it does, see below π )
in this test none of this code plays a role as I only call it once
The entry point would be SetDirty btw on that script
So the order would be:
SetDirty
TryRequestSerialization
RequestSerialization
OnPreserialization
OnPostSerialization
Try debug logging the values in OnPreserialization to see if they actually are being set
ok
π it looks like the error is on my receiving side somewhere, it is receiving all values correctly:
so not related to udon itself
sorry to bother you guys π
found the bug and now everything works as intended -.-
All part of the development process. No worries.
So OnPostSerialization is called when the variables have been serialized and are being sent.. Which means.. I can change variable there and it will still sent out the just sent out variable right ?
that's called after the variables have been read and packaged, so I believe it's too late for any changes to affect anything unless you request serialization again
you're probably looking for OnPreserialization. That happens before they've been sent
yep thats what i need
I wonder if there will be any talk about network beta on Dev Stream π€
personally I'd prefer they didn't spend too much time on network beta - explaining what it's about in a way that would make sense to non-world-creators would take quite some time (and presumably they have a bunch of other things to talk about in that time) and, really, the only interesting information that's not fully disclosed right now would be "when?"...
if they were doing streams on a more regular cadence, a talk on networking in more detail would be interesting though
I can't wait for this to be out, because I'm having so much trouble getting this thing I'm programming to sync correctly.
Yea we need this fast.. π Not necessarly released but BUG FIXEEEES 
We will talk a bit about UNU on the stream -just to let our wider audience know about about it. We've got another Open Beta that's so close to release where we've fixed most of the issues that were reported on Canny, but we keep finding edge cases where something doesn't work. There will be another Open Beta release this week that will most likely become the real release unless y'all find more issues π
Awesome
so that's what the unu in "momo-unu-staging" meant π€
Udon Network Update im assuming.
Looking forward to another Open Beta π 
So if Open Beta is probably gonna be out this week π€ Does that mean that release might come within 2 weeks ?
I think I gotta start reworking my world faster
You know we don't like to promise any specific timeframe because we won't release it until all the bugs you find are fixed. But yes - UNU should be either the next release or the one after.
π that's all I need to hear π Still means I gotta accelerate my work.. I want to update my world once sync update hits but I am 10% done..
I will be interested in seeing what your doing when the sync finally does arrive.. sounds like something i would be interested in.
https://github.com/Miner28/NetworkedEventCaller This is one of the things
Oohh preety
Networked event caller.. my god that could have saved me time
i did something stupid in the end to bypass an issue i had.. it worked but i felt like i was revolving back to sdk2 methods lol
But other than that I am basically reworking my world to use this ^ And not normal Events mostly.. Currently in Live I am Syncing Array that contains all synced stuff so in Network beta I want to split that array into their respective smaller arrays.. Currently in Live Late syncing Late joiners takes about 15 seconds which in Sync Update should take a second..
My world- https://vrchat.com/home/world/wrld_42d023dc-1b2d-439a-b741-09113ca0e59a
Yeah i've gotcha..
Yea.. Its amazing.. So many supported types π
Though 1 sad thing is if you checked out the github for the example.. The recieving parameters are done bit weirdly
_SendMethod("All", nameof(TeleportToPlayer), new object[]{VRCPlayerApi.GetPlayerById(500)});
public void TeleportToPlayer()
{
VRCPlayerApi player = (VRCPlayerApi) parameters[0];
Networking.LocalPlayer.TeleportTo(player.GetPosition(), player.GetRotation());
}
will take a look.. this to me is like working with gmod wire.. see.. gmod had lua.. and lua had an extension called E2 which we coded in game.. and it was very much like what udon is and how it works today.. so hearing about your window earlier and all you were doing i thought.. wow.. its gpu.. because thats exactly what people ended up doing in the end.. making a full computer game inside a window within gmod itself.. and over the years.. they pulled it off. lol
Well.. good luck.. haha
Oh no I can't do graph π
i think i will stick to C for the time being
neither can i but you gotta admit its tempting
it will be a nightmare π
π
I'm using UdonSharp as well, lol
Doing complex stuff with Graphs is impossible..
So yea If someone is doing some advanced stuff they are usually using U#.. π
Not impossible, but it gets unwieldy after a certain point. Though the next release is much faster on Groups, Reloading and Compiling
π I'D like to see someone do 10000 events with Graphs.. π
I wouldn't
though I'd wager if you have 10k events, you're probably trying to work around a missing feature or something like that
Yes the feature is Events with Parameters.. π
Screw it, I'm opting in cause I want to test this stuff out.
Which I found a much better work around with the new Sync Beta as you could have seen on the github link I posted.. Networked events with parameters and I support all these: Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, string, VRCPlayerApi, Bool, Float, Double + Arrays (Byte, Int32, UInt32, Int64, UInt64) π
Okay I opted in

I do have an automated test that makes many Flow nodes because we had an issue where if you made 13, the compilation would break. I think I got it up to thousands before we ran out of address space
One problem with this though is a maximum amount of events that can be sent out per second.. That will be solved by Queue
Oh yea that reminds me.. I saw someone having problem with Heap ? Does U# change the Heap size or something π€
I haven't looked at your implementation, but I assume you're setting a synced variable on a Manual-synced UdonBehaviour, then firing a NetworkEvent that checks that variable when the event is received?
Well .. Kinda.. I have a synced string that contains everything and then RequestSerialization is called which triggers the event
Was thinking about this way too but it has its limits I found.. So I switched over to string
I use object[] for parameters input and output
And .GetType() to check and Encode and Decode the variables properly
For VRCPlayerApi I am doing PlayerId
for bool I am doing T/F so it saves bandwidth
oof - that's exactly what we're trying to avoid, and why Custom Events with Parameters keeps getting pushed out - we don't want to make an implementation that turns things into objects and back, which creates garbage, thus triggering the garbage collector more often, which can create hitches
π Well
No good solution as of now so it has to do it for now
oh yeah - it's fine for a user-created system, but we want ours to be as efficient as possible. Just wanted to provide a little background on that.
your systems are limited by our systems, so we need to do the extra work to make them as streamlined as we can within the Udon VM system, which already has an overhead
I had a system earlier.. That had synced Ints, Bytes etc.. But that was TERRIBLE cause for each Type I had to do another synced variable.. And stuff like VRCPlayerApi was not even possible with it 
Currently facing one problem though.. How can I avoid the Synced string being synced to late joiners π€ Can I even do that
nope - if it's a synced variable, then late joiners get it, that's the whole job of synced vars π
Cause late joiners get the synced string and trigger event acording to it.. Which not always is really good thing .. Mainly if the event is to teleport you
Could perhaps calling Another RequestSerialization with empty string in PostSerialization work π€ Or will that break stuff.. I haven't had time to test this yet but It might perhaps work ?
here's a terrible hack for you: Include the highest player ID you've seen in your serialized variables. Players with a higher ID than that ignore the event.
UGH.. π I am so much looking forward for official implementation of events with arguments.. Sure this works.. Can choose targets, supports many types, can have hundreds of arguments but..
You know.. That's actually BRILLIANT Idea
Really, they need to add an implementation--even if it's not perfect--so people don't have to come up with silly workarounds for it. Scripts that use the official API can be made more efficient by future updates; scripts that use ugly workarounds have to be reworked later
Player Ids rarely get larger than 3 digits so its not that super lot bandwidth wasted and It will 100% work π
Alright, I gotta jet to go get ready for the stream. ttyl!
ints are likely going to use the same amount of bandwidth regardless of size
I'm guessing that anyone who hasn't updated video players to use the new manual sync variable method should still see them working they just wont be taking advantage of it
probably. you'd be better off updating though as it'd fix the issue where too-long URLs break sync
I have a somewhat complex world that pushes current sync limits, it works fine without changes in the beta (actually a little better because some bugs got fixed)
but it works even better with changes π
The method and parameters are store in a string though
use a different synced variable
And this will too.. At start of it π
udon overhead for parsing and stuff is kind of high, avoid parsing if you can
or rather, udon overhead for any logic at all is high, so if you keep your stuff to a single variable you can just do a comparison on, it'll be lower overhead
... and that's why they need an official implementation of networked events with parameters, even if the implementation isn't ideal yet
It'll still be better than how it works now, and improvements to the official implementation will benefit old scripts too
I feel like adding a 1 int won't cause difference.. If I am already parsing string from 20 different strings
I suppose, but every little thing helps π
π I guess so
I'm trying to figure out how to make use of these new network stuff on U#, lol.
ideally yep! a lot of club/party sdk3 worlds are using norixwolfe's video player at the moment, just wanted to make sure they wouldn't all fall over when its released, not heard any word of anyone else working on a pre-release player for it yet
- You need network Beta U #
Where can I get it?
U# github
tbh it wouldn't be hard to update existing players, just go to wherever they're changing synced variables and add a RequestSerialization. Also make sure they're not updating them every frame π
Its 1.19.6 I think
I'm currently on 0.19.8
Yea you'll need to downgrade
Also don't forget that some stuff from Live is not in this version
Specifically SendCustomEventDelayed
π Well I need to make use of that in my code
But still waiting for it to be merged π
Do I need to delete the UdonSharp folder?
Since I'm downgrading, I'm wondering if it'll mess it up if I don't delete stuff first.
Try it.. You'll find out π But I dont thik so
Did you update both VRCSDK and U# π€
I'm on the latest version, unless I need a specific version of the SDK as well.
Okay nevermind, I used the one that was linked from UdonSharp's GitHub.

π Added yet another Int to sync the LargestKnownPlayerId π Its quite filling up lol
New udon updates coming? Will they attempt to stop udon events being called over the network or will that always be up to the world creator
Im surprised jar wont fix her udon based maps and a close friend even said she wouldnt... Lol
No attempt to stop events being called over network and Jar probably won't fix her maps cause of lots of work.. I know it myself.. Already spent like 20 hours reworking for better security on the new update.. And there's a lot more work to do
I guess
Reminds me, i need to send a ticket and explain how modders make menus useless
You can prevent events being called by putting _ before method name BTW
Ye ofc
Even if you protect the events that are directly dangerous like teleporting players, you can never fix the events that cause the game to actually function like starting a round. So if someone malicious is causing the round to start over and over or just generally breaking it, there's nothing you can do
World triggers yeh
There is .. I am making the network event caller that uses synced string to call functions and using that you can protect function from being called over network..
You can 1. Encrypt those 2. Send the player who sent then as a parameter and check if he has permission
Events with _ cant be called over network π€
And none of integrated can be called over network too
so Start, OnDes, OnPreSer etc..
Sure, if you're making a new thing from scratch you can do things like that. But that's not something that can easily be implemented into an existing map
Uptp the creators
Also that requires ownership, and ownership can still be messed with
Yup
Yea agreed.. Tried impementing it into my map but figured it would be harder.. So I am just reworking it from zero
Nope
Admin privs is still possible but will swiftly ban
There is the new event to allow ownership transfer
Eh, denying transfer is not a security feature
"
It's not going to be impervious to modded clients
^^^
Well.. With what I am doing it will.. I am denying every single ownership transfer that is not coming from Master
Atleast that's my plan
So yea true..
Wont work sorry
If Master is hacker then world is FUCKED
Though best case scenario, if a modded client forcefully transfers when they're being denied, they may get desynced and think they're the owner when everyone else still agrees on the actual owner. And then they just never receive anything and they've screwed up
Udon was made with zecurity in mind. Look at it now
LMFAO
Kirai send custom udon events
A 16 year old
Now it is still BAD
Not as easy as before
10 year old can fuck around that
Also IPs arent everywhere anymore
Sure.. Still super easy
Thankfully
And desync
And they finally fixed Vote Kick / Kick to be server side
does anybody know how to use the object pool functionality in udon network beta? also I have Udon Sharp v0.19.8, is that the network beta or is there something else I need to get?
0.19.6 is the network beta for U# afaik
@fresh stump have fun filling the lobby with photon bots and having them there for 3+ minutes to be able to vote kick
No one does that anymore lmao
Basically - make objects, put them into the pool via the Inspector. The Pool Owner can then TryToSpawn and Return objects, which will sync their active states
Also Object pool is currently broken so if you're trying something out with it OnSpawn is not triggered until you Return object into the pool atleast once
going to write the release notes here so I can pin and then modify them a little without bugging Tupper:
You should have posted this Beta release to #open-beta-announcements exactly for this reason lol π
UnU Update Build 1069 (nice)
- Fixed sync for char, byte, sbyte, short, ushort, uint and their array types
- OnSpawn event deprecated for objects in Object Pool - use OnEnabled instead.
- Networking.get IsInstanceOwner now available to get user who created room (false in Editor and Build & Test)
- VRCObjectSync - UseGravity and IsKinematic now implemented
- SimplePenSystem Prefab updated to working version from scene
- VRCWorldPrefab has SetStrafeSpeed with default of 2
- Description of Sync Methods on UdonBehaviours now properly wrap
- Added Networking.get IsClogged method to determine if too many items are queued for the available bandwidth
- Fixed a bug where the Debug 6 display would not show for the Master user
- Fixed the issue where Objects in a VRCObjectPool were lerped back to their starting positions when being spawned after a return
- Fixed issue where OnOwnershipTransferred was not triggered on the new Owner, which is pretty dang important
- Fixed issue where FlagDiscontinuity would not prevent Interpolation
Known Issues:
- Using a variable for the value of "SetReturnValue" for "OnOwnershipRequest" does not compile properly in the graph
- Desyncs exist when enabled state is not in sync
- SDK2 Pickups hitch when dropped
- SDK2 Pickups with Animators spam errors into your log when you receive sync data
I don't have that power

Oh lol was just about to say that you should mark canny posts as complete.. Me: Refreshes Canny and sees it already done
Yep, just went through and hit em all π
Down to only 6 open tickets. Looking good for a release in about 2 more weeks if you don't fill Canny back up π
2 weeks ? NICE!
π€ π€ π€
We just put out another open beta which is next in line for release, so UnU should be the release following that (we don't want to release it alongside any other features / changes if at all possible)
I know. 1080 will be the next release - with the audio fixes from 1078 if those do well. AFAIK, that is - I've been pretty focused on my lil udon world
π

nooodls

Thank you Canny π
out of curiosity what is "The UnU SDK3 has been updated to v5!" suppose to mean. ive not been paying attention between sdk versions.
v4 was first public
v5 is now the second
which mean there was v1-3 in closed testing π€
oh brain did not work there for a second. i was thinking something totally different.
yep - just the latest version of the SDK which includes the latest features from the client plus a bunch of updates that I made in our master branch for things like graph speedups, etc.
i was use to the time stamp for the sdk version was confused with just giving a version number.
FYI if you're using the graph you will likely notice more weirdness where a noodle is floating or something, a reload will fix those. I took the graph from reloading like every few seconds to only when you add/remove nodes and variables or hook up flow noodles.
yeah, the timestamps get so confusing in my local dir though. Like - which one did I just QA again?
we'll be moving to proper semver to get it into the package manager anyway - like SDK3-Worlds 1.0.1, 1.0.2, etc

1.0.1-unu-beta-5 
π
im probably going to wait till merlin updates udonsharp before messing with the changes.
of course π
its friday so might be slower.
true ye
though one tough choice ive been trying to decide on is whether to make stuff now or wait till things from the dev stream come out. got to figure out what to prioritize.
Which thing specifically π€ π
World Tab ? UI 2.5 ? That's the second big thing I myself am EXTREMELY excited about π
I think we gave a general update on which things were coming in weeks vs months. I wouldn't wait for anything that's months out, fwiw
the player data i think is the biggest one. then ui, avatar physics from avatar to world.
ooh playerdata yea..
U# 0.19.6 should work with the new beta
I can merge the changes from live if the beta branch did
but those aren't specific beta things
We'll be jamming on Persistence (including PlayerData) as soon as UnU goes out. And yeah - we'll work to get the PlayerProgram out ahead of time since it's useful on its own and persistence stuff will need some api/cloud integration.
(aka a fair amount of server engineering and qa time)
If you got the time Merlin would be appretiated π
ya been questioning how some of the persistence world stuff will work.
have some concerns on some things.
I can try to answer some of that here if you want, though not all the design is finalized
That's fricking amazing lol! Finally could save stuff like secrets found etc onto player
Where will the PlayerData be store though ? User's PC or cloud ?
the big one is separating save data between users. sounded like only synced variables will be saved, but what if i want to do a local save of variables but not sync it for everyone.
my current assumption is if I set a variable to synced but not request serialization it would be ok.
cloud. We're prototyping it with local datastore to get an MVP working, but will launch with cloud save/load for data integrity as well as cross-platform support (ie your savegame should load on your quest just like it does on your desktop)
yey amazing though.. You need to limit the size or people will go Fing crazy and break your servers
If you really want something to be player-specific, save it into their player program.
oh yeah, there will definitely be size limits. Some combo of number of variables as well as size of saved data.
my thoughts go for a more extreme like a mmo type game. where everyone has their own save of what they did but a door doesnt unlock cause one person has gotten that far but another has not.
wasnt sure if that would fit into world persistence or be more to player data.
It all depends on how you want to handle it.
World Data = Loaded when world is instantiated, by user who created it. All variables synced to other players through regular deserialization from then on.
Player Data = Loaded when player enters world, Saved whenever you change the variables value (possibly with a cooldown).
So if you want a door to only unlock for those players who have enough XP, then make the door non-synced, check each player's XP and open it for each of them locally.
If you want it to open for everyone if anyone's xp is high enough, then do your check and change the synced variable in the world. Then any player who saves after that point will have the unlocked door.
e
ah shoot - must have left an exception in that I didn't use
Wait it will be synced automatically ? Should probably make it only when something like Data.Save() is called π€
you can update line 248 to
Debug.LogError($"Couldn't find variable name for {data.fullName}:{e.Message}");
ok the clarification does help with what they are intended for.
Modifications to SDK 
sounds like there will be a save/load option for world persistence. to choose when to do such things.
Our current design assumes that each player can trigger a manual save of World Data at any point
and is it only when creating the instance you can load the save data?
ok so people joining cant load in their own only when making a new instance.
exactly
it's like anyone can start a game from their last save and have friends join
for player data it sounds like the rate of syncing is the same limitation current UNU has.
keeps all the load logic to startup time only, so it's just join-in-progress logic after that
Loads during the game could be useful too though π€
It's not off the table but we're keeping the scope as small as possible to get this made this year π
π
ya sounds like some extra complexity especially for the world creator.
yeah. We want this to be as simple as possible for creators, you should only have to worry about startup logic.
I mean maybe but it again gives you better control
But even on creating of instance is amazing enough..
It's already going to have a fair number of pitfalls and gotchas to think through, especially around renaming objects, changing your hierarchy, adding/removing variables after people have made saves, etc.
But still π I am just mainly interested in the PlayerData don't really care about the world thing
is this a accurate view?
Most likely, yes. Not yet fully fleshed out the backend for cloud sync yet.
https://github.com/MerlinVR/UdonSharp/releases @ruby tulip
alright, was also mentioned that other players can write to those values. questioned for example a health system two people writing to the value would be handled.
π
Yea for hackers mainly.. What if hacker tried writing into your health π€
Hm - it's a good question, to which I don't 100% know the answer. I believe each PlayerProgram will always be 'owned' by the user to which it's attached, so they're ultimately in charge of the data. Clearly, this begs the question of how to update the data from events not instigated by that player. Maybe we'll need to get some sort of Custom Event Parameters exposed in order to do this, maybe you always want to react to things locally and update the logic from there. Definitely requires some more thought.
for freeze tag it would be nice to have the master set the roles for everyone.
Yea if Networked events with params would be done before this update then that would solve it I guess 
another concern i would have its variable limits. cause when requestiongserialization for a behaviour it will send all synced variables for it even if nothings changed(my assumption). question if there would be a bottleneck of how much player data we would have/ choose to update.
β« Yea being able to choose what get sent out when/send out only changed data would be great for both us and the network I'd say
since some things are still being decided probably not something that can be answered at the moment.
Yeah, I can see that. But I'm not sure if that's possible / desirable with the way our networking works. I'll bring it up though.
π
Anyhow.. If we get back to the what this channel is for just for a single message.. So far everything seems to work fine π π
oh actually just some thinking. like request ownership. sending the updated variable to another player then they decided how to use that value. either setting it or other doing other maths.
for health you could say set -4 then when the player receives it and has health set to 50 change the value to 50-4.
Yeah - sounds like event params: ApplyDamage(4)
yes but have no idea when we will be getting that
Whatchu mean π we already have that https://github.com/Miner28/NetworkedEventCaller lol
official support.
π yea I know lol
trying to think of what we can do with current tools available.
We'll think through this as we build it out. If we need custom event params, we'll include them.

We've been holding off on them because it's actually a big challenge to do them without allocating data and the engineer who is going to do them has been working on other super-important stuff like the audio bug and performance
I know you were saying something about the object[] problem π€ How can that be even solved π€
it sounds like we will be setting a udonbehaviour as the players data stuff. so could see events added to it with custom event params in the future.
oh actually clarification is it going to be a new component for player data or just setting a udon behaviour. cause if its a behaviour adding custom event support to it would be nice.
sending a custom event to someone or calling a custom event to everyone.
Still TBD but you probably set an Udon Program somewhere, which gets Instantiated at runtime into an UdonBehaviour, which would mean Custom Events and all that jazz.
π (i should probably distinguish between behaviour and program.) sounds fun.
hearing all this I want to wait longer for player data. π
same lol
been working on a player ownership pool for exactly that purpose. ill still need it for other things but would simplify the work.
g
glad to see an update
have a bug
spawn pool object, then set a synced var on it and requestserialization
onenable fires on remote but ondeserializtion does not
having to do a workaround atm, but it may be a stupid gotcha on my end
will test
Thank you @sand goblet
i just realized a stupid i did. was testing my object pool and was questioning why isnt it spawning objects for everyone? then realized i didnt have enought for everyone in my pool 
found a bug. in desktop inputmove horizontal and vertical doesnt return to 0 on key up. used phasedragons input test world to make sure (https://vrchat.com/home/world/wrld_1709c253-8ff1-4bbf-bbee-e0f9de90b6db) tried live and current open beta and it works fine.
got things working nicely. put in a delay to make sure it stays reliable and a redundancy in case something goes wrong.

had someone on live able to join me. was very confused.
@errant siren another bug for you: UdonNetworkTypes.cs needs uint adding to SyncTypes.
Should have mentioned the bug last time. U# gets annoyed and you have to add it to the file
Currently have a bug with a dropping of RPCs
When an object pool object is enabled remotely, and the effect of that enable is to send an RPC out to that pool object everywhere (hacky workaround for yesterday's bug above) that RPC has a high chance of being dropped
Based off this code: ```
/// <summary>
/// Hacky workaround for data not being delivered - once this is fixed this heavy work can be removed.
/// </summary>
public void OnEnable()
{
UnityEngine.Debug.Log($"########################################################### [Inventory.OnEnable] Inventory {name} enabled.");
SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, nameof(RedriveData));
}
public void RedriveData()
{
UnityEngine.Debug.Log($"########################################################### [Inventory.RedriveData] Got a request to redrive Inventory {name} data.");
if (Networking.IsOwner(Networking.LocalPlayer, gameObject))
{
UnityEngine.Debug.Log($"########################################################### [Inventory.RedriveData] Redriving Inventory {name} data.");
RequestSerialization();
}
}```
What this is telling me is that for the owner of the pool, network events do not fire at all for some period of time after enabling
Ergo you cannot call an RPC, for example
Or something
It's a weird nasty bug.
Another one for @errant siren (or Danly but I don't know his @ on this server)
Yup, it's specifically a master or owner of the pool bug.
I guess. Ugh. Annoying bug.
@sand goblet we'll drop in here to discuss when we can but we both try not to work on the weekends unless we're in a red-alert situation. If you file these on Canny, we'll review and tackle them next week as part of our hopefully-final push.
Just @ing for visibility
Not trying to discourage posting here, just want to set expectations
glad to hear folks are not working on the weekends
π
Canny is here Momo - enjoy your weekend π
Is that unu problem though?
not directly I suppose but it got merged into UnU and I tested it with the UnU beta π
Yes but that is Live issue.. though interesting.. lol
if it doesn't belong there it can be moved, I haven't tested it on live so it could be that it works there
fyi - unu beta is on live server version
oh... I didn't know that, thanks!
heh - it was not intentional, I think just a happenstance of the way we separate things.
yes please fix
technical question: how are player persistence values saved?
on client in cache?
on VRC servers?
or will we be able to link it with a database or something of the sorts
Your answer is here @vagrant rain β«
Is there a reason I would be getting this with UnU v5? I'm just calling RequestSerialization on a manually synced behavior. I am using U# (0.19.9 UnU v5 compat version), but I'm inclined to think it's not the issue.
Where am I able to ask questions and stuffπ ?
About?
@solar depot sounds like you're not on the unu steam branch, are you?
AH dangit that's probably it, forgot to switch back.
Where am I able to ask questions and stuffπ ?
Ok
ty
Can I get clarification, the docs for OnOwnershipRequest say the event is triggered on the owner of the object, but it also states that this logic is run locally. Is it being run only on the owner? Only on the player that requested ownership? Both? Or for all in the instance?
If the person requesting ownership returns false in OnOwnershipRequest, then it doesn't need to go further. No event will be sent and nobody else will receive the event. If they say yes, then an event will be sent and everyone receives it. But the only person where the return value matters is the current owner. If they say no, they will send an event back to the requester to make them give it back
To reduce latency and allow for setting variables immediately, the original requester will always assume that the owner doesn't disagree. So on their client, they will take ownership immediately. If the owner does disagree and they have to give it back, then the requester will see it switch back and forth and receive two OnOwnershipChanged events. In this situation, nobody else will receive the OnOwnershipChanged event because they will wait for the owner to confirm
@woven pewter you were asking about this awhile ago. Back then it was still being worked on and the behavior wasn't entirely set in stone. Now it is, and that's how it works
The docs were probably written before this was changed so they need to be updated
Ah thanks, that makes sense to me now
Can't wait for it to be in live.
With the unu update, is it possible to run a video player in a populated instance without the lag experienced in the current networking on live?
Got some confusing? logs with OnOwnershipRequest https://vrchat.canny.io/udon-networking-update/p/1069-strange-logging-when-networksetowner-is-called-within-onownershiprequest
Especially since the transfer actually goes though
Β°3
I mean, that's possible already without unu specific stuff. My TV asset has been used in a couple large event maps already, so I know it's possible.
Hello, can you please tell me why I am not synchronizing items? I added Object Sync to the VRC object, but it doesn't work for some reason(
not sure if a bug or intentional but a object sync component with a udon behaviour with a synced variable isn't being synced.
Objectsync will not sync anything if the rigidbody is sleeping, have you tried moving it?
yes which fires the serialization events. and can be seen in the image the value sent and staying at 0 when received.
tried with a pickup and without pickup component.
Hm, funny, at least you have moving things) I have as if they were local. Because of the VRC Pickup script it turns out?
did a quick test and pickups are syncing fine for me, even without a udon behaviour. are you on the "udon-networking-update" build?
Yes. I have exactly the problem for some reason in the synchronization of moving objects through VRC object sync.
video or more information about the setup of the world would be useful to try and see the issue.
Networking.IsInstanceOwner returns true for someone loading into the instance
I.e. during the OnPlayerJoined round
Is this bugged?
I feel like I live in UNU now :/ since UnU v5 I have not been on Live with any other people.. UnU is amazing π
Haha enjoy your solitude while it lasts. UnU will soon be live for all!
Hoping for that π I nearly have my world fully reworked and within a week I'll have all the things that UnU allows me to do finished.. So hopefully around that time UnU might be in Live π π
Im currently working on finishing up other projects and some small tests in unu so when it releases i can focus on it.
Got some prefabs and worlds planned. 
Is there a new user unu guide on what to use now over classic networking, existing tutorials will use the classic version and I want to really understand manual sync options and any new functions to convert existing code
There is a couple of examples using the new stuff in the sdk afaik, the example scene has several prefabs in it now, each of them handling a different topic.
Just checking out the UnU beta, and it looks like I need to rewrite all of the Udon behaviors. Anyone know if there's going to be another SDK update when this goes live? If so I'll probably just wait until then to start porting stuff over
I get a I found a bug message in the sdk3 world. Whats that mean
Good question. What was the bug message's message?
there will definitely be another SDK update, but it's not going to require you to rewrite anything. Really, none of this update requires a rewrite, it's just a matter of tweaking a few things if you want to take advantage of the new features. UnU is pretty much feature complete at this point, it's just a matter of squashing bugs left. If you see any bugs that break old content, that is absolutely something we want eyes on, please mention it!
Thanks! Is there a way to import a new SDK version without getting rid of all of the old UdonBehavior scripts? The documentation instructed me to delete all of the assets, so if I want to do this would the idea be to just re-grab all of the scripts from the old/backup version?
you might be misunderstanding then, if it tells you to delete the "SerializedUdonPrograms" folder that does not mean it will delete your actual programs, it will simply delete the compiled version of them. Compiling is an automated process that converts the source code into something that a computer can more easily read at runtime.
So if you delete the SerializedUdonPrograms, then the next time you reimport the SDK they'll just be automatically recompiled again from your source code.
This is directly from the site, and seems to imply that the whole Udon folder needs to be deleted. Is that wrong?
well then don't put your programs in the udon folder
Oh yeah, duh. I thought my program sources were going there for some reason, but they're just in a different folder
Momo will Quest support for this update come before its released to public by any chance ?
Does it currently not?
Also is it meant to throw errors whenever you try to switch to Quest on the UnU Beta ? π€
Udon network?
Oh, hm - that would be useful, eh? We don't typically make beta builds for Quest as it's tricky to switch the Quest Client around and get on the beta, etc. There should be no appreciable difference on Quest vs other clients but there could be some edge cases. What errors do you get when switching to Quest? Assuming you mean you target Android in Unity with the UnU beta imported?
Can't check till tomorrow evening but it was def something with android cause when I switched back to windows all errors disappeared.. I'll ping you tomorrow once I'll be able to try it..
And yes target android switched using unity switch not VRC SDK
@errant siren Had a few mins of free time so I SS this
My guess would be that someone did a tiny mistake while merging UnU and Live
Oopsie - yeah the Midi stuff should be #ifdefed out for Android, thanks.
π
@errant siren wanted to check if this is a bug or on purpose. was working on a video player and wanted to try and sync a vrcurl array. its listed in the network types but doesn't seam to want to sync in game.
tried with a array length of 1 to make sure it was to big but still had that error.
i know string arrays were not added to keep networking happy. assuming a similar limitation for this.
π Still idk how string arrays can make the network happy π€ I just sync my string array using classic string 
So network is same level of unhappiness as it would be with it and there's just the performance impact when converting string array to string and then string to string array.. π
seems like \n \r can't be used in names so it works perfect for names too π
But
in my case then network should be very happy.. Syncing 1kb of data and ONLY when someone joins π
with strings we can at least edit it. cant really do that with vrcurl's.
i can just make a local playlist that then sync's the current url that's playing but then if another user takes ownership that playlist wont carry over.
π€ Yea its stupid not being able to construct URLs at runtime
And the security concerns they had about it well.. People already found ways to bypass those
there will always be work arounds just trying to prevent some of them.
π
Wait I though UdonSyncMode.None is basically non synchronized π€
sorry - that name is a bit misleading. Sync is either on/off, it's really the Lerp mode
Ah I just check.. Well None is the same as Just using [UdonSynced] then
working on making a video player with all the new networking stuff, and experimenting to make sure my ideas will actually work.
Hm - just double-checked our test world on UnU beta and the VRCUrl[] test is working
im currently testing some other stuff but i can give graphs a try and do a clean test setup.
I'm doing one now, too
just did a graph test and got the same result.
and just made sure im using the "SDK3-World: https://files.vrchat.cloud/sdk/VRCSDK3-Udon-Networking-Beta-v5.unitypackage " from #open-beta-announcements
Yep, reproed the issue here as well - thanks for the canny
The unu docs say:
A single synced string can have roughly 126 characters.
Is this accurate? Other array types don't have this restriction, at least for manually synced objects
That's for continuous sync
The section in question is super unclear about that :)
In Manual sync you can sync string with 10K characters no problem if I remember correctly from my tests
looked at docs. it should specify its only for continuous sync. its just the statement above like its for any sync type.
Lol yea the Data and Specs used to be better
I'll double-check with Dan about this
Latest UnU build is now 1080, SDK v6.1:
SDK3-World: https://files.vrchat.cloud/sdk/VRCSDK3-Udon-Networking-Beta-v6.1.unitypackage
- Fixed issues where SDK2 Pickups hitched when dropped and SDK2 Pickups with Animators spam errors into your log when you receive sync data
- Fixed issues where Input Axis events didn't return to center, and InputLookVertical events didn't trigger at all.
- Using a variable for the value of SetReturnValue for OnOwnershipRequest now compiles properly in the graph
- VRCObjectSync: Re-enabled the AllowCollisionOwnershipTransfer checkbox and improve the way it works
- Ownership Request: Fix issue where the requester (current owner, in their mind) needed to check if a subsequent transfer came from the last owner.
- VRCPedestal.SwitchAvatar can't be called directly over the network anymore.
- Fixed issue where OnOwnershipTransferred didn't fire when the Owner leaves the room
- Fixed issue where Objects could desync if their enabled state was not in sync
- Fixed issue where Pickups would interpolate in a jerky manner for a few frames after they were dropped


Neat
I can use the InputLookVertical fix now, great timing.
Hope to see UNU arrive soon, my pool table world is crying out for players π
It's planned to be the next release. We've only got one bug we currently consider an actual blocker, the rest of the issues will be resolved but will not hold up a release. The timeline is complicated a bit by the issues we found with the current release-bound open beta that was tested at the community meetup this last weekend. We need to get this release fixed up before we can schedule the next one.
Yup, I was joking at CM about the delay π
Folks checking out the networking beta might want to take a look at my test world: https://vrchat.com/home/launch?worldId=wrld_7c23c9c3-fa6f-40ed-8f75-776fed2eef4e
The main attraction is the revised pool table prefab. However, there's also a couple of other little things I think folks would like. I'm working on a synced item system at the moment, and you can test it out in-world both in VR and desktop!
(If you're on desktop, F to open/close the menu and Q to stash items in your inventory)
I assume you have unity building for android currently? Those lines are supposed to be #ifdeffed out on android but slipped in the beta sdks.
It was reported but I guess it didn't get fixed yet in the new release
Since the beta isn't on quest you could just ignore it for now and work on windows π€·
For now it will unless you fix it yourself manually
Is there even ANY chance that UnU will be released within next 8 days ? π€ Or is there absolutely no chance at all ?
yep there is
Known Issue with UnU v6.1 - Switching to Android gives you the following errors:
Assets\VRCSDK\SDK3\Editor\Components3\VRCMidiEditor.cs(17,53): error CS0246: The type or namespace name 'VRCPortMidiInput' could not be found (are you missing a using directive or an assembly reference?)
Assets\VRCSDK\SDK3\Editor\VRCMidiWindow.cs(73,13): error CS0246: The type or namespace name 'VRCPortMidiInput' could not be found (are you missing a using directive or an assembly reference?)
Assets\VRCSDK\SDK3\Editor\VRCMidiWindow.cs(73,41): error CS0246: The type or namespace name 'VRCPortMidiInput' could not be found (are you missing a using directive or an assembly reference?)
Import the attached package on top of the SDK to patch these issues.
Just flagging this here as it's a really useful workaround to know https://feedback.vrchat.com/udon-networking-update/p/unu-v6-it-is-only-possible-to-mark-an-objectsync-component-as-important-by-attac
At the moment you can make any ObjectSync object sync better by attaching a dummy pickup script to it.
You broke it 

The only reason I pinky promised is the fact I'm not on the VRC Team π
im suing
Its 2-3 weeks from now π I ||don't|| promise! ||Sorry I mean 2-3 months||
First we gotta wait for #open-beta-announcements last update to be released and then MAYBE.. MAYBE UnU.. :/
I mean at least I got time to rework my entire map from scratch and using all the things UnU allowed us to do.. Though I finished the rework two weeks ago lol π
Still love this picture though
oof
its our own fault. we keep breaking things causing it to be delayed.
lol, that's worded exactly the same as a post from the APB devs from 5 years ago saying that the engine upgrade would be ready in "weeks not months"
(It's still not out)
When dealing with estimates, think of a reasonable number you think would work, then double that number and up the unit.
6 weeks becomes 12 months, 4 months becomes 8 quarters (2 years).
So if the update #open-beta-announcements would actually get released on Monday.. UnU could maybe come the same week
Quietly praying π
wonder if they'll roll up the "identity update" as well
do someone know if i should wait for unu? or should i just build the map that i want but the object pool of the unu would be helpful.
That depends..
If UnU makes making your map a lot easier.. Then wait for it.. If not.. If you won't use many features if any from UnU then don't wait.. π
i have a card game in my mind but the object pool of unu would help me. i dont need to make one myself.
Or another thing.. There is this open beta..
You can do it in it.. And then just release the world after its out of open beta
Like I am doing with my world
yeah was of thinking it.
I myself have reworked my entire world from scratch.. Now just waiting for the release of UnU to upload the world..
And UnU is amazing π Went from little over 40K lines of code in U# to 7K if I remember correctly
ohhh nice. then i try out the beta π
Wouldn't be surprised if the current open beta gets released and unu immediately goes to normal open beta from there
Given that the current open beta had been delayed a bit
Couldn't UnU just go straight to release
It's been tested in this beta wasn't it ?
Well perhaps like 1-3 days open beta just to test if something breaks when they merge it with master maybe..
Probably a lot less than the usual open beta. Took a while before anyone reported the camera only being usable by the instance master after all :P
bd_ is on the right track here.
It's already merged with master. Mostly need to make sure nothing breaks when merging in the current release, which is on its own branch.
Btw @woven pewter - what do you mean by the VR Camera here? https://vrchat.canny.io/udon-networking-update/p/1069-nonmaster-players-cant-pick-up-the-vr-camera
The camera you get by opening your quick menu and going to the camera submenu, then opening the photo camera
Oh wow- ok, that's weird. Thanks for reporting it.
for some reason only the master player can pick it up Β―_(γ)_/Β―
hard to notice because everyone testing things in UNU is probably doing so with multiple desktop clients π
I've been doing a bunch of VR testing but it's in a world with its own pickup cameras so I never take out the VRC one
worth noting - it's the current master who can pick up the camera. An initially nonmaster player will gain the ability to pick up the camera if the master leaves and they become master
Great, that should help to narrow it down, thanks.
UnU 
π
π


π
π
That's me yesterday
When I broke everything
try to fix something and 50 more bugs π
def not.. You didn't see anything..
only 50? damn not bad
but what is when you fix one of the 50 bugs? xD
60 open issues in my airtable rn
yes, one step forwards, two steps back
Sooo π UnU = Open beta π€

Will we get quest UnU beta
need to do some performance tests 
Yes check
Yea just not for UnU sadly..
There's something momo said about quest betas
hmm yeah
Yea no differences except the performance..

interesting tho, i figured that due to the nature of the quest platform there would be no betas
haha yeah quest performance is something alright
xD yea need to test my deserialization on quest.. hope I don't kill it with it
oh boy lol
how many udonbehaviours with custom deserialization stuff
and i guess it should be fine considering manual sync is a thing? its not like thats running 5 times per second now
Well .. 1 that runs 10kb of data once after join.. and upto 80 that can run every 350ms
1 per player
why the fuck are you syncing 10kb of data lmfao
And their speed is variable lol depending on amount of data that needs to be transfered
Late sync
hmm fair i guess
damn i am so looking forward to being able to use this shit
Publicly? Yes same.. I pray everyday that there are no more bugs and it comes soon into public
yep.. i have been putting off a giant fucked rewrite for months now for this update
i guess i could already get started with the beta
but i still need to update the world for other stuff
and that'll get messy
Lol yea I rewrote my entire world from scratch basically .. don't regret it for s moment.. well.. except when we were bug testing 
40k lines -> 8k lines :)
It does.. even Rider starts glitching when you have script with 10 or 15k lines.. 3k methods..
I mean most of the methods were basically parameter network functions.. now with me being able to pass parameters into networked events.. its so much easier.. both to write and to think of how to write it
yeah exactly, figured as much
wait being able to pass parameters into networked events?
i thought we didn't have that yet
We don't officially but I made my own way