#udon-networking

1 messages Β· Page 31 of 1

signal sequoia
#

I can't imagin people with bad computer and the array sync...

timber pebble
#

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

obsidian cedar
#

lol πŸ˜„

timber pebble
#

Submenus have like no limitations lol

timber pebble
#

But I already did

#

I wrote a python script to generate them

#

Working with unity .meta files are a nightmare though

obsidian cedar
# errant siren but pls dont

I think during the Open beta you had to expect that people will be trying bunch of EXTREME stuff with this and overloading shit πŸ˜„ πŸ˜„

errant siren
#

why do you want this kitty to cry 😿

timber pebble
#

Inb4 someone makes a byte[] array with just an mp4 of the bee movie and forces it to sync across the network

obsidian cedar
#

πŸ€¦β€β™‚οΈ

errant siren
#

ok beta cancelled

obsidian cedar
timber pebble
#

And just shows each byte of the video individually on the ui

sudden current
#

justified

obsidian cedar
#

πŸ˜„

timber pebble
#

Fair point

obsidian cedar
timber pebble
#

If udon on avatars was a thing that happened all hell would break loose

#

And I think I'd be okay with it

errant siren
#

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 vrpill

#

updated the docs to reflect this

obsidian cedar
#

just use ulong[] πŸ˜„

sharp solstice
#

this is beautiful, momo ❀️

timber pebble
#

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

obsidian cedar
#

Security

timber pebble
#

Or like have a bunch of avatars in a list and the world grabs them and sets pedestals id's to that

timber pebble
#

Ofc giving people full access to the internet is a big no

obsidian cedar
#

Would be super nice.. Would love to use it for leaderboard and some other board stuff but Security..

timber pebble
#

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

obsidian cedar
#

But what would be nice to have is a way to store some kind of a save file.. πŸ˜„

timber pebble
#

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

obsidian cedar
#

.. Limit ofc

mild sail
#

Very much so

obsidian cedar
#

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 ? πŸ€”

timber pebble
#

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

blissful lark
#

Udon has a 10 second timeout that could easily be reduced to a few ms...

obsidian cedar
#

What does Suffering mean πŸ˜„ ?

#

Is that the amount of bytes that needs to be sent out ? πŸ€”

frozen igloo
#

that means the network is suffering, yes

obsidian cedar
#

lol

frozen igloo
#

the network is a good boy, don't hurt it

obsidian cedar
#

Its just for science but yes.. Network is very very good boy

obsidian cedar
#

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 πŸ€”

sand goblet
#

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 πŸ˜„

fresh stump
#

I need to try the object pooling that sounds amazing, is it like network instantiation?

frozen igloo
#

It behaves quite differently but the goal is the same, yes

fresh stump
#

Is there documentation on it yet?

frozen igloo
#
fresh stump
#

Yo its Riesen, thats a german thing :D

obsidian cedar
#

Wow.. So far I am LOVING THIS! The options! The possibilities! πŸ˜„

obsidian cedar
#

I think it would be nice to get access to the suffering thing from Udon if possible

#

GetSuffering() πŸ€”

tulip walrus
obsidian cedar
#

Why literally all canny posts are about documentation πŸ˜„ ?

thorn adder
#

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.

opal summit
thorn adder
#

Also, only new owners were displayed this warning.

worn arrow
#

Every time an update happens my head hurt more and more lmao

signal cloud
#

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

real fractal
opal summit
#

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.

ruby tulip
#

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.

opal summit
#

OnEnable before start looks intentional

real fractal
obsidian cedar
#

I mean isn't it kinda what you would expect ? OnEnable then Start ? That's what I would expect atleast

ruby tulip
#

i would expect it to fire when a gameobject gets enabled not at the start of a scene starting.

opal summit
#

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 πŸ‘€

ruby tulip
obsidian cedar
modern stratus
#

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.

blissful lark
modern stratus
#

^ 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.

solar depot
#

Yup

modern stratus
#

So long story short, please give us access to Awake() vrcLabs

opal summit
#

Having a form of prestart would be nice but we can work around it with execution order.

modern stratus
#

I mean doing a bool check in OnEnable to fake an Awake works but shouldnt be practiced.

opal summit
#

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.

modern stratus
#

OnEnable() -> FakeAwake() -> FakeEnable() -> FakeStart() vrpill

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.

obsidian cedar
#

lol

modern stratus
#

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.

obsidian cedar
#

πŸ˜„ 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 πŸ€”

real fractal
#

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...

ruby tulip
#

πŸ‘€ working on a simple object pool system to have the master assign ownership of objects to people joining.

obsidian cedar
#

I tried all the things I have use for and they all work fine.. vrcHappy

woven pewter
#

I tried my mahjong world unmodified, things seem to work as before. Though, I can make them work better now for sure :)

obsidian cedar
#

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 πŸ˜„

errant siren
sand goblet
#

such as not being able to pick up the camera

#

πŸ˜„

#

@frozen igloo Does syncing a solo uint work atm

frozen igloo
#

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

jaunty ice
#

but damn this new networking update

#

it is looking absolutely great

#

its going to make everything so much better

thorn adder
thorn adder
opal summit
#

Yes, this is a bug. OnOwnershipTransfer doesn't fire for the owner...

obsidian cedar
#

Jesus how I love this update... Already have 3 new features for my world prepared as soon as this update releases.. πŸ˜„

thorn adder
#

By the way, is there a canny for this bug?

thorn adder
ruby tulip
#

this is how it looks on live.

thorn adder
ruby tulip
#

πŸ‘Œ i think you will find the new features working for you better now.

thorn adder
ruby tulip
dry zodiac
#

feature. ship it.

neon aurora
#

Combat system again?

ruby tulip
#

nope its looking like if a player teleports around the time someone is joining this happens.

ruby tulip
#

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.

fresh stump
#

aaaaaa i cant wait to be back home

#

I wanna do so much udon stuffs , but im stuck in the hospital now

#

ree

blissful lark
#

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)
obsidian cedar
#

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

ruby tulip
#

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.

frozen igloo
#

@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.

ruby tulip
#

i should be. i only have the "danly - udon reliable and array sync" available, other then choosing none.

#

oh wait

frozen igloo
#

Yeah that's the closed build. The open build is accessed from the password SyncYourTeethIntoUdon

ruby tulip
#

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.

obsidian cedar
#

12 people really wish to read client's Suffering πŸ€” I wonder if they mean the same kind of suffering I do πŸ˜„

strange gyro
#

Is there any chance of SendCustomEventDelayed being merged into this branch if it hasn't already?

errant siren
obsidian cedar
#

So we have about month more or less to prepare our worlds for this update if we want vrcThinking

ruby tulip
#

@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.

thorn adder
#

I see.

#

I was surprised that there was such a bug...
Thank you for sharing the information.πŸ‘

ruby tulip
#

that specific event has been broken and fixed several times. it gets hard to track when its working or not.

thorn adder
#

Oh, this bug may be well annoying.....

jovial gyro
#

this is fun (β•―Β°β–‘Β°οΌ‰β•―οΈ΅ ┻━┻

#

one single pickup xD

echo axle
#

@jovial gyro I've only been studying programming in high school for 3 or 4 months, will this be easy to understand?

echo axle
jovial gyro
#

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
# echo axle <@303902396185313280> ?

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.

echo axle
#

Ok

#

How much time taked u to learn this dude?

#

3 years? Xd

jovial gyro
#

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.

jovial gyro
#

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.

night bay
#

I usually avoid local test because of the issues that prop up so frequently in them

jovial gyro
#

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.

woven pewter
#

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.

frozen igloo
#

yyyyup

woven pewter
#

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?

sand goblet
#

v0.2.0 has a public package now you can download.

woven pewter
#

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 :)

errant siren
woven pewter
#

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

obsidian cedar
#

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

fresh stump
#

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

errant siren
fresh stump
#

K thank you for helping :3

woven pewter
#

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?

frozen igloo
#

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

woven pewter
#

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

ruby tulip
frozen igloo
#

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

woven pewter
#

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

obtuse solar
#

would it be possible to send data more quickly by using multiple udon behaviours?

ruby tulip
#

probably. but you still have the 11kb per second limit.

fresh stump
#

when live

night bay
#

2-3 weeks @fresh stump

fresh stump
#

pinky promise????

night bay
#

I can pinky promise C:

woven pewter
#

You can hit the 11kb limit with a single behaviour if you use large arrays

obsidian cedar
#

2-3 weeks vrcHappy

woven pewter
obsidian cedar
#

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 ? πŸ€”

oblique reef
#

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.

errant siren
oblique reef
#

πŸ‘

obsidian cedar
#

Just came into this channel to ask about SendCustomEventDelayed but I see I am bit too late.. πŸ˜„

obsidian cedar
#

Also seems like being able to read Client Suffering is not planned in any way :/

obtuse beacon
#

is parameters for custom network events planned for the network update?

frozen igloo
#

not this update, no

obsidian cedar
#

@obtuse beacon Its pretty easy to do your own with Manual sync πŸ™‚

obsidian cedar
#
obsidian cedar
#

Why am I getting unread message here every couple hours πŸ€”

fresh stump
#

Same

#

this channel is cursed for my discord

obsidian cedar
#

Someone probably posting something and deleting it πŸ€”

#

Anyhow excited for the release.. happypanda Already have about 20% of all of my scripts Network Update ready

raw umbra
#

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

obsidian cedar
#

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.. whoknows

frozen igloo
#

I would not rely on getting the event exactly once. Probably good to still have some sort of record system that ignores duplicate data.

obsidian cedar
#

Like 5 variables in first 5 variables in second

frozen igloo
#

if you're using manual sync, you should get it all at once yes

obsidian cedar
frozen igloo
#

continuous sync might be a bit more fluid

obsidian cedar
#

THANK GOD!.. That's literally what I need though should makes me a bit worried but whoknows

obsidian cedar
#

Any special reason why byte is not supported according to this ?

#

Ah hmm CTRL+F I found that byte[] is planned πŸ€”

north mountain
#

isnt char basicly kinda the same as byte?

obsidian cedar
#

πŸ€”

#

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.. πŸ™‚

north mountain
#

yeah kinda weird that they got all those types implemented but not the byte Β―_(ツ)_/Β―

obsidian cedar
#

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.. πŸ˜„

errant siren
raw umbra
#

Gotcha

obsidian cedar
errant siren
obsidian cedar
solar depot
#

Based devs

woven pewter
#

In the meantime color32 can be synced and contains four bytes :)

errant siren
sand goblet
haughty vine
#

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

woven pewter
#

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 RequestSerialization from OnPostSerialization to 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

obsidian cedar
#

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 ?

errant siren
# obsidian cedar Is OnSpawn working ? I am not able to get it to work..

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!

ruby tulip
errant siren
woven pewter
#

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?

woven pewter
#

yep

errant siren
#

Ah, ok. I can't see that since I'm logged in.

high pagoda
#

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

errant siren
errant siren
high pagoda
#

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.

errant siren
#

^that post explains how to do it if you're new to Steam betas

obsidian cedar
sharp solstice
#

also having some trouble with the object pool not synching at all, but I'll see if I can figure that out myself πŸ™‚

obsidian cedar
#

Are you using TryToSpawn ? And Return only

sharp solstice
obsidian cedar
#

Interesting I'll test it out more later πŸ€”

sharp solstice
#

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.

obsidian cedar
#

WOW

#

πŸ˜„

hallow sonnet
#

N-networking..... when did this get here?

errant siren
obsidian cedar
#

πŸ˜„

hallow sonnet
#

Does this include animation syncing as well?

obsidian cedar
#

Nice @errant siren!

#

Will it return boolean ?

#

If suffering will be more than how much πŸ€”

woven pewter
#

(I feel somewhat strongly about this particular issue :P)

errant siren
woven pewter
#

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

obsidian cedar
solar depot
#

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.

obsidian cedar
#

that is perfect idea!..

errant siren
#

Yeah, a normalized float makes some sense - lets us update the targets if needed without breaking backoff systems that already exist. Will discuss internally.

woven pewter
#

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

solar depot
#

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.

woven pewter
#

yep, but requires every behavior to reinvent the wheel for congestion control

solar depot
#

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.

sharp solstice
#

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.

jovial gyro
#

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))
errant siren
jovial gyro
#

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 πŸ™‚

errant siren
#

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...

jovial gyro
#

Ok, noted. I guess I'll wait until the delay methods are available in the beta version of U# then.

obsidian cedar
#

With great power comes bad life choices

jovial gyro
#

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. Β―_(ツ)_/Β―

obsidian cedar
#

Why do you need some many RequestSerilizations ?

jovial gyro
#

Because my UI elements trigger the request for each changed element

obsidian cedar
#

Try designing it better then whoknows Do not spam the network its not good practice πŸ™‚

jovial gyro
#

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 vrcThinking

obsidian cedar
#

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

jovial gyro
#

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;
            }
        }
obsidian cedar
jovial gyro
#

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)

frozen igloo
#

Add some debug log or indicator when you call requestserialization to make sure you're not doing it too often

obsidian cedar
#

As I was saying from my tests you can call serilization every about 200-250ms it seems.. (Not confirmed)

frozen igloo
#

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

obsidian cedar
#

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

jovial gyro
frozen igloo
#

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

jovial gyro
#

sure, I can send you the link to the files on git

frozen igloo
#

oh nice

jovial gyro
#
frozen igloo
#
        {
            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
jovial gyro
#

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

frozen igloo
#

Try debug logging the values in OnPreserialization to see if they actually are being set

jovial gyro
#

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 -.-

solar depot
#

All part of the development process. No worries.

obsidian cedar
#

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 ?

woven pewter
#

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

frozen igloo
#

you're probably looking for OnPreserialization. That happens before they've been sent

obsidian cedar
#

I wonder if there will be any talk about network beta on Dev Stream πŸ€”

woven pewter
#

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

clever merlin
#

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.

obsidian cedar
#

Yea we need this fast.. πŸ˜„ Not necessarly released but BUG FIXEEEES sad

errant siren
#

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 πŸ˜›

clever merlin
#

Awesome

woven pewter
#

so that's what the unu in "momo-unu-staging" meant πŸ€”

ruby tulip
#

Udon Network Update im assuming.

obsidian cedar
#

So if Open Beta is probably gonna be out this week πŸ€” Does that mean that release might come within 2 weeks ? ascared I think I gotta start reworking my world faster

errant siren
obsidian cedar
#

πŸ‘ 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..

fresh stump
obsidian cedar
fresh stump
#

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

obsidian cedar
#

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

fresh stump
#

Yeah i've gotcha..

obsidian cedar
#

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());
        }

fresh stump
# obsidian cedar Yea.. Its amazing.. So many supported types πŸ˜„

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

obsidian cedar
#

πŸ˜„

#

Anyhow I'd really want to see this thing I made done in Graph..

fresh stump
#

Well.. good luck.. haha

obsidian cedar
#

Oh no I can't do graph πŸ˜„

fresh stump
#

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 πŸ˜›

obsidian cedar
#

πŸ˜„

clever merlin
#

I'm using UdonSharp as well, lol

obsidian cedar
#

Doing complex stuff with Graphs is impossible..

#

So yea If someone is doing some advanced stuff they are usually using U#.. πŸ˜„

errant siren
#

Not impossible, but it gets unwieldy after a certain point. Though the next release is much faster on Groups, Reloading and Compiling

obsidian cedar
#

πŸ˜„ I'D like to see someone do 10000 events with Graphs.. πŸ™‚

errant siren
#

I wouldn't

obsidian cedar
#

πŸ˜„

#

My guess is.. It would just crash Unity the scond you load it up

errant siren
#

though I'd wager if you have 10k events, you're probably trying to work around a missing feature or something like that

obsidian cedar
clever merlin
#

Screw it, I'm opting in cause I want to test this stuff out.

obsidian cedar
#

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) πŸ™‚

clever merlin
#

Okay I opted in

obsidian cedar
errant siren
#

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

obsidian cedar
#

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 πŸ€”

errant siren
#

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?

obsidian cedar
obsidian cedar
#

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

errant siren
#

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

obsidian cedar
#

πŸ˜„ Well whoknows No good solution as of now so it has to do it for now

errant siren
#

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

obsidian cedar
#

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 sad

#

Currently facing one problem though.. How can I avoid the Synced string being synced to late joiners πŸ€” Can I even do that

errant siren
#

nope - if it's a synced variable, then late joiners get it, that's the whole job of synced vars πŸ˜„

obsidian cedar
#

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 ?

woven pewter
#

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.

obsidian cedar
#

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..

obsidian cedar
hazy ibex
#

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

obsidian cedar
#

Player Ids rarely get larger than 3 digits so its not that super lot bandwidth wasted and It will 100% work πŸ˜„

errant siren
#

Alright, I gotta jet to go get ready for the stream. ttyl!

woven pewter
pearl grail
#

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

woven pewter
#

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 πŸ˜›

obsidian cedar
woven pewter
obsidian cedar
#

And this will too.. At start of it πŸ™‚

woven pewter
#

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

hazy ibex
#

... 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

obsidian cedar
#

I feel like adding a 1 int won't cause difference.. If I am already parsing string from 20 different strings

woven pewter
#

I suppose, but every little thing helps πŸ˜›

obsidian cedar
#

πŸ˜„ I guess so

clever merlin
#

I'm trying to figure out how to make use of these new network stuff on U#, lol.

pearl grail
obsidian cedar
clever merlin
#

Where can I get it?

obsidian cedar
#

U# github

woven pewter
#

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 πŸ˜›

obsidian cedar
#

Its 1.19.6 I think

woven pewter
#

but continuous synced stuff should continue to work

#

worth a test of course

clever merlin
#

I'm currently on 0.19.8

obsidian cedar
#

Yea you'll need to downgrade

#

Also don't forget that some stuff from Live is not in this version

#

Specifically SendCustomEventDelayed

clever merlin
#

Ooh I see.

#

Good thing I haven't made use of that in my code.

obsidian cedar
#

πŸ˜„ Well I need to make use of that in my code sad But still waiting for it to be merged πŸ™‚

clever merlin
#

Do I need to delete the UdonSharp folder?

obsidian cedar
#

It should work without deleteing it

clever merlin
#

Since I'm downgrading, I'm wondering if it'll mess it up if I don't delete stuff first.

obsidian cedar
#

Try it.. You'll find out πŸ˜„ But I dont thik so

clever merlin
obsidian cedar
#

Did you update both VRCSDK and U# πŸ€”

clever merlin
#

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.

real prawn
obsidian cedar
fresh stump
#

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

obsidian cedar
#

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

fresh stump
#

I guess

#

Reminds me, i need to send a ticket and explain how modders make menus useless

obsidian cedar
#

You can prevent events being called by putting _ before method name BTW

fresh stump
#

Ye ofc

frozen igloo
#

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

fresh stump
#

World triggers yeh

obsidian cedar
#

You can 1. Encrypt those 2. Send the player who sent then as a parameter and check if he has permission

fresh stump
#

What event cant be called over the network

#

Even portals are indtanced ndtwork side

obsidian cedar
#

Events with _ cant be called over network πŸ€”

fresh stump
#

Ik

#

But have you seen whats been happening

#

Lately lool

obsidian cedar
#

And none of integrated can be called over network too

#

so Start, OnDes, OnPreSer etc..

frozen igloo
#

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

fresh stump
#

Uptp the creators

frozen igloo
#

Also that requires ownership, and ownership can still be messed with

fresh stump
#

Yup

obsidian cedar
fresh stump
#

Admin privs is still possible but will swiftly ban

obsidian cedar
#

There is the new event to allow ownership transfer

frozen igloo
#

Eh, denying transfer is not a security feature

fresh stump
#

"

frozen igloo
#

It's not going to be impervious to modded clients

fresh stump
#

^^^

obsidian cedar
#

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..

fresh stump
#

Wont work sorry

obsidian cedar
#

If Master is hacker then world is FUCKED

frozen igloo
#

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

fresh stump
#

Udon was made with zecurity in mind. Look at it now

#

LMFAO

#

Kirai send custom udon events

#

A 16 year old

obsidian cedar
#

Yea Udon security is just shit

#

Well.. πŸ˜„

#

VRChat security..

#

Not any better

fresh stump
#

Ehhhh wrong there IMO

#

Pre il2cpp yeah it was bad

obsidian cedar
#

Now it is still BAD

fresh stump
#

Post il2cpp?

#

How

obsidian cedar
#

Yes

#

Il2cpp jesus so easy to fuck around..

fresh stump
#

Not as easy as before

obsidian cedar
#

10 year old can fuck around that

fresh stump
#

Also IPs arent everywhere anymore

obsidian cedar
obsidian cedar
fresh stump
#

And desync

obsidian cedar
#

And they finally fixed Vote Kick / Kick to be server side

fresh stump
#

Invoking any function is far from hard

#

Cant photon bots still kick others LOL

obsidian cedar
#

? you mean VRChat functions ? hard ?

#

Its quite very easy

fresh stump
#

Ik.....

#

Im an engineer loool

#

Crap I gotta send this ticket to the devs

shy trout
#

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?

solar depot
#

0.19.6 is the network beta for U# afaik

zealous patio
#

@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

errant siren
#

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

obsidian cedar
#

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

errant siren
#

going to write the release notes here so I can pin and then modify them a little without bugging Tupper:

obsidian cedar
errant siren
#

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
obsidian cedar
#

Oh lol was just about to say that you should mark canny posts as complete.. Me: Refreshes Canny and sees it already done

errant siren
#

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 πŸ˜›

obsidian cedar
#

2 weeks ? NICE!

errant siren
#

🀞 🀞 🀞
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)

obsidian cedar
#

You mean 1080 or 1078 πŸ€”

#

There's too many ascared

errant siren
#

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

ruby tulip
#

πŸ‘€

obsidian cedar
ruby tulip
#

nooodls

errant siren
obsidian cedar
#

Thank you Canny πŸ™‚

ruby tulip
#

out of curiosity what is "The UnU SDK3 has been updated to v5!" suppose to mean. ive not been paying attention between sdk versions.

obsidian cedar
#

v4 was first public

#

v5 is now the second

#

which mean there was v1-3 in closed testing πŸ€”

ruby tulip
#

oh brain did not work there for a second. i was thinking something totally different.

errant siren
#

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.

ruby tulip
#

i was use to the time stamp for the sdk version was confused with just giving a version number.

errant siren
#

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

obsidian cedar
errant siren
#

1.0.1-unu-beta-5 vrcCatThink

ruby tulip
#

πŸ‘

#

im probably going to wait till merlin updates udonsharp before messing with the changes.

errant siren
#

of course πŸ˜„

obsidian cedar
#

same.. πŸ˜„ Waiting too

#

Merlin usually updates it within hour πŸ™‚

ruby tulip
#

its friday so might be slower.

obsidian cedar
#

true ye

ruby tulip
#

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.

obsidian cedar
#

Which thing specifically πŸ€” πŸ˜„

#

World Tab ? UI 2.5 ? That's the second big thing I myself am EXTREMELY excited about πŸ™‚

errant siren
#

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

ruby tulip
#

the player data i think is the biggest one. then ui, avatar physics from avatar to world.

obsidian cedar
#

ooh playerdata yea..

blissful lark
#

U# 0.19.6 should work with the new beta

obsidian cedar
#

What was the timestamp on this ?

#

Doesn't fully merlin

#

No CustomEventDelayed

blissful lark
#

I can merge the changes from live if the beta branch did

#

but those aren't specific beta things

errant siren
#

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)

obsidian cedar
#

If you got the time Merlin would be appretiated πŸ™‚

ruby tulip
#

ya been questioning how some of the persistence world stuff will work.

#

have some concerns on some things.

errant siren
#

I can try to answer some of that here if you want, though not all the design is finalized

obsidian cedar
#

Where will the PlayerData be store though ? User's PC or cloud ?

ruby tulip
errant siren
#

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)

obsidian cedar
#

yey amazing though.. You need to limit the size or people will go Fing crazy and break your servers

errant siren
#

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.

ruby tulip
#

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.

errant siren
#

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.

blissful lark
errant siren
#

ah shoot - must have left an exception in that I didn't use

obsidian cedar
errant siren
# blissful lark e

you can update line 248 to

Debug.LogError($"Couldn't find variable name for {data.fullName}:{e.Message}");
ruby tulip
#

ok the clarification does help with what they are intended for.

ruby tulip
#

sounds like there will be a save/load option for world persistence. to choose when to do such things.

errant siren
ruby tulip
#

and is it only when creating the instance you can load the save data?

errant siren
#

that's right

#

if you want to restart from a save, drop a portal to a new instance

ruby tulip
#

ok so people joining cant load in their own only when making a new instance.

errant siren
#

exactly

#

it's like anyone can start a game from their last save and have friends join

ruby tulip
#

for player data it sounds like the rate of syncing is the same limitation current UNU has.

errant siren
#

keeps all the load logic to startup time only, so it's just join-in-progress logic after that

obsidian cedar
#

Loads during the game could be useful too though πŸ€”

errant siren
obsidian cedar
#

πŸ˜„

ruby tulip
#

ya sounds like some extra complexity especially for the world creator.

errant siren
#

yeah. We want this to be as simple as possible for creators, you should only have to worry about startup logic.

obsidian cedar
#

I mean maybe but it again gives you better control

#

But even on creating of instance is amazing enough..

errant siren
#

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.

obsidian cedar
#

But still πŸ˜„ I am just mainly interested in the PlayerData don't really care about the world thing

errant siren
#

Most likely, yes. Not yet fully fleshed out the backend for cloud sync yet.

obsidian cedar
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.

obsidian cedar
#

Yea for hackers mainly.. What if hacker tried writing into your health πŸ€”

errant siren
# ruby tulip alright, was also mentioned that other players can write to those values. questi...

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.

ruby tulip
#

for freeze tag it would be nice to have the master set the roles for everyone.

obsidian cedar
#

Yea if Networked events with params would be done before this update then that would solve it I guess awhoknows

ruby tulip
#

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.

obsidian cedar
#

⏫ 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

ruby tulip
#

since some things are still being decided probably not something that can be answered at the moment.

errant siren
obsidian cedar
#

πŸ‘

#

Anyhow.. If we get back to the what this channel is for just for a single message.. So far everything seems to work fine πŸ™‚ πŸ˜„

ruby tulip
#

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.

errant siren
#

Yeah - sounds like event params: ApplyDamage(4)

ruby tulip
#

yes but have no idea when we will be getting that

obsidian cedar
ruby tulip
#

official support.

obsidian cedar
#

πŸ˜„ yea I know lol

ruby tulip
#

trying to think of what we can do with current tools available.

errant siren
#

We'll think through this as we build it out. If we need custom event params, we'll include them.

obsidian cedar
errant siren
#

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

obsidian cedar
#

I know you were saying something about the object[] problem πŸ€” How can that be even solved πŸ€”

ruby tulip
#

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.

errant siren
ruby tulip
#

πŸ‘Œ (i should probably distinguish between behaviour and program.) sounds fun.

#

hearing all this I want to wait longer for player data. πŸ‘€

obsidian cedar
#

same lol

ruby tulip
#

been working on a player ownership pool for exactly that purpose. ill still need it for other things but would simplify the work.

sand goblet
#

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

errant siren
#

Thank you @sand goblet

ruby tulip
#

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 vrcWOAH

ruby tulip
ruby tulip
#

got things working nicely. put in a delay to make sure it stays reliable and a redundancy in case something goes wrong.

ruby tulip
#

had someone on live able to join me. was very confused.

sand goblet
#

@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

sand goblet
#

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.

errant siren
#

@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.

sand goblet
#

Just @ing for visibility

errant siren
#

Not trying to discourage posting here, just want to set expectations

sand goblet
#

glad to hear folks are not working on the weekends

#

πŸ˜„

#

Canny is here Momo - enjoy your weekend πŸ™‚

obsidian cedar
jovial gyro
obsidian cedar
#

Yes but that is Live issue.. though interesting.. lol

jovial gyro
#

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

woven pewter
#

fyi - unu beta is on live server version

jovial gyro
#

oh... I didn't know that, thanks!

obsidian cedar
#

Wait what ?! πŸ˜„

#

lol nice

#

lies then

errant siren
#

heh - it was not intentional, I think just a happenstance of the way we separate things.

pseudo magnet
#

yes please fix

vagrant rain
#

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

obsidian cedar
solar depot
#

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.

drowsy raptor
#

Where am I able to ask questions and stuffπŸ˜…?

solar depot
#

About?

frozen igloo
#

@solar depot sounds like you're not on the unu steam branch, are you?

solar depot
#

AH dangit that's probably it, forgot to switch back.

drowsy raptor
#

Where am I able to ask questions and stuffπŸ˜…?

solar depot
#

again I ask, about what?

#

There are multiple channels, each for different topics.

drowsy raptor
#

Ok

steep sage
#

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?

frozen igloo
#

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

steep sage
#

Ah thanks, that makes sense to me now

clever merlin
#

Can't wait for it to be in live.

obsidian cedar
#

I can't wait for the last few bugs to be fixed πŸ˜„

rocky spindle
#

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?

steep sage
#

Especially since the transfer actually goes though

obsidian cedar
#

Β°3

solar depot
modern gate
#

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(

ruby tulip
#

not sure if a bug or intentional but a object sync component with a udon behaviour with a synced variable isn't being synced.

frozen igloo
#

Objectsync will not sync anything if the rigidbody is sleeping, have you tried moving it?

ruby tulip
#

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.

modern gate
#

Hm, funny, at least you have moving things) I have as if they were local. Because of the VRC Pickup script it turns out?

ruby tulip
modern gate
#

Yes. I have exactly the problem for some reason in the synchronization of moving objects through VRC object sync.

ruby tulip
#

video or more information about the setup of the world would be useful to try and see the issue.

sand goblet
#

Networking.IsInstanceOwner returns true for someone loading into the instance

#

I.e. during the OnPlayerJoined round

#

Is this bugged?

obsidian cedar
#

But yea.. I think so

sand goblet
#

Righto

#

It is not

obsidian cedar
#

I feel like I live in UNU now :/ since UnU v5 I have not been on Live with any other people.. UnU is amazing πŸ™‚

errant siren
#

Haha enjoy your solitude while it lasts. UnU will soon be live for all!

obsidian cedar
#

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 πŸ™‚ πŸ˜„

ruby tulip
#

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. vrcCatSquint

rocky spindle
#

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

jovial gyro
slow schooner
#

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

astral pond
#

I get a I found a bug message in the sdk3 world. Whats that mean

oblique reef
#

Good question. What was the bug message's message?

frozen igloo
# slow schooner Just checking out the UnU beta, and it looks like I need to rewrite all of the U...

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!

slow schooner
frozen igloo
#

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.

slow schooner
#

This is directly from the site, and seems to imply that the whole Udon folder needs to be deleted. Is that wrong?

frozen igloo
#

well then don't put your programs in the udon folder

slow schooner
#

Oh yeah, duh. I thought my program sources were going there for some reason, but they're just in a different folder

obsidian cedar
#

Momo will Quest support for this update come before its released to public by any chance ?

obsidian cedar
#

Nope steam only

#

I really need some tests on Quest so hoping it will AnimuThinku

obsidian cedar
#

Also is it meant to throw errors whenever you try to switch to Quest on the UnU Beta ? πŸ€”

fresh stump
#

Udon network?

errant siren
obsidian cedar
#

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

obsidian cedar
#

@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

errant siren
#

Oopsie - yeah the Midi stuff should be #ifdefed out for Android, thanks.

obsidian cedar
#

πŸ‘

ruby tulip
#

@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.

ruby tulip
#

i know string arrays were not added to keep networking happy. assuming a similar limitation for this.

obsidian cedar
#

πŸ˜„ Still idk how string arrays can make the network happy πŸ€” I just sync my string array using classic string awhoknows

#

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 awhoknows in my case then network should be very happy.. Syncing 1kb of data and ONLY when someone joins πŸ™‚

ruby tulip
#

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.

obsidian cedar
#

πŸ€” 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

ruby tulip
#

there will always be work arounds just trying to prevent some of them.

obsidian cedar
#

awhoknows I guess

#

I wouldn't say prevent.. I'd say make it harder

ruby tulip
#

πŸ‘

obsidian cedar
# ruby tulip

Wait I though UdonSyncMode.None is basically non synchronized πŸ€”

errant siren
#

sorry - that name is a bit misleading. Sync is either on/off, it's really the Lerp mode

ruby tulip
#

^

#

none, linear, smooth

#

default is none

obsidian cedar
#

Ah I just check.. Well None is the same as Just using [UdonSynced] then

ruby tulip
#

working on making a video player with all the new networking stuff, and experimenting to make sure my ideas will actually work.

errant siren
ruby tulip
errant siren
#

I'm doing one now, too

obsidian cedar
#

Just tried too and not working for me too

#

U#

ruby tulip
#

just did a graph test and got the same result.

errant siren
#

Yep, reproed the issue here as well - thanks for the canny

woven pewter
#

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

obsidian cedar
#

That's for continuous sync

woven pewter
#

The section in question is super unclear about that :)

obsidian cedar
#

In Manual sync you can sync string with 10K characters no problem if I remember correctly from my tests

ruby tulip
#

looked at docs. it should specify its only for continuous sync. its just the statement above like its for any sync type.

obsidian cedar
#

Lol yea the Data and Specs used to be better

errant siren
#

I'll double-check with Dan about this

tranquil hull
#

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
obsidian cedar
solar depot
sand goblet
#

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 πŸ™ƒ

errant siren
# sand goblet 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.

sand goblet
#

Yup, I was joking at CM about the delay πŸ˜„

sand goblet
#

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)

lofty shoal
#

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

obsidian cedar
#

Is there even ANY chance that UnU will be released within next 8 days ? πŸ€” Or is there absolutely no chance at all ?

ornate shale
#

is there a version of udonsharp we can use or is it only graph

#

if annyone knows

obsidian cedar
#

yep there is

errant siren
#

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.

sand goblet
#

At the moment you can make any ObjectSync object sync better by attaching a dummy pickup script to it.

fresh stump
night bay
#

The only reason I pinky promised is the fact I'm not on the VRC Team πŸ˜‰

fresh stump
#

im suing

obsidian cedar
#

Its 2-3 weeks from now πŸ™‚ I ||don't|| promise! ||Sorry I mean 2-3 months||

#

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

prime adder
#

oof

ruby tulip
#

its our own fault. we keep breaking things causing it to be delayed.

sly verge
#

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)

solar depot
#

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).

obsidian cedar
#

So if the update #open-beta-announcements would actually get released on Monday.. UnU could maybe come the same week apoi_please Quietly praying πŸ˜„

woven pewter
#

wonder if they'll roll up the "identity update" as well

obsidian cedar
#

Someday

#

maybe πŸ˜„

prime adder
#

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.

obsidian cedar
#

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.. πŸ™‚

prime adder
#

i have a card game in my mind but the object pool of unu would help me. i dont need to make one myself.

obsidian cedar
#

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

prime adder
#

yeah was of thinking it.

obsidian cedar
#

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

prime adder
#

ohhh nice. then i try out the beta πŸ˜„

woven pewter
#

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

obsidian cedar
#

Couldn't UnU just go straight to release awhoknows It's been tested in this beta wasn't it ?

obsidian cedar
woven pewter
#

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

errant siren
#

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.

woven pewter
#

The camera you get by opening your quick menu and going to the camera submenu, then opening the photo camera

errant siren
#

Oh wow- ok, that's weird. Thanks for reporting it.

woven pewter
#

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 πŸ˜›

errant siren
#

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

woven pewter
#

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

errant siren
#

Great, that should help to narrow it down, thanks.

obsidian cedar
#

UnU soontmPink

jaunty ice
#

πŸ™

obsidian cedar
#

πŸ™

errant siren
obsidian cedar
jaunty ice
#

πŸ‘€

prime adder
#

πŸ™

obsidian cedar
prime adder
#

try to fix something and 50 more bugs πŸ˜„

obsidian cedar
#

def not.. You didn't see anything..

prime adder
#

πŸ‘€

#

it was fun xD

jaunty ice
prime adder
obsidian cedar
#

Create another 50

#

For each

jaunty ice
#

60 open issues in my airtable rn

jaunty ice
obsidian cedar
#

Sooo πŸ˜„ UnU = Open beta πŸ€”

solar depot
obsidian cedar
#

Will we get quest UnU beta AnimuThinku need to do some performance tests AnimuThinku

jaunty ice
#

have we ever had a quest beta for anything

#

doubt it lol

obsidian cedar
#

Yes

jaunty ice
#

not talking about the oculus go thinbg

#

wait legit?

obsidian cedar
#

Yes check

jaunty ice
#

damn ur right

#

k i said nothing lol

obsidian cedar
#

Yea just not for UnU sadly..

obsidian cedar
jaunty ice
#

hmm yeah

obsidian cedar
#

Yea no differences except the performance.. AnimuThinku kumaPls

jaunty ice
#

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

obsidian cedar
#

xD yea need to test my deserialization on quest.. hope I don't kill it with it

jaunty ice
#

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

obsidian cedar
#

Well .. 1 that runs 10kb of data once after join.. and upto 80 that can run every 350ms

#

1 per player

jaunty ice
#

why the fuck are you syncing 10kb of data lmfao

obsidian cedar
#

And their speed is variable lol depending on amount of data that needs to be transfered

obsidian cedar
jaunty ice
#

hmm fair i guess

obsidian cedar
#

Player names take up a lot

#

And then couple int, byte arrays

jaunty ice
#

damn i am so looking forward to being able to use this shit

obsidian cedar
#

Publicly? Yes same.. I pray everyday that there are no more bugs and it comes soon into public

jaunty ice
#

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

obsidian cedar
#

Lol yea I rewrote my entire world from scratch basically .. don't regret it for s moment.. well.. except when we were bug testing dead

#

40k lines -> 8k lines :)

jaunty ice
#

yeah i read about that in merlins discord iirc

#

sounds like a dream

obsidian cedar
#

It does.. even Rider starts glitching when you have script with 10 or 15k lines.. 3k methods..

jaunty ice
#

yeah well that is kinda fucked

#

assuming those were all networking event functions?

obsidian cedar
#

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

jaunty ice
#

yeah exactly, figured as much

#

wait being able to pass parameters into networked events?

#

i thought we didn't have that yet

obsidian cedar
#

We don't officially but I made my own way