#development-advanced

1 messages · Page 4 of 1

ember plover
#

well out of sync is probably the wrong word to use. Mean the video latency shoots up on vrc

#

I think i can live with that actually

#

more curious to see the latency from others

grave bronze
#

ah yeah could be a throughput thing then

#

maybe it has to buffer more because server's farther away

#

idk tbh

tribal horizon
#

I've decided to add thumbnail images to my YT search. I don't know the best way to accomplish this and I see multiple ways it can be done. Discussion/feedback (or code) will be appreciated. I already get textual information using VRCStringDownloader. Not a problem and if the images can be handled this way I think it would be the "cleanest" solution. Should I convert the thumbnail to binary data and use that? Seemingly I can generate some sort of sprite sheet and download them all in one go. I would have to split them apart of course but could this be a better way? And finally I could resort to the VRCImageDownloader but this seems to be the worst of the alternatives due to its limitations.

gray mulch
#

Beware you might want to +1-1 to the x/y before generating UV to avoid texture bleed

tribal horizon
tribal horizon
#

I know the VRC world running as a test build can access a public API e.g. https://vr.example.com/test is there a way to have it access a test API running locally such as https://localhost:5148/test

tribal horizon
#

Excellent, i should have tested this earlier. Now I can step/trace through the service calls from in-world.

autumn kiln
#

I'm looking at some states within GogoLoco, and I see this state has a strangely configured VRC Avatar Parameter Driver:

If I also look in the debug view for that component, I see that the names are "content, encryptionOid, and keySize"
The source is also a special character:
ȋ
and the value is 7.314778e-43

Does anybody know what this is trying to do?

terse tiger
#

does Udon have methods for talking to other input devices like steering wheels?

unreal orchid
# terse tiger does Udon have methods for talking to other input devices like steering wheels?

Depends on how steering wheels interact with Unity, we do have access to all of this https://creators.vrchat.com/worlds/udon/input-events/#unity-input-methods-and-properties
No clue whether it needs anything special, I've certainly never implemented steering wheel support into anything.

You can read the input of a player's controller in a unified way across all platforms by using Udon Input Events. These events will work correctly even when the player has remapped their controls.

vital sigil
#

When I use:
public class InterfaceCode : MonoBehaviour, IPreprocessCallbackBehaviour, IEditorOnly
{
public bool OnPreprocess()
{
...
if (interfaceObjectLeft != null)
{
VRCConstraintSource leftSource = leftConstraint.Sources[code];
leftSource.SourceTransform = interfaceObjectLeft.transform;
leftSource.Weight = 1f;
leftConstraint.Sources[code] = leftSource;
}
...
return true;
}
public int PreprocessOrder => -1;

The VRCConstraintSource cannot set SourceTransform, After uploading, it will become None.
I have tried to add a lot of debug information to check for issues, but I still don't know why this is happening.
The compiler did not report any errors, and all other functions are running normally.

unity 2022.3.22f1 sdk3.7.1

Anybody got any leads

modern fog
vital sigil
#

is working when i use av3 test,but in VRC uploading, it will become None.

#

Transform

undone zealot
#

I need full avatar display icons to create a ui, but they are nowhere to be found. even similar or parodies of them

novel bane
#

Do websockets work in VRChat?

gray mulch
vague girder
novel bane
vague girder
#

there's a few ways you can get data into worlds, but not many ways to get data out afaik. disclaimer, I do not make worlds, but I've picked up a good amount of info about world creation.

there's 3 main ways you can use to get data into worlds:

  • Udon String loading
  • Udon Image loading
  • Video players

afaik, string loading can be used to send JSON

novel bane
#

Hmmmm probbbbbly not going to cut it unfortunately. I’ll have to release it as standalone I guess

novel bane
#

So I figured I’d test it out since it was working really well in the tester. I pushed the world to community worlds and sure enough it didn’t work.

#

Bummer

gray mulch
novel bane
#

Not the best example since guidelines don’t really let it sing, but you get the idea.

I made a port for VR. Would be nice to have it in a world.

cerulean ermine
#

only thing i could think of doing is making a rtsp server with the audio and put that on a media player, and have the user put the prompt in a textbox with a base url + prompt to an endpoint that triggers the prompt to play on the rtsp server

#

rtsp server is only for realtime streaming, if you are okay with it taking a sec you could have the baseurl + prompt put into a media player and generate a mp4 once the prompt completes and send that back

novel bane
cerulean ermine
#

yeah afaik theres no way to get mic audio

#

and rtsp/hls are the only real sockets you can use

novel bane
#

Like the demon on your shoulder lol

#

So if I call length of microphones, what do I get?

unreal orchid
warm root
novel bane
warm root
novel bane
#

Ah so they’re a companion app or something. Interesting.

warm root
#

The older ones used to do it via Chrome's inbuilt translation thing but that one looks like it uses actual paid services.

magic olive
#

Oh why. Why why why oh why. Why did they make the mic toggle hard input bindings? https://docs.vrchat.com/docs/valve-index#binding-customization-notes

VRChat

VRChat offers support for the Valve Index Controllers ! Finger Posing The Valve Index Controllers contain capacitive sensors for the pinky, ring, and middle fingers. It also contains capacitive sensors on the trigger for the index finger, and sensors on the thumbpad/touchpad/buttons to sense when yo...

#

Does anyone have info on this? I'd rather not have mute toggle be forced on my left A button while playing VRChat on Linux through Monado, I wanted to re-bind it to gesture toggle via OpenXR API Layer but it looks like that's not possible anymore.

cerulean ermine
#

you would have to use xrbinder for it iirc

zenith bone
#

I'm needing a bit of help with some vector and quaternion math. Suppose I have a position and direction, such as the position of a player's head, and the direction they are looking. How can I get a position that is offset to a random point within a circle that oriented orthogonally to the view direction, such that lines drawn from each point towards the direction are parallel?

Or in other words, rather than a cone effect drawn from origin and diverging as they go, I'm wanting a circular origin space, where lines from origin along the direction are parallel like a cylinder. How can I offset the origin positions in a random circular radius aligned with the view direction?

#

I suspect UnityEngine.Random.insideUnitCircle will be my friend, but rotating those components to align in 3d is where I'm struggling.

near bronze
zenith bone
near bronze
#

yep!

zenith bone
#

Okay cool, I shall give that a shot. Thank you 🙂

near bronze
#

any time you want a complex set of points oriented in a specific way, that's a good way to do it. Build from the ground up in an easy location then deploy it where you want, rather than making the math way more complicated by deploying it already in the place you want

zenith bone
#

Okay, here's the solution I implemented, and it appears to be working 🙂

Vector3 offsetPosition = transform.position + Quaternion.FromToRotation(Vector3.up, transform.rotation * Vector3.forward) * new Vector3(randCircle.x, 0, randCircle.y);```
Where `radius` is the size of the circle, `offsetPosition` is the point I'm looking to use, and the `transform` is at the position and rotation I'm offsetting from/using.
#

Quaternion.FromToRotation was the key, allowing me to rotate the unit circle from the up rotation to the desired forward rotation, then applying the positional offsets to the starting position.

#

Thanks again 😄

cerulean ermine
#

just made a bot for a group im admin in that logs all group events

cerulean ermine
#

font for what?

light remnant
#

What do I need to add to my .cs file to be able to work with the VRC constraints? Please keep in mind that I am an idiot when answering. Thank you. (I am trying to update an existing editor script for use on avatars in Unity.)

light remnant
#

Kinda languishing about this since the devs said on canny that you could code with the vrc constraints but I can’t figure it out/find documentation

#

From searching in here, this is what I need to add at the top of my script:

still flume
#

Anyone figure out a way to instantiate a prefab with Udonsharp components without it breaking ingame for vrchat? Like in unity the scripts function fine, but in vrchat its almost like they loose the ability to set variables

light remnant
#

@plush bluff You posted this as advice to someone before, and I copied what you put p much exactly, but I get a namespace error for "VRCConstraintSource".

#

Does this not work yet either? Do I have to do something else? Should I just edit my script to be parameterless for now since you guys are gonna update it anyway and this is like, way more verbose?

#

||VRCConstraintSource source = new VRCConstraintSource(GameObject.Find("ROOT/Hips").transform, 1.0f, Vector3.zero, Vector3.zero, Vector3.zero);
PositionConstraintToHips.Sources.Add(source);||

dry pendant
light remnant
#

Yeah I added that and it resolved my namespace issue from just, trying to work with them at all.

#

For instance, I can now do PositionConstraintToHips.AddComponent<VRCPositionConstraint>(); without a namespace error

#

But now I'm trying to add sources...

#
using VRC.SDK3.Dynamics.Contact.Components;
using VRC.SDK3.Dynamics.Constraint.Components;```
#

I have those three included.

#

Well other stuff too

dry pendant
#

so whats the problem

light remnant
#
        PositionConstraintToHips.Sources.Add(source);```
#

That doesn't work, I get a namespace error on "VRCConstraintSource"

dry pendant
light remnant
#

Yeah? I copy pasted it into here from further up in the script, it's in there.

#

using VRC.SDK3.Dynamics.Constraint.Components;

#

Yeah, it matches yours.

#

If the VRCConstraintSource thing is supposed to be included in that, maybe my project is wonky?

#

I DON'T get a namespace error on adding the constraint, I DO get a namespace error on attempting to add a source. if that's like, messed up, then my project is messed up I guess, I'll reload the SDK and see if it helps.

dry pendant
#

try using VRCConstraintSource = VRC.Dynamics.VRCConstraintBase.ConstraintSource;

light remnant
#

I appreciate the help, but my project didn't. "The type name 'ConstraintSource' does not exist in the type 'VRCConstraintBase'"

#

Error on the line with what you just suggested.

dry pendant
#

wheres VRCConstraintSource come from, i cant find any docs on it

#

can it even be done

light remnant
#

I posted a snip of a staff member's suggested code but maybe they were helping someone with world scripting...?

light remnant
#

That's where Dexvoid posted exactly this, it's a weird verbose way of doing it anyway... I'm annoyed a little though because when I asked on the canny about whether they had editor scripting implemented they were like, Well we definitely do so what can't you do? and it's like. well apparently I can't add Sources which seems really basic

plush bluff
# light remnant ```VRCConstraintSource source = new VRCConstraintSource(GameObject.Find("ROOT/Hi...

Hello, the class VRCConstraintSource is in the namespace VRC.Dynamics. You'll need to add the following at the top of your script:
using VRC.Dynamics;

Additionally, the constructor of VRCConstraintSource takes four parameters, not five. You'll need to remove the last Vector3.zero on the first line in this snippet.

If you aren't already, I would strongly recommend using a code editor that includes Intellisense or similar, because it can resolve dependencies like this for you automatically. Visual Studio Community is a free option for non-commercial projects. Visual Studio Code is another possible choice.

Sorry for any confusion. Regarding your comment about adding sources, we weren't aiming for an exact one-to-one match against Unity's programmer interface for constraints. You can add sources to VRChat constraints by modifying the Sources list on a constraint, as you're doing now in your code snippet.

light remnant
#

Thank you so much!

granite stone
tribal horizon
#

I'm looking for a reasonable solution. I have a VRC URL Input and as we know we cannot set the text value via code. The user can of course. But the user can accidentally clear the entire input field and in such a case there is no way to recover the URL. The user has to rejoin or someone has to remind them what the URL was and they rekey it. So I thought perhaps a mechanism to copy a string value into the clipboard would enable the user to simply paste the URL back. This isn't the code changing the value, the user is via the virtual keyboard where cut and paste is supported. I can't get CopyToClipboard to work and the only way I can see to "copy" is from another input field. This obviously gives a person a second chance but again if they clear that second input there is no way to regenerate it. Ah but maybe given that the "backup" wouldn't be a URL input (I will have to try that). Meanwhile does anyone know how I might click on a text field (not an input) and copy a string into the clipboard such that the user could paste it into the VRC URL Input?

#

We shouldn't have to work this hard 🙂

#

So not ideal but clearly not the worst alternative. We can (as expected) set the text value of an input that isn't a VRC URL. And I could easily reset that if it was accidentally changed by a user. Still having to pop open an input in order to get a string set in the clipboard is a bit odd. So I'm looking for something that could set a value in the clipboard directly when (for instance) a text element was clicked. Again, the user is setting the VRC URL value so that part will work.

hasty copper
#

Udon doesn't get access to the clipboard and you can't easily convert from string back to VRCUrl so the best you could do is keep track of any previously entered URLs with VRCUrlInputField.GetUrl() and let them click a button or select from a dropdown list to restore whatever the intended URL is with VRCUrlInputField.SetUrl()

tribal horizon
cerulean ermine
#

while url inputs cannot be generated by code, text inputs can

#

add a normal textbox with the original and make sure it isnt removed

light remnant
#

I'm getting this error:

"'VRCRotationConstraint' does not contain a definition for 'rotationAxis' and no accessible extension method 'rotationAxis' accepting a first argument of type 'VRCRotationConstraint' could be found (are you missing a using directive or an assembly reference?)"

when trying to set a new VRC Rotation Constraint to be locked on two axes only, using the old way, YZtoHips.GetComponent<VRCRotationConstraint>().rotationAxis = Axis.Z;

#

Uhh besides the part where I forget how to do two and not just one, is this another namespace problem? I use Visual Studio Basic and I'm not very good at this so idk how to fill out my namespaces automatically

#

Also is there somewhere to go for scripting documentation besides here? I tried searching "rotationAxis" in the history but no one's asked anything about it yet.

zenith bone
#

I've encountered a rather confounding bug. I have an UdonSharp script that's used on an object that's instantiated and added to a custom object pool. Previously it worked completely fine, but after an update that involves occasionally reparenting it (may or may not be relevant), a small random percentage of the time specific instances of the object appear to execute the script twice (forces applied in FixedUpdate are applied twice for example).

I was only able to tell that's what was going on because whatever is causing the script to execute twice is also causing that second instance of the script to execute even when the object is disabled. I watched a public random float continue to change while disabled (was previously private but made public to debug the issue), while other unaffected clones of the object continued to run as expected, not updating the value while disabled. All had been reparented, so it doesn't appear to be deterministic regarding that alone.

Anyone run into or otherwise aware of this sort of thing happening? I don't want to rule out the possibility that there's a bug in my code, but given the execution while disabled behavior this reads to me like it's something anomalous going on with Udon/Unity.

tribal horizon
#

Does anyone have suggestions on how best to handle the case of vertical formatted videos? In particular with the AVPro video player but the solution may apply to any of them. I'd like it to not modify the dimensions of the video screen but (ideally) black out or dim the sides so the videos do not stretch. Many quick videos are vertical these days and I suspect more to come.

#

I am under the assumption that I could override OnVideoReady at which time I have the height and width (and duration as well) of the video. So as to not change "the screen" I believe I would have two elements represent the screen. One is always the physical size of the screen (and could be gray) and the other would be used to display the video. This would permit resizing of that element without the "physical screen" growing and shrinking. Does that sound good?

warm niche
#

You could do that actually with ProTV I believe, you have to toggle off the checkbox for allowing it to dynamically resize the render texture for video texture output.

#

So you could specify the texture size ahead of time.

#

@tribal horizon Pinging to make sure you can see this.

#

This is something I've done recently

tribal horizon
# warm niche This is something I've done recently

Appreciate it... I'm trying out my idea. I'm really not going to switch video players for this. ProTV is a wrapper component and while I believe it serves many people's needs I think it does more than I need it to.

warm niche
#

That's fair, just putting it out there if you have exhausted the alternatives

tribal horizon
#

I often get exhausted... but I keep going anyway 🙂

warm niche
#

Yup, Through the Fire and Flames we carry on

quick stone
tribal horizon
#

Oh, while I've got people replying... is there any generally accepted z value to separate objects so Z fighting doesn't occur. At the moment I've just pulled the "actual display" a bit closer to the player.

plush bluff
# light remnant I'm getting this error: "'VRCRotationConstraint' does not contain a definition...

To do what your line of code does with a VRChat constraint, you would set AffectsRotationZ to true and set AffectsRotationX and AffectsRotationY to false.

As I mentioned earlier, VRChat constraints and Unity constraints aren't built to the same interface. That means you won't be able to just use the properties from Unity constraints with VRChat constraints - they aren't named in the same way.

There is no official API documentation for the types in avatar dynamics at this time. If you're using Visual Studio, it should be showing you a list of properties you can use whenever you press "." as you type the line out.

light remnant
#

Oh! I've gotten used to ignoring that because it's always in my way. Thank you!!

tribal horizon
#

Where can we have a in-depth chat about the video players, in particular the AVPro player? They all map (as far as I can see) to a common base class so which video player is used (for basic things) shouldn't matter. Yes I am aware of the wrappers and that AVPro supports streams. I'm using the AVPro player for now and I don't want to rewrite things particularly if afterwards I find that similar workarounds are needed.

#

I have all the basics working and some of the semi-advanced but I'm puzzled by a few things and can't find any docs that explain the expected behavior. Looking at sample and disassembled code isn't revealing much.

#

Two things stand out as problematic at the moment. The first is that later joiners actually have the video player start because there is no way (it seems) to intervene. The URL as been set and though the video has ended late joiners don't know that. There is no way (I can find) to set the URL to an empty URL to prevent this.

#

The second problematic thing (and I can post the error message if I reproduce it) is that IsPlaying throws an exception as the player exits. I have this checked as part of my video sync code. The player object does not return null, the local player is still valid but IsPlaying throws the exception. A quick check indicates this is a VRC wrapper method so it appears that it is (probably) not checking the underlying object. It may be null at that point but I can't get to it.

#

I'd happily start a DM chat with folks interested in the subject.

#

Seems like a good reason to have "discussions" activated on this server. Maybe it is and I've missed it?

quick stone
#

"throws an exception as the player exits" exits, as in exits the instance?

tribal horizon
# quick stone "throws an exception as the player exits" exits, as in exits the instance?

Yes during testing I have a player join late with VRC Quick Launcher. When I shut down the instance it throws an exception during the Update method. It doesn't affect anything as the player has left but it should be able to be resolved. I check if the player needs to be sync'd in Update. The Update checks to make sure the local player is valid, if the videoplayer is null in which case it doesn't call the sync code. It was calling it in any case which made me thing that the "Udon" video player is not null but seemingly the baseplayer is. And I draw that conclusion because I also check if the videoplayer.IsPlaying is false. Now it would be true in many cases when the player leaves but it isn't the attempt to sync that fails it is just checking if the flag is set.

#

I'm trying to set a Boolean when the player leaves which (if set properly) should bypass the need to check much of the other stuff. But again all the extra work shouldn't (ideally) be necessary. It seems clear that the wrapper code around the video player isn't doing too much. It serves as a way to restrict access to some properties.

#

The reason for the IsPlaying check is clearly because any sort of video sync doesn't need to run if the video isn't playing.

#

There is another thing I don't exactly know. But I assume that I need to control the video sync. Again some properties/methods seem to exist but I can't get to them. So some video players may be able to handle it automatically (maybe AVPro does) but I don't know. I recall the video used to "stutter" for some players which I determined was constant attempts to sync the video and lots of mini adjustments. So I added some logic to let it get a bit more out of sync before bothering to correct it.

#

The AVPro folks seem more than willing to provide advice but they can only help with their component and the VRC implementation is restricted.

tribal horizon
# quick stone "throws an exception as the player exits" exits, as in exits the instance?

I'm checking out various articles and the source code to some implementations. One idea that comes to mind is that I could disable the video player (perhaps) until the user has joined and I have control of things. Similarly I could perhaps disable the player upon the player leaving and I could insure that the player reference was null. I'm still looking for the cleanest option. I added support for vertical videos the other day which I'm happy with. And I monitor for OnVideoEnd so I can display a nice graphic when a video isn't playing.

fallow pilot
# tribal horizon Two things stand out as problematic at the moment. The first is that later joine...

The way protv deals with this is when the owner data gets deserialized, we check for a couple states and if the owner isnt playing, we just dont try to load the video. Anytime a video is loaded or the play state is changed, we do the same state checks on deserialization for if the owner is playing something and either resume the current video or load the video if it is different than what is tracked locally.

fallow pilot
# tribal horizon The second problematic thing (and I can post the error message if I reproduce it...

I havent been able to figure out a reasonable guarenteed way of stopping this from happening. I've attempted mitigation checks like various isvalid and null checks, but it seems that due to some destroy order of operations, trying to check for existence of the backing video engine doesnt work because the proxy component that we are allowed to access still exists, but the backing engine does not. So the only way yo know that the object is destroyed is to attempt an api call (like isPlaying) and have it kill the udon behaviour, which obviously isnt recoverable.

tribal horizon
tribal horizon
fallow pilot
#

if only 😭

tribal horizon
# fallow pilot The way protv deals with this is when the owner data gets deserialized, we check...

Well IsPlaying appears to be a bit more broken than I expected. Granted I could be wrong but I figured it was intended to reflect the state of the underlying videoplayer. Even after the video has ended videoPlayer.IsPlaying returns true. So it appears that we cannot trust it to report things correctly. That seems to leave us with setting our own bool as the only option. Ah let me check that it at least returns false if it has never played a video. Good news it is false if it has never played a video but that doesn't tell us much as it never becomes false again and it is read-only.

fallow pilot
tribal horizon
#

So the following seems valid for pause behavior

#
private void PauseResume()
{
    if (_videoPlayer.IsPlaying)
        _videoPlayer.Pause();

    else
        _videoPlayer.Play();
}
#

As IsPlaying means loaded and not paused 🙂

#

The following is however not reliable

#
private void Stop()
{
    if (_videoPlayer.IsPlaying)
        _videoPlayer.Stop();

    _isVideoLoaded = false;
}
#

As I now know it may be paused in which case it does not stop and my flag sets incorrectly.

#

An IsLoaded flag would be nice...

#

I have to rethink a few more things and probably rely on syncing state myself. Right or wrong I'd like all the players to agree.

fallow pilot
tribal horizon
#

Yes I have overrides for them, mostly logging at the moment. I can use them to set local values so I don't need to sync them of course. I'm getting closer 🙂

#

I believe I still need to communicate to new joiners that "you may see a url and can hold onto it but don't play it". One thought was to call Stop when in OnVideoEnd but I assume that stops it for everyone and some people could have a few sends cut off the end. Probably not the end of the world considering it has been syncing repeatedly while playing. That should resolve the issue of a late joiner running it after it has ended for everyone else.

fallow pilot
#

it only stops it locally.

tribal horizon
#

Oh...

fallow pilot
#

All things are local for video players. As an udon dev, you have to handle syncing.

tribal horizon
#

Well I actually prefer that. I'm going to rename my isVideoLoaded to isVideoReady along with other fixes. May as well set a flag with a name related to the event to reduce confusion. Thanks much.

#

I have player state syncing in place I certainly pass it along to the other players.

tribal horizon
# fallow pilot All things are local for video players. As an udon dev, you have to handle synci...

As the ProTV dev I can imagine you don't want to give away all your hard-earned knowledge but if you don't mind a few questions directed your way from time-to-time I'd appreciate it. I might be able to assist in some way with your dev efforts at some point. If you prefer them public I can post here if you prefer private I can DM you. At the moment I'm imagining the OnVideo events as a sort of (odd) state machine. They aren't "current states" but events of course but a state can seemingly be inferred. I'm going to have to watch the logs a bit on this...

fallow pilot
#

ProTV is fully open source. No secret sauce aside from the mental map I've built up over the years.

tribal horizon
#

That's a type of secret sauce 🙂 Reading code is always helpful but exchanging info can answer the "why" and maybe even the "how about this" type stuff. I often describe a solution to a developer friend of mine just to get feedback. "Sounds good" is always nice and "what?" means I should probably rethink things.

glacial yacht
tribal horizon
glacial yacht
#

pro developer here - I hate that.

grizzled jackal
coarse cave
gusty herald
#

This is unrelated to that, but does anyone know if there's some kinda way to download thumbnails given the avatar ID? Trying to make some stuff for a friend's world and want to be able to make avatar graphics using that (in the editor)

zenith bone
#

What might be the suggested way to render a canvas only in front of a single other thing like the ground, while at the same time keeping other objects on the same render queue priority as both the ground and the canvas?

I'm wanting a set of per-player canvases in the world that follow each player and displays some stats on them. I want the canvas to be positioned below ground so as to be out of the way (nameplates and their and arbitrary avatar heights above the eye point are problematic), which means in order to see it I need it to render in front of the ground. Not a problem, render queue can handle that by raising the priority of the canvas or lowering that of the ground.

At the same time, I also want other objects passing in front of the canvas (players, non-ground objects) to obscure the canvas. Also not a major problem, solvable specifically by just lowering the ground render priority.

The added complexity is that I also have objects that can rise up from and descend back down underground, and I also want those objects to be rendered in front of the the canvas, but with the same priority as the ground so that the parts that at below ground are obscured.

What might be a recommended way to go about this? My first thought is that I could have the partially underground objects simple change render queue order during the time which they are descending to match the ground, but that seems less than perfect given a canvas on the far side would switch visibility abruptly as the object's render priority changes.

tribal horizon
tame pebble
#

any tips or templates for syncing events in vrchat world and external software data(biosignals,...) for experiment setups?

coarse cave
#

OSC for external -> internal, log file scanning for internal -> external. Here's an example of an external software project that utilizes both the above: https://github.com/ChrisFeline/ToNSaveManager

VRChat Wiki

OSC is a way to get different devices and applications to talk to each other. Most commonly used to have body-,eye- and face trackers communicate with VRChat.

GitHub

Save tool and manager for VRChat world: Terrors of Nowhere - ChrisFeline/ToNSaveManager

#

I copied

zenith bone
#

Thank you. It didn't like my message, even when it was just the VRC wiki link Q_Q

coarse cave
#

yeah, link embed be....yeah

bronze anchor
warm root
#

Users logs in my world are being spammed with this message, any ideas what may be triggering it?
RenderTexture.Create failed: depth/stencil format unsupported - D24 UNorm S8 UInt (92). There is no compatible format on this platform or this fallback to a compatible format is disabled in the import inspector.
It doesn't seem to reference a specific asset so I'm not sure what's causing it. A render texture perhaps?

hasty copper
#

Search for t:RenderTexture in your Project tab and check Enable Compatible Format on the assets

warm root
#

Thanks. Rogue one must have ended up with it disabled for some reason.

#

Looks like its AreaLit causing it. Hopefully enabling that doesn't cause other issues.

dawn flare
#

did something change with User-Agent headers?
I was under the assumption that PC/VR and Quest(+ IOS and Android probably) had different user agent headers when using a video player
I tried both AVPro and UnityVideo style players (ProTV and U#) and I get a Win64 header for both
am I completely missing something or was this removed at some point

#

PC
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.115 Safari/537.36

Quest
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36

hasty copper
#

Haven't checked it for a long time but the user agent used to be either stagefright or AVProMobileVideo for Quest users

#

I dunno if it's different for regular Android users

#

Looks like it's still working, I see stagefright/1.2 (Linux;Android 12) in my web server logs from today

hasty copper
dawn flare
#

I'm extremely confused
gonna chuck it on my server since that has https/tls certs and see if it's that

dawn flare
#

seems like it's a TLS/SSL/HTTPS thing
I pushed it on my server and I get
AVProMobileVideo/2024.4.1-1533-fff0238e2a-Release (Linux;Android 12) ExoPlayerLib/2.19.0
wack

dawn flare
#

so NSPlayer is PC and AVProMobileVideo/stagefright is quest?

hasty copper
#

Yeah

dawn flare
#

many thanks

gusty herald
#

I just need to get the URL for the thumbnail, given an ID, since I want to make a script that downloads the thumbnail and applies it to a texture, kinda like how a pedestal would.

unreal orchid
# gusty herald I just need to get the URL for the thumbnail, given an ID, since I want to make ...

You'll likely need to run a server to gather those. And it can't be automatic, constructing arbtrary URLs isn't possible so you have to ask a user to put it in.

Anyhow, you need to be logged in to get access to the thumbnails the proper way, which is an annoying hurdle, but very understandable.

You could however also run a discord bot that pastes in the link to an avatar in discord and then gets the image from the embed, not the most reliable solutions, but it would work without auth.

Also disclaimer, read through the ToS or guidelines before you release anything like this, I am just thinking out into text, but have no idea if VRChat is fine with people doing things like this.

light remnant
#

I'm adding a physbone script to a transform via a prefab, but I need to include an updated Ignore Transforms reference. Is there any way to get in to the phys bone script and add the updated reference via editor scripting?

#

Like, currently I'm copying and pasting the phys bone script from a prefab, onto a project avatar's transform. But it comes over with broken/not-updated Ignore Transforms references.

#
        GameObject physBoneClampedXRotationofHipsPrefab = (GameObject)AssetDatabase.LoadAssetAtPath("Assets/AnyTaurScript/Phys Bone (Clamped X Rotation of Hips).prefab", typeof(GameObject));
        Component physBoneClampedXRotationofHipsPrefabComponent = physBoneClampedXRotationofHipsPrefab.GetComponent<VRCPhysBone>();
        UnityEditorInternal.ComponentUtility.CopyComponent(physBoneClampedXRotationofHipsPrefabComponent);
        UnityEditorInternal.ComponentUtility.PasteComponentValues(physBoneClampedXRotationofHipsComponent);```
#

There's editor script to make a button that changes focus to this transform to help people find it and update it, so I guess I can just do that, but it would be cool if I could just update the reference directly.

light remnant
#

The last thing I need to figure out how to do is set the "Free Edit" tickybox flag via script, so that if I do a negative constraint weight via script, it will be accepted properly. Other than that, I think I'm good...

shrewd vector
#

Hey did anything change with how VRC handles 3D textures? I'm working on a volumetric fog system and it's completely broken after a vrc update.

#

Issue only shows up in VR it seems

light remnant
#

AnyHindChest.GetComponent<VRCRotationConstraint>().Sources[0].Weight = 0.0f;
The above does not work; is there any way to grab the Sources by index and change their properties, after they've been added to the list? What would the syntax be for that? I've tried to do some generic List type stuff to try to iterate through my list of Sources and change all the Weight properties to 0.0f but I get errors about keyable lists. So I figured I'd do it by "hand" but I can't figure out how to do that either; I've already added all the sources I need to my constraints, now I just need to be able to swap between them in Edit mode, like I was able to do with classic constraints.

#

The various workarounds I can imagine all seem really stupid (setting the avatar up with a special set of animation controllers just for Play Mode setup, and having people... write... numbers down...? to enter manually later?) (using Classic Constraints at first for all the initial setup and calibration, then saving user values from that and removing all the classic constraints and replacing them with vrc constraints with their user values?).

plush bluff
plush bluff
light remnant
fallen surge
#

outta the blue, but does anyone know how I'd be able to go about putting a VRC_AnimatorPlayAudioEditor on a state in an animator via script, with set serialized fields? I'm building an automation tool and have everything set up to that

fallen surge
#

on the upside, I still have options...
manually having the script paste line-by-line until it fabricates a file from frankensteining (It wouldn't be the first time I've hadda do this) ;-;

#

well, technically I didn't have to. I didn't know a library existed and basically reinvented the wheel for it by frankensteining a txt doc 😛

fallen surge
#

correction from what I've gathered: VRC_AnimatorPlayAudioEditor is saved in an external log for what states use it; It's not an actual behaviour... which means I really am at a loss for where I'mma access this thing because I can't duplicate it -_-

light remnant
#

How can I get more information on what commands and syntax I can use from having added these namespaces (using VRC.Dynamics, using VRC.DSK3.Dynamics.Constraint.Components, etc)? My hover tooltips seem irreparably broken, even after attempting to fix the dot net issue a few different ways, so I can't hover over anything to get additional information. When I tried selecting and right-clicking to get definitions, that didn't work either (no definitions were ever found, even for basic non-vrc things).

I've seen screenshots in here of what looks like "source code" of the new stuff, where the new functions all seem to be written out. I would love to get a look at that. Do I try to figure something out like installing dotPeek to decompile something something (seems like a bad idea when my computer track record is not great)? Is the reference code I want to look at present in the SDK in my Unity project somewhere? It didn't seem to be last time I tried to search for it.

I'd really like to be less helpless, but because I don't know the precise syntax for changing the top-level constraint weight (not source weight--thank you! that part's working), I can't make any progress at all. I'd really like to know where everyone else seems to have gone to figure the new things out without asking after every little thing. ^^;; thanks!

fallen surge
#

So, update on the adventure: Prefabs also don't work super reliably for my use, but most of the time they work
My generation script works now, only needing 1 additional manual step to edit the audio controller.. but sometimes it also will just crash unity and/or break my animator which I'll need to re-generate or reopen

fallen surge
#

update further: I wasn't including VRC.SDK3.Avatars.ScriptableObjects 😝
that might help clear things up a lot.. now to use it to unravel some spaghetti

light remnant
#

A friend whose Intellisense IS working helped me with everything I still needed. 😛

glacial yacht
#

One of these days I need to figure out how to make that work for me, the lack of useful docs is annoying for those of us who don't use Visual Studio

tribal horizon
#

Has anyone noticed (in the last few days) that YouTube players tend to not play HD videos? There was a system failure about a week ago and since then the videos play again (in many worlds including mine) but they seem considerably more fuzzy than I remember them. It is very noticeable which makes me wonder if some setting needs to be updated to restore the video quality. I'm not the only one who has noticed this.

coarse cave
#

phase be really quick....

gray mulch
tribal horizon
#

I read the messages but I'm not familiar enough with the mechanisms that surround video streaming. Is there a "recap" or might you generate one that explains a) what was the case and b) what the case is now? I'm trying to understand where the problem lies at the moment. The Quest headset, VRChat, any Unity video player, non-authorized YT media requests? Is it the case that we are expecting 1080p and receiving 720p (or less)? Thanks.

#

Ok I found a notice on YT-DLP issues re: mediaconnect requiring a sign-in which seems to limit users to "pre-muxed" 720p or better streams. I've not used the word muxed in a sentence before 🙂

warm root
#

Hence why they look awful.

tribal horizon
#

And I have to assume that YT didn't delete or otherwise remove hi-res videos. They have limited access to them if I'm reading things correctly. So can such access be "gotten" meaning via a license or something?

warm root
#

The issue is that while lots of different qualities exist on YouTube's side, VRC due to limitations in the video player engines, can only play "premuxed" videos, premuxed being where both the video and audio exist as a single package. Normally (e.g. via the website) YouTube serves you the video and audio separately and syncs them in the browser.

tribal horizon
tribal horizon
warm root
#

So here's the output of yt-dlp for a random video. I've highlighted the only one that VRC can play (as it's the only "combo" premuxed one).

#

You can make your own system to work around this somewhat. e.g. I've made something that I can use where I put my domain and the YouTube ID, my server grabs the qualities I want (1080p 60fps and the best AAC audio) remuxes them together then serves that seamlessly as though you were normally watching YouTube. Only adds a few seconds overhead.

tribal horizon
#

Thanks. So YT removed the premuxed versions of videos with higher resolution figuring that browsers can still get them right?

tribal horizon
warm root
#

Yes and no. They removed 720p a while back when they got rid of the native Android client. The 1080p disappearing now was due to a workaround that was being used - it turned out if you spoofed being Safari and used a special mediaconnect feature, it would let you have a 1080p premuxed version. YouTube now require authentication to use that mediaconnect functionality, which isn't viable in VRC so they had to remove that tweak, losing the 1080p one we gained a little while back. So now we're down to just 360p.

tribal horizon
warm root
#

I highly doubt it, I don't believe anywhere else has that functionality and it would likely cost VRC a small fortune licencing for what... 4 million or so users a month? It would also require YouTube to start injecting ads into the streams (or require VRChat to display the adds in some other way) which becomes a logistical nightmare.

tribal horizon
warm root
#

Google wouldn't want to just "promote themselves" they'd want their normal ads injected and the reason it would be a nightmare is how do you sync that, when each video is now a different length due to different people seeing different adverts?

#

Not to mention VRC would somehow have to make infrastucture to handle this, with YouTube who I doubt would be interested.

tribal horizon
#

if people can recommend alternative repositories of videos now would be a good time to mention them

warm root
#

Vimeo used to be viable but I think they only provide split streams now, so that's outright unusable.

tribal horizon
warm root
#

Dailymotion seems to be a viable alternative.

#
ID       EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC      ACODEC
────────────────────────────────────────────────────────────────────────
hls-380  mp4 512x288    │ ~ 10.05MiB  461k m3u8  │ avc1.4d0016 mp4a.40.5
hls-480  mp4 848x480    │ ~ 18.24MiB  836k m3u8  │ avc1.64001f mp4a.40.2
hls-720  mp4 1280x720   │ ~ 46.89MiB 2149k m3u8  │ avc1.64001f mp4a.40.2
hls-1080 mp4 1920x1080  │ ~102.68MiB 4707k m3u8  │ avc1.640028 mp4a.40.2```
tribal horizon
#

Excellent. If you and I can then surely someone else can provide muxing services and charge a reasonable rate. Not videos obviously but we can see services like Shadow PC (and others) exist. If there is a market customers will follow.

#

The AI bots for instance. Basic service is free, customized services are available for an additional fee.

warm root
#

Need to be careful when your charging for a service specifically to breach another company's ToS though...

tribal horizon
#

Online video platforms allow users to upload, share videos or live stream their own videos to the Internet. These can either be for the general public to watch, or particular users on a shared network. The most popular video hosting website is YouTube, 2 billion active until October 2020 and the most extensive catalog of online videos. There are...

#

When I investigated video repos (a couple of years ago) it was hard to find any that offered "direct to file" paths. They mostly used id-based systems and I offered to pay for direct access. Some also run thru their own player which obviously won't work in this case either.

warm root
#

I mean, most VRC users aren't going to care about other platforms, they will just want YouTube to work and that's it.

tribal horizon
#

So do you know if we are limited to specific formats? Will .webm or .ogv files play on the headset? I'm doubtful.

warm root
#

AVPro supports most formats and containers. Unity is very limited, so it depends on the engine the video player in the world is set to use.

#

MP4, MKV and WebM all definitely work on AVPro, not tried OGV but likely does.

tribal horizon
#

Thanks again. I'm going to try out a few test videos to see if I can get any hi-res video to play in my world. If so I can easily generate a favorites list which I can already feed into my video lookup system. Not as flexible as searching YT but if there are 100s of videos to choose from it won't be completely dead.

gray mulch
#

Once again. It is still possible to get those formats from YouTube, the work around just needs to be updated

warm root
gray mulch
warm root
#

And it is... what? Seems weird that it's not being pushed back upstream.

gray mulch
#

basically you just switch from mediaconnect -> web

#

and it works lol

#

mediaconnect was nicer as it had more relaxed bot checks though

#

1080p goodness

tribal horizon
# gray mulch Once again. It is still possible to get those formats from YouTube, the work aro...

A lot of "speaking in tongues" seems to be going on. We aren't dumb but we are not all experts in video formats, etc. So, I'm seeing what looks like a merged PR from June 20th. So does this mean that the current version of yt-dlp can handle it? And does that mean we are just waiting for VRC to modify the command line when they call it? Is there anything we can do, either independently or to push VRC to make what seems to be a simple mod?

gray mulch
tribal horizon
gray mulch
#

Also @coarse cave possible bilibili hack in ytdlp :3

#

can only get 360p but its betteer than [video error]

coarse cave
gray mulch
#

well its more like 640p, bili has weird formats

coarse cave
#

yeah...it's....unusual

gray mulch
#

Also i can't test if this works with the higher bitrate stuff as its all login restricted

coarse cave
gray mulch
#

and chinese site = pain

gray mulch
coarse cave
coarse cave
#

Hacky Haxy be like

gray mulch
coarse cave
#

oh....now also that ic

grave bronze
#

I should see if I can make my youtube proxy more universal, could likely mux bilibili videos and whatever else

gray mulch
#

where github

gray mulch
#

@torpid vortex ^^

torpid vortex
#

:O

#

very much want

restive grove
#

That is insane indeed!

gray mulch
gray mulch
obtuse geyser
#

One message removed from a suspended account.

lone bronze
#

Any ideas how one could use vrchats new hand tracking setup with lucidgloves?
In other words: can i use index controllers (what the gloves pretend to be) with the hand tracking layout?
any jank workaround would also be apreciated thumbsup
also, feel free to ping if you have an answer
||this is the closest thing to a hardware channel i could find so sorry if this is a misplaced message||

jaunty prism
#

so no

#

youll need to use the lucid glove controller implementation via openglove if it has one

#

else rip

lone bronze
# jaunty prism you cant mix inputs from 2 controller

Im not trying to mix inputs
Im trying to use the hand tracking controll sceem while i am using regular controllers

the way that lucidgloves work is by pretending to be knuckles.
So all that vrc sees is a pair of knuckles controlers (that have splay because aparantly knuckles have softwware support for splay lol)
I want vrchat to treat the "knuckles controller" in the same way as hand tracking.
not mix the two together

jaunty prism
#

skeletal is part of a controllers inputs, same as buttons, so i sont think thatd be possible

#

unless im still misunderstanding

lone bronze
jaunty prism
#

OH

#

yeah, openglove reports itself as a full skeletal tracked controlle

#

so vrchat will default to the hand gesture

#

but you can also use button inputs at the same time

lone bronze
#

typa shit you can misss in one year of ignoring a dead project

jaunty prism
#

itll pretend to be a knuckle still

#

just because knuckles have the ability to do every skeletal gesture so games support that

lone bronze
#

ah i see

#

well thats boring :(

jaunty prism
#

you could modify the driver to be a different controller type, but it doesnt really matter much since knuckles have the most inputs too

#

you could also create your own device™ but thats undocumented (steamvr drivers arent documented at all anywhere officially)

lone bronze
#

I mean i still will but i dont have to

jaunty prism
#

for driver stuff i just ask my bf cuz i am stuoid and dont want to touch it with a 10 ft pole

lone bronze
jaunty prism
#

oh you changed ur name

#

hello

jaunty prism
#

struggling to type and discord bug cutting of the last word is killing me

jaunty prism
#

im assuming its not the pulley thing that was done

#

but rather a different and more accurate sensor?

lone bronze
#

yuh, were using hall effect now

#

or well

#

were in the process of making it usable

lone bronze
jaunty prism
jaunty prism
#

or hall effect as in hall effect potentiometers

jaunty prism
#

ah thats what higvr is doing i think

#

i cant quite tell tho because theyre so ambiguous

#

so it could be imu but just weirdly describe

lone bronze
#

If were including buying gloves as an option in the "why lucid" then the asnswer is because foss on top

#

well

#

foss

#

lol

jaunty prism
#

ehh

#

idk openglove is good as a shitty boilerplate and thats it

#

every glove driver does it for the io part, and change everything else

jaunty prism
#

you use arch?

#

btw

lone bronze
#

no, im saying thats a very arch user statement

jaunty prism
#

openglove has a lot of latency in how it handles a lot of stuf

#

and also forced itself to have a really high controller priority

#

requiring you to restart steamvr to change controller

lone bronze
#

well thats not boilerplate, thats just bad cod- its bad prac-...
well its just bad.

#

anyways, that just means i get to f with the driver yippee

jaunty prism
#

boilerplate with lots of rust, screw holes in the wrong spots, and missing an arm

lone bronze
lone bronze
jaunty prism
#

i use magnets personally but slay asf

lone bronze
#

:(

jaunty prism
#

my vive trackers are something to behold

#

held together with zipties, tape, and hopes and dreams

#

this has a battery physically 3x the height of stock, so i needed to not put pressure on it so needed a new housing

#

ive asked vive for 3.0 housing cad files but nothing as of yet

#

someone there is banging on some doors for me tho :3

lone bronze
jaunty prism
#

real

lone bronze
#

hes got every vr 3d model in the world

jaunty prism
#

i bought a joblot of faulty headsets and there was a lens modded og vive

jaunty prism
lone bronze
jaunty prism
#

not nda, just not allowed to distribute

#

at least not for 2 years from signing

#

someone at vive told me cad files are usually nda so if i do sign one idrm

#

since this is a personal project

lone bronze
lone bronze
jaunty prism
#

3.0 default is 740mah

lone bronze
#

dunno how i survived my time spent soldering directly to 18650s

#

but im cheering for you thumbsup

jaunty prism
lone bronze
#

which is rather subopyimal when youre supposed to be wearing them troll_4k

jaunty prism
#

i soldered a new bms to a lipo and the capacity substantially droppe

#

i sure do hope this battery does not explode whilst i am using it

lone bronze
#

would also double as a ballistic shield bc batteries dont have enough power to blow anything up (except humans lol)

safe mortar
#

Chances of VRCs build of yt-dlp including the "--cookies" option, so folks in need to use a VPN with VRC get to supply their cookies for youtube?

Asking to find out if it would be worth putting in the time for a feature-request. ^^

lone bronze
safe mortar
lone bronze
safe mortar
#

not the instance, its a per user thing... but yes

#

thats as far as you get when using a (selfhosted) VPN

unreal orchid
safe mortar
#

ooof, ok thx for the info... was news to me

warm root
unreal orchid
rapid falcon
cerulean ermine
obtuse geyser
cerulean ermine
#

ah nice! one other thing i noticed is in the docs it says you need to restart the program to authenticate with totp, is there any way to avoid this if its set in the constructor?

#

because with my setup i cant use the cookie file

obtuse geyser
peak vigil
#

really should make the two-factor code dynamic parameter to an function instead of hardcoding it to a file

cerulean ermine
#

i already know the totp code when im initalizing the api

obtuse geyser
#

One message removed from a suspended account.

obtuse geyser
tawdry lintel
#

Strange question but does anyone know what Endianness VRChat OSC uses? I'm developing an FBT solution that allows for tracker position data to be sent via OSC, and I'm using OSCPack, a C++ library, but it requires me to know the endianness of the bytes sent over. Would be helpful to know so that all my work thus far isn't for naught

gray mulch
#

oscpack seems to be 10+ years old too?

tawdry lintel
#

I might make my own C++ implementation for OSC then

gray mulch
tawdry lintel
#

I'm not using Unity

gray mulch
#

@final tiger you got the link to the maintained one?

tawdry lintel
gray mulch
#

Seems incomplete

#

But should work for sending data

tawdry lintel
gray mulch
tawdry lintel
#

Trackers, all they're doing is sending floats forth, so it should 100% work for my use case

glacial yacht
tawdry lintel
#

Yeah I'm not getting a lick of anything from that then

glacial yacht
#

yeah there's a bunch of Java in that project, I'm not a big fan either.

digital berry
near bronze
# tawdry lintel That's for C#, once again, I'm using C++

One of the reasons you're probably not gonna see a lot of c++ trackers is because c++ is the language used for writing steamvr drivers, so most people who write c++ just do direct drivers. Osc for trackers is just a compatibility layer to make it easier, supporting many languages, over the network, and outside of steamvr

tawdry lintel
#

Yeah, my only issue was specifically finding an OSC library that was easy to set-up and didn't involve me adding 39 different files through Visual Studio, so I've decided to just switch to C#, since I know the language better I can optimize it more

#

So yeah my C++ remarks are invalid now lmao

near bronze
#

Yeah there are a ton of c# osc libraries

tawdry lintel
#

But yeah this software is what actually processes all the tracker stuff, the trackers are only sending camera and IMU information to the host device

near bronze
#

Ooh implementing your own SLAM? Tbh I can see why you'd want that in c++

tawdry lintel
#

It'll do more than just trackers however, it'll add a couple extra things that VRChat doesn't have but would be interesting to see, like jumping IRL triggering a jump in game

glacial yacht
#

ooh that'll be fun

tawdry lintel
#

Indeed

#

Got the inspiration from Vivecraft lmao

#

There's a whole lot of things I've got planned

#

This is gonna mainly be an accessibility thing, FBT is just a part of what I consider accessibility

unique forge
tawdry lintel
#

I know, the trackers are the most difficult part

unique forge
#

wouldnt need fbt technically since you can just use the headset height

tawdry lintel
unique forge
#

not really since you can calibrate the standing height then go off that

tawdry lintel
#

You can get headset height on a PC using Quest Standalone?

unique forge
#

not sure about standalone but vrchat has a parameter that is your headset's vertical axis

tawdry lintel
#

Ah

#

That's gonna be useful

unique forge
#

its how it knows to switch to crouch and prone

tawdry lintel
#

Gotcha

#

Gonna be useful for virtual chest trackers

unique forge
#

yes and no

tawdry lintel
#

The way I plan on doing it is probably different than most other applications, it's gonna rely solely on headset height and whether or not the feet trackers or in front of or behind the headset

#

/tracking/trackers/head/position

tiny cosmos
#

Tbh since idk which is the best channel asking for help for my situation . I posted information regarding my issue in #avatar-dynamics message . If anyone would like to check it out.

tawdry lintel
#

Once again back at it! Where is the documentation for the VRChat API? I wanna do something similar to VRCX, just not as involved as it, maybe just seeing who's online and being able to join them easily and was wondering where the API docs were located, if they were on the VRChat site, a different site, etc...

glacial yacht
#

yeah.... there's some basic stuff on the website, other stuff is apparently tooltips if you use Visual Studio or something like that. I've mostly dug through other code to work stuff out.

gray mulch
tawdry lintel
#

Thanks

#

Now I just need to get a GUI framework....

glacial yacht
obtuse geyser
cerulean ermine
#

thank you !!!

lament knoll
rocky crescent
glacial yacht
#

You could grab the source and build it yourself

rocky crescent
glacial yacht
#

yeah true, but there's not really another option

tame quartz
#

what editors are people generally liking for C#/Unity development? Visual Studio, VS Code, Rider? Im on day 1 just starting out with VS Code but idk if there's something I'm missing with others

glacial yacht
#

I use vim generally. You probably don't want to 🙂

#

VS Code seems reasonable though

velvet zodiac
#

I use visual studio and the intellisense and debugger are good. Although debugger's not usable for U#. Moreso for when I worked on stuff outside VRChat. Also it handles shader code well, which I recall having trouble with VS Code plugins for a few years ago. Downside is visual studio is a bit slow and some of the default hotkeys are clunky compared to VS Code, especially multi-line editing and commenting.

grizzled jackal
# velvet zodiac I use visual studio and the intellisense and debugger are good. Although debugge...

Although debugger's not usable for U#.
You can use the debugger to debug the C# logic of an U# script as long as it doesn't use anything that's only available at runtime.
For example the local player or persistence afaik can't be debugged this way. You can also set up unit tests to debug parts of your code that can be ran in-editor.
I like to write a lot of my code as static functions because it makes it easy to unit test in this way.

tribal horizon
#

Who would be the "goto person" re: discussion about VCC? In particular I would like to know what is executed (particularly if I can access it) in the create menu when using create U# Script. I have a nice enhancement for it but I'd like to see if it is practical. I'll talk to the Alcom group as well.

#

Ah, reading discussions on vrc-get suggest that it may be implemented there already. In any case I'd like to mod VCC if that is possible somehow to get the same functionality. The issue is this. A U# script can be generated from the menu. It creates the C# and an asset file (as we know). While this method supports a template file it apparently only supports the default "single template" system. I learned today (and it works) that Unity supports custom templates. I can add one for U# but it won't (obviously) execute the steps needed to generate the asset file.

#

The benefits of the custom template system should be plainly obvious. We get multiple templates to use (that we can customize) and they can be checked in with the project.

silk basin
#

@glacial yacht

glacial yacht
#

oh neat

#

(I just used sed on mine, they were pretty simple material changes)

silk basin
#

Hello gang! i quickly pieced together a editor tool that lets you mass produce Animations

how to use

  • Download this file and drop it in your Asset folder (or elsewhere in your project)
  • Select objects you want to make an animation for
  • Go to Tools -> bulk animation tool
  • The source clip is the clip thats being referenced, the animator is (most likely) the runtime animator in your avatar.
  • Press generate on the bottom of the window (if more than like 35 animations are selected the list gonna be too long)
silk basin
light remnant
#

Now that there’s headset camera hand tracking, are hand tracking floats (finger spread, etc) accessible to the animator controller at all? Maybe over OSC? I can just use the double openhands gesture I guess, but it would be cooler to get the “alive” look of using hand tracked finger spread directly.

warm niche
#

I need some help with hosting events. I have some artists, like DJs and singers, who will be performing. How can I capture their audio? The performances will be live and recorded on video player, if that makes sense, so people can join from any instance.

unreal orchid
# warm niche I need some help with hosting events. I have some artists, like DJs and singers,...

The performers should ideally send their audio directly to you/whatever is mixing it all together, running it through VRChat will just degrade the quality a lot.

So

Performers->mixer (your pc or whatever)->live stream

On how to send it to whatever is mixing it all together, donno, there are likely dedicated programs out there for audio streaming, alternatively just have the performers use OBS to stream the audio to you.


And just to mention, while capturing singing is doable from just inside of VRChat, music does not survive VRChat's voice audio system unscathed, so you will need something like this for DJs at least.

#

Alternatively the way that doesn't require as much technical knowledge, all DJ performances are pre-recorded, which some events do.

And you capture singing in game, with a bot that can only hear the performer. (I haven't heard the effect personally but there is a function in udon to turn off the audio filter meant to make speech easier to hear, that might make singing better.)
This bot would also be a good choice for camera, while you could record video on your own account (assuming you'll be on at the event) you couldn't properly record the audio.

velvet zodiac
#

Some singers mix in a backing track or instruments like guitar with voicemeeter. And then use that mix as their VRChat mic input. Which keeps voice in sync with music. But not the nicest audio quality and instruments cause their visemes/lip sync to move.

ember plover
#

Anyone knows what command is passed into yt-dlp by vrchat?

gray mulch
# ember plover Anyone knows what command is passed into yt-dlp by vrchat?

Depends on if it's the unity player or the avpro one, it should be fairly similar to this however https://gitlab.com/techanon/videoplayershim/-/blob/release/Editor/PlayModeUrlResolverShim.cs?ref_type=heads#L206

tough rose
#

Can you create worlds and avatars on macOS?

median tapir
#

sorry if this is a frequently-asked question, but is it possible to hook the Unity profiler into the game client instead of checking that in the editor?

tame quartz
glacial yacht
#

I have a thing which looks basically like this:

using System;
using UnityEngine;
using UnityEditor;
using VRC.SDKBase.Editor.BuildPipeline;

namespace Me.MyStuff {
    [InitializeOnLoad]
    public class AvatarBuildHook : IVRCSDKPreprocessAvatarCallback {

        public int callbackOrder => -1025;

        public bool OnPreprocessAvatar(GameObject avatarGameObject) {
            var myHook = MyHookThingy();

            if (myHook == null) {
                return true;
            }

            try {
                myHook.DoStuff(avatarGameObject);
                return true;
            }
            catch (Exception e) {
                Debug.LogError(e);
                return false;
            }
        }
    }
}
#endif```
tame quartz
glacial yacht
#

I forget, I probably dug it out of some source or something. Most of this stuff isn't documented in any sane way

#

I wrote this about a year ago

median tapir
#

:c

ashen willow
#

Could someone explain what "signature" means in the context of the Create File Version [POST] and Delete File Version [DELETE] sections of the VRChat API documentation?

I couldn’t find any mention of it in the Create File or Show File sections, and I’m struggling to understand what it refers to.

light remnant
#

Can I AddComponent<VRCHeadChop> yet? Like in Unity/editor scripting

#

I guess I can use a VRCScaleConstraint for now though, just wondering if there was something I need to update

tribal horizon
#

Do we know when the VRC Scene Descriptor is accessed? I'd like to dynamically modify some of the values but clearly this needs to be done prior to the values being used during world loading. Also the docs indicate some properties that I don't have "forbid free modification" and stuff related to voice falloff. Does anyone know if this is simply out-of-date docs?

river plaza
#

Hi, My name is Alicia, Nice to meet you. I'm here because I need to find some advanced creators. I need help.

river plaza
#

Or, Worlds, rather

#

I need help, major help.

#

I created a world, and I published it. Then I ruined it, and it is no more. So, I need to start all over, and I don't want to start over alone. lol

#

Also, would you mind being my friend on here? And in vrchat?

main shuttle
quiet escarp
#

blimy, dya have some pics?

main shuttle
main shuttle
river plaza
main shuttle
#

You right I turned them off, I'll fix it

mild coral
#

Does VRChat have some sort of guideline for balancing audio levels? Like for default setting values, what is the expected or baseline player voice LUFS, or avatar sounds or world sounds LUFS?

#

Because it seems almost any sound can get loud enough to clip easily whenever they get close, and I want to avoid clipping, say by staying at a certain distance, but how much is this distance supposed to be? What is the "standard in-game distance" when VRChat devs decided the built-in gain levels to make it 1:1 with the sound source?

#

Wouldn't it be better to release a guideline like an "expected LUFS for all sound sources", so that it is all regulated? Rather than no regulation and then relying on every player tweaking every other player's voice volume and avatar volumes (varies by avatar) and world sounds (varies by world)?

#

Because it seems the casual player needs to master the volume sliders just to survive in VRChat, it shouldn't be that way, wouldn't it be nice if VRChat can do it automatically by having clear specifications for audio input LUFS and/or automatically normalize recorded sounds sources to a certain LUFS (for avatar/world sounds)?

light remnant
#

me almost every time I enter a club world

mild coral
#

Wouldn't it be easier if there is a calibration function or wizard in the options, so people can actually test their mic and have their input volumes automatically set to a certain level, before the voice even gets transmitted

#

Have them read out a paragraph sort of thing

#

And then evaluate the LUFS of that clip, and then have the input volume automatically set

modern fog
#

Controlled powersliding for motorcycles. I am not sure how to indicate the VR user to countersteer when they grab the virtual handles, which is just thin air irl. Either I yank it out of their hand (or they fall over by not reacting) and or have some kind of haptic and visual guide

#

Here is the current implementation which has the least amount of user authority and the controller is unsure of the intention of the user in the slide

ruby wedge
#

Hey I have a question about build post-processors & the VRC SDK: Is it possible to change where the SDK puts the wrold/avatar assets for "build & test" by script?

I use Mac to dev, and test on my PC. I can access my PC via file-share, so it'd be really nice if I could point the SDK to the network share instead of it trying to put it on my local machine.

ruby wedge
#

NVM. Whilst it seems impossible to differentiate builds, I was able to make a menu item that allows me to "Build & Export" a VRCA :D

For those curious:

#if UNITY_EDITOR
using System.IO;
using System.Reflection;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;
using VRC.SDK3A.Editor;
using VRC.SDKBase;

    public class BuildAndSaveEditor
    {
        [MenuItem("VRChat SDK/Utilities/Build & Export")]
        static async Task buildAndExport()
        {
            var builderType = typeof(VRCSdkControlPanelAvatarBuilder);
            if (builderType != null)
            {
                var avatarField = builderType.GetField("_selectedAvatar", BindingFlags.NonPublic | BindingFlags.Static);
                if (avatarField != null)
                {
                    var avatar = avatarField.GetValue(null) as VRC_AvatarDescriptor;
                    if (avatar != null)
                    {
                        Debug.Log("Selected Avatar: " + avatar);
                        if (VRCSdkControlPanel.TryGetBuilder<IVRCSdkAvatarBuilderApi>(out var builder))
                        {
                            var path = await builder.Build(avatar.gameObject);
                            var fileName = Path.GetFileName(path);
                            var savePath = EditorUtility.SaveFilePanel("Save Avatar Bundle", "", fileName, ".vrca");
                            FileUtil.MoveFileOrDirectory(path, savePath);
                        }
                    }
                }
            }
        }
    }
#endif
#

-# Just in case anyone else is using a separate machine to build from where they test

#

Might be able to be improved somewhat tho.

versed seal
# ruby wedge NVM. Whilst it seems impossible to differentiate builds, I was able to make a me...

Oh that might actually be useful for me too , thanks for sharing 🙂

I wonder if we could also use that to do extra unity side checks / statistics, like iterate through things into the vrca.
Or if there there is a way to simply access the tmp directory where it stores all the stuff that goes into the vrca directly maybe ..

That way we could calcultate things that are done on the server only currently,
like the unpacked size and such.

Always a pain to have to upload to the server to check things..

ruby wedge
# versed seal Oh that might actually be useful for me too , thanks for sharing 🙂 I wonder if...

I will note that the vrca created gave me an error bot in VRChat, but that may have been because VRChat was already running or I messed something up with the local build; I'm... not really sure.

It could be that Build & Test creates a unique vrca from the build function. But, if so... uh, that makes no sense, since why would VRChat offer a build function that creates an unusable asset bundle? So I doubt this one.

Someone smarter than me could probably fix it up. Was probably user error (maybe I'm selecting the wrong game object; IDK) :x

versed seal
# ruby wedge I will note that the `vrca` created gave me an error bot in VRChat, but that may...

Ah yeah , difficult to know for your precise usecase of moving vrca between computers.
Maybe it needs to be declared somewhere else in the vrchat conf or something, which the build locally process is doing or something, ie the vrca copy is not enough.
Do you have the --watch-avatars launch option for vrchat ? if not try to add it, so that maybe it would autorefresh or recreate things when it detects the vrca..
Without that option, sometime I was getting the robot error too when testing locally.

ruby wedge
unborn plover
#

Hi! So I m trying to make a unity tool and in the script, i need to generate a game objects with a VRCFury Full Controller... I thik i saw it was public. But for some reason I'm having a hard time to do that...

To be honest I m just starting script stuff so I mainly use chat GPT to help me but I can't make it add a the full controler component... can someone help me with that or give me a direction where I can get info about that.:radiantDead:

vague girder
unborn plover
#

I'm trying to make a my own lock system for avatars and I want it to be non destructive... so my tool will generate an animator controller inside of a vrcfury full controler component . Like that it will be automatically installed and will not conflict with any other script... I probably don't really know what I m talking about but if there are other ways to do what I want, I m open for idea and advice vrcAevSlap

velvet zodiac
pulsar herald
#

Is there a way to make an object and I and other player touches it, we teleport to a specific location?

Touching together is the key for my scenario.

ruby wedge
unborn plover
velvet zodiac
# unborn plover I know. But people can easily bypass it... to bypass mine, you need to make an a...

Gotcha. Do you already have an editor script? It looks like there's a function to add a full controller FuryComponents.CreateFullController. https://github.com/VRCFury/VRCFury/blob/33c0e3dc965effc450fb90cd69ccee944f86da79/com.vrcfury.vrcfury/PublicApi/FuryComponents.cs#L14 And the controller itself has methods to add animator controller.

In order to access those functions, you'd also need to create an assembly definition in the same folder as your editor script. And add "com.vrcfury.api" in the assembly definition references. https://docs.unity3d.com/6000.0/Documentation/Manual/assembly-definitions-creating.html

unborn plover
# velvet zodiac Gotcha. Do you already have an editor script? It looks like there's a function t...

I was chatting with chatgpt to help me understand and I was looking at other tool from other creators and I noticed some ellement that was coming frequently... is my judgment is right?:

  • I feel like the structure of the folders is important (the names like Runtime,Editor...)
    Do i need to put my script in the package folder... is that important?
  • There is something called a "Assembly definition"... of what i understand, this is need to be in the same folder of my script and is needed so my script can une other script in the project.
  • I showed to chatgpt the fonction you showed me and i think there are still things that are missing because I still get the errors in the console saying that the vrcfury fullcontroller is not found...

Sorry for all the questions, I just started to learn all of thatvrcTupCry

velvet zodiac
# unborn plover I was chatting with chatgpt to help me understand and I was looking at other too...

"Editor" folders are special. Any file in Editor folders is not included in the game. There's other folders with special names, too! https://docs.unity3d.com/Manual/SpecialFolders.html

Also, this might not be relevant for your work on avatars. But Udon Sharp (U#) is a language used in VRChat world projects. The udon sharp compiler ignores any .cs files that are in Editor folders. Which is helpful if your script is C#. Then it won't be mistaken for U# and cause errors.

A package is a group of files (scripts, art assets, anything) with extra info about them. Info like a version and other packages they need. And the Packages folder is where Unity's Package Manager and the VRChat Creator Companion keeps its packages. https://docs.unity3d.com/Manual/Packages.html

Runtime and Editor folders come from these recommendations about how to structure a package. "Runtime" folder isn't special and "is only a convention and doesn’t affect the Asset import pipeline." https://docs.unity3d.com/Manual/cus-layout.html

#

Sorry this is so much! Also assembly definitions don't have to be in the same folder, it can also be in parent folder as long as it doesn't contain other .asmdef. I just wanted to keep it simple!

grizzled jackal
unborn plover
velvet zodiac
unborn plover
velvet zodiac
#

You're welcome! And I can help more if there's trouble

median tapir
#

is it possible (via legitimate means) to detect the instance type via Udon?
let's say you have a stage world where the stage controls are locked unless you are on a whitelist.
would it be possible to have the whitelist default to being unlocked for everybody in private instances?

grizzled jackal
median tapir
#

ooooo

#

noted

clear knot
gray mulch
#

It's really dumb that we still don't have an official way to get the instance type

quiet escarp
unborn plover
#

I also have that

#

also I got a error message saying that the FullController was pivate... so I can't use it?

cold cloud
#

can someone help me understand an error message

autumn hatch
cold cloud
#

What

autumn hatch
#

Don't ask to ask.

#

Just ask.

cold cloud
#

Ok

#

what am i suposed to do to try and fix this😭 🙏

gray mulch
#

remove missing scripts or add the missing packages

cold cloud
#

idk what a script is im new

#

ok i found what needs a script and it says this

unique forge
cold cloud
#

friend js sent a base

#

and i did the clothes and hair

unique forge
#

what base

gray mulch
#

The fact that you are missing the entire sdk scripts on the avatar is very suspect

cold cloud
#

nvm i js had to delete them and set avi view

unique forge
cold cloud
#

its one he made like a chibi

unique forge
#

If he made it then why was it missing the sdk entirely

cold cloud
#

idk

velvet zodiac
# unborn plover also I got a error message saying that the FullController was pivate... so I can...

FullController is the internal component so you probably can't (or shouldn't) access it. VRCFury might change it in future versions and it would break your tool. So that's why VRCFury made a public api (com.vrcfury.api) for tools to use instead.

using UnityEditor;
using UnityEngine;
using com.vrcfury.api;

namespace OrchidSeal.AddFullController
{
    public class SimpleAddFullControllerEditor : EditorWindow
    {
        public GameObject selectedObject;
        
        [MenuItem("Tools/Add FullController to Selected Object")]
        public static void ShowWindow()
        {
            GetWindow<SimpleAddFullControllerEditor>("Add FullController");
        }

        private void OnGUI()
        {
            var formHasError = false;

            GUILayout.Space(10);

            selectedObject = EditorGUILayout.ObjectField(selectedObject, typeof(GameObject), true) as GameObject;
        
            if (!selectedObject)
            {
                EditorGUILayout.HelpBox("Please enter an object.", MessageType.Error, true);
                formHasError = true;
            }

            GUILayout.Space(20);

            if (GUILayout.Button("Add FullController") && !formHasError)
            {
                var fullController = FuryComponents.CreateFullController(selectedObject);
                
                // Here you could call these functions.
                // fullController.AddController(yourController);
                // fullController.AddMenu(yourMenu);
                // fullController.AddParams(yourParams);

                // Save changes if it's a prefab instance.
                if (PrefabUtility.IsPartOfAnyPrefab(selectedObject))
                {
                    PrefabUtility.RecordPrefabInstancePropertyModifications(selectedObject);
                }
            }
        }
    }
}
unborn plover
#

oooh I see! so the main line to add the fullcontroller is var fullController = FuryComponents.CreateFullController(selectedObject);

interesting...vrcThinking

is it possible to change some specific animation transitions conditions on a already made animator controller ? If so, what do I need ?
I was also tying to modify values on vrc parameter driver.... I don't really know what I need to do that vrcJamieVatarga

velvet zodiac
unborn plover
#

Mmmm... ok let me try that ayaka

shell laurel
#

the only hard part is getting the animation to align things nicely. it'll be totally different depending on the ratio of lengths between the two limb bones. I went frame by frame to align them and then made a curve that was close enough

clear knot
#

I want to use a UI canvas overlayed on the screen but doing so blocks the cursor from clicking anything such as the text box that pops up when in client sim, is there a way I can remove its collider or make it ignore cursor clicks?

gray mulch
unborn plover
velvet zodiac
warm root
gray mulch
#

Although I have seen that prefab error a few times when the sdk exploded in the past

warm niche
#

but yea, all the missing scripts and avatar descriptor is sus ratl

warm root
#

Except this is what they started with, not what they ended up with after a build 😉

jaunty prism
#

chances are if a friend did send them the files, itd lead to missing guids

#

which could explain missing scripts

#

since its not referencing the correct id

#

had it before importing an asset that used vrcfury, the person who made it had a fucked vrcf install and would lead to missing scripts on the prefab

unborn plover
glacial yacht
unborn plover
glacial yacht
#

ohhh, right, we're in this channel 🙂

#

I'm only halfway through my coffee

velvet zodiac
# unborn plover how do I add VRC Avatar Parameter Drivers ? I'm trying to modify one and I thin...

VRCAvatarParameterDriver is a StateMachineBehaviour. So chat GPT might know that word.

Anyway, the first step is finding the state you want to add the driver to. That's what FindAnimatorState and FindStateInMachine below are for. And then you can add the driver with state.AddStateMachineBehaviour<VRCAvatarParameterDriver>();.

private static AnimatorState FindStateInMachine(AnimatorStateMachine stateMachine, int stateNameHash)
{
    foreach (var state in stateMachine.states)
    {
        if (state.state.nameHash == stateNameHash) return state.state;
    }

    // Use recursion to search sub state machines!
    foreach (var childStateMachine in stateMachine.stateMachines)
    {
        var foundState = FindStateInMachine(childStateMachine.stateMachine, stateNameHash);
        if (foundState) return foundState;
    }

    return null;
}

private static AnimatorState FindAnimatorState(AnimatorControllerLayer[] layers, string layerName, string stateName)
{
    foreach (var layer in layers)
    {
        if (layer.name == layerName)
        {
            return FindStateInMachine(layer.stateMachine, Animator.StringToHash(stateName));
        }
    }

    return null;
}

private void AddAvatarParameterDriver(AnimatorController animatorController)
{
    // Find the state we want to add the driver to.
    var layerName = "Your Layer";
    var stateName = "Your State";
    var state = FindAnimatorState(animatorController.layers, layerName, stateName);
    if (!state)
    {
        throw new InvalidOperationException($"Failed to find the state {stateName} in layer {layerName}.");
    }
    
    var driver = state.AddStateMachineBehaviour<VRCAvatarParameterDriver>();
    
    // Add parameters
    var parameter = new VRC_AvatarParameterDriver.Parameter();
    parameter.name = "your_parameter";
    parameter.type = VRC_AvatarParameterDriver.ChangeType.Set;
    parameter.value = 7;
    
    driver.parameters.Add(parameter);
}
queen hearth
#

I've heard it's better to use Equals() when comparing strings, but does that go for other object types such as ints, or is it only really a time saver for strings?

glacial yacht
#

I didn't think C# was overly picky about that

queen hearth
#

Some people are really picky so when you only learn C# from indie devs you accidentally learn crazy shit sometimes xD

glacial yacht
#

haha this is true

rugged drum
#
        public static bool operator == (String a, String b) {
           return String.Equals(a, b);
        }

operator == winds up just invoking String.Equals

#

I guess it's technically faster to directly use that?

glacial yacht
#

and then there's languages with == and === 🙂

rugged drum
#

javascript moment

#

also, I already solved this problem, but I figure someone else might find it useful

#

I am working on an editor script for a basic "freeze" system, and it needs to animate a bunch of VRC constraints

#

I got lazy and just animated VRCConstraintBase instead of the specific constraint type

#

This works in the editor, but causes a security check fail on upload

#

The solution was to not do that, and to animate the specific type of constraint I was using

#

this broke right before it was needed for an event. I'm much more trigger-happy with upload tests now 😅

rugged drum
#

has anyone made a [SerializeReference] property drawer that's available through the VPM?

#

(i pull those two in through OpenUPM)

rugged drum
#

I want to provide a consistent editor UI and documentation style for all of my packages. However, I'm reluctant to create a "ui package" that all of my other packages depend on.

That could cause two of my packages to become incompatible because one depends on UI 1.x.y and another depends on UI 2.x.y. That feels wrong!

I'm thinking about making a Git repository that contains the UI package -- with .meta files excluded. I'd add this repo to all of my packages as a submodule. This would let each package have its own copy of the UI package.

Any thoughts on that?

#

one immediate problem there is that this package would include assets that need to reference each other

#

(UIToolkit documents)

#

if I include the .meta files, then installing two packages that both have the embedded UI package would cause a GUID conflict

#

if I don't include the .meta files, I lose the inter-asset references within the UI package

rugged drum
rugged drum
#

yeah, I think that's the way to go

#

if this were strictly code, I could probably get away with embedding a copy in every package

#

but it also includes other kinds of Unity assets that need to be referenced

#

i'll just Git Gud

nocturne crow
#

Hey, i was working on a VCC comunity repository to streamline world creation in a small team a bit.
Sadly i cant seam to get my scripts to work.

I keep getting this error
Script 'Packages/com.magictwinsworld.sonarpatreonsign/RuneTime/Scripts/SimpleStringLoader.cs' does not belong to a U# assembly, have you made a U# assembly definition for the assembly the script is a part of?
If i understand it correctly i need to link via the Runetime asmdef the UdonSharp.Runtime, but i have done this and it dosnt change it.

Dose anyone have an idear what this could cause?
Thanks <3

rugged drum
#

I know very little about this, but i'm pretty sure you can do something to prevent that

#

"U# assembly definition" has nothing to do with the normal Assembly Definition asset

granite geode
#

Does anyone know if there’s a fork or a wrapper for animator as code that makes it like… useable? In its current state it seems like it’s a barebones system that you’re meant to implement yourself. I would love if there was a tool written around it where you write the code and it just generates an animator. No modular avatar or anything, just generates an animator for you based on the code that you write

mild coral
granite geode
#

what?

#

oh, it’s for avatars. Animator as code is generally a thing for avatars, hence the animators

mild coral
#

"generate animator based on the code you write" you can tell an animator to do things, with code, if that is what you mean?

mild coral
#

you can just already use it to create your own animators, without ModularAvatar

#

it's already has methods to create animator at specific place or edit existing, adding nodes to it, connecting them, assigning animations, edit their settings and so on

mild coral
# granite geode what?

Amplituda says u can dm him and he says, without friend request accept or dm to me, i can't write to anyone

rugged drum
#

I just generate controllers by hand

#

I should probably check out Animator As Code

granite geode
mild coral
#

speak to Amplituda he says he tried to dm u

#

it was his link

rugged drum
#

I want to be able to use VPM packages from an asset I distribute as a .unitypackage. Is there anything better I can do than instructing the user to manually install the packages through the VCC?

rugged drum
#

To elaborate: I'm working on an asset I want to sell. It feels a bit silly to publish a paid asset in my public VPM listing.

Obviously, people can share a .unitypackage, but there's at least some intent there, haha

#

But it looks like avoiding the VPM would make for a worse user experience

glacial yacht
#

I don't think you can (currently) lockdown a VPM repo in a reasonable way, so...

#

I wouldn't be surprised if VRChat is at least considering, if not outright working on, a way to pass an authentication token to VPM repos, and a library that can be used to verify such

rugged drum
#

That would require me to have working infrastructure

#

💥

glacial yacht
#

yep

rugged drum
#

another option would be to have a "stub" package that pulls in the dependencies, but doesn't do anything on its own. But that's also awkward.

#

and I'd still need to get the user to install the correct version of the package, so that they get correct dependencies

#

I'll probably just do a separate vpm listing for each package (you get that out of the box with VRChat's package templates)

rugged drum
#

lmao

rugged drum
#

i'm going to do a user study on this (i.e. trick one of my friends into being a guinea pig)

#
  • add main vpm listing
  • install stub package
  • import unitypackage
#

"stub" is the wrong word

rugged drum
#

argh I'm bikeshedding this so hard

granite geode
#

does anyone have documentation on the text formatting tags that work in radials and tooltips? what language is that?

unique forge
#

Html I believe when looking at old go locos

#

At least I think thats what you call it

rugged drum
#

It's XML/HTML-like, but it's unique to TextMeshPro

fallow pilot
warm root
#

A lot of Unity store sellers use this method. It's quite painless once you've authed.

#

But it requires using the in Unity git system specifically.

rugged drum
#

One minor breakthrough: you can use the Resolver package to install additional VPM dependencies through a script.

So, I could include a bootstrapper that prompts you to install the packages.

I'd use version defines to prevent the main assembly from being compiled if you have the wrong packages installed.

fickle junco
#

so- AVPro's dont loop anymore even with it on. No matter what I do it just wont loop. Did vrc change something about how they work?

jolly granite
#

I'm not sure exactly where best to ask this... but I'm currently making a custom script that intends to create components and setups just before runtime using the NDMF system.

Everything works as intended except when I try to create a HeadChop component... the head chop is created properly and appears to be completely normal in the editor, BUT in game it behaves as though the "Scale Factor" is set to the defaul of 1.

When I check a destructively built copy of the avatar, even slightly moving the Scale Factor jumps it to a value of 1. Once I do that and upload, everything works as expected.

There's some kind of disconnect between when I set the value via script versus when it's manually set in the editor. In this case I need to do this via script.

How can I properly set the HeadChop component values?

Here's a snippet of how I'm going about it right now.

headChopComponent.targetBones = new VRCHeadChop.HeadChopBone[2];

VRCHeadChop.HeadChopBone source0 = new VRCHeadChop.HeadChopBone();
source0.transform = headBone.transform;
source0.scaleFactor = 1f;
headChopComponent.targetBones[0] = source0;

VRCHeadChop.HeadChopBone source1 = new VRCHeadChop.HeadChopBone();
source1.transform = headChop.transform;
source1.scaleFactor = 0f;
headChopComponent.targetBones[1] = source1;```

Please ping me with a response so I make sure I see this. Thank you <3
jolly granite
coarse cave
#

huhh

fickle junco
#

using vrc's image slideshow prefab, im having issues with it not playing in group instances. It doesn't matter if its a group public they wont slide. If it's any other instance though, it works.

rugged drum
#

I haven't specifically used a headchop component this way

jolly granite
rugged drum
#

I’ll try it out on my end if I remember to tomorrow

maiden atlas
#

There should be a way to force update/mark the component as dirty so it updates. I remember having to do that for something in unity in the past but I'm blanking on how I did it exactly.

rugged drum
hot torrent
#

Anyone knows which asmdef has the definition for ApiUser on the base sdk?

jolly granite
maiden atlas
#

weird, that's def a bug them

tropic gate
#

Almost finished working on a system that allows other players and you to take off a certain piece of clothing, it have cloth like physics in your hand, and can be put back on. Since this is working I am pretty sure I know how to make a system that allows the transfer of clothing from one avatar to another but it’s gonna be a pain to make

queen hearth
#

Strip poker boutta get upgraded

tropic gate
#

Exactly

tropic gate
#

I plan on making it free or like just a few bucks because that shit took awhile to figure out💀

queen hearth
tropic gate
#

Gumroad, booth, payhip, Shopify, really anywhere

#

Jynxxy is good too but more of a link to one of the others

tropic gate
river plaza
#

Can someone please tell me what the cause for this might be? There's a conversation I'm having about it right now in #world-development , I can use all the help I can get.

ruby wedge
# river plaza

I can't tell you whats causing it but I can say that it is the default behavior for you to respawn if you fall out of the world and hit the respawn plane. So these missing parts of the world are likely, well, absent. You're walking into nothing, and immediately falling out, hitting the respawn plane, and getting respawned. That's what it sounds like anyways.

river plaza
#

I need help, and I can't seem to find the help I need. I'm having an advanced issue and need someone advanced to explain to me why in my scene/project/world whatever, there's an area that when approached or walked in, I'm being auto respawned or teleported to Default spawn point. Any script I created or trigger zone for said script isn't anywhere near this problematic area. The shader can't be the issue because I have this particular material with this particular shader attached to it assigned to a lot of areas, including this problematic area, however, I don't seem to be having this same issue anywhere else that this material has been assigned to. I've replaced this model where the problematic area is located, with a copy of the same model and reassigned all my materials, and added brand new box colliders, and nothing has changed. When I'm in play mode is different from when I'm on VRC Headset. In play mode on unity, I don't seem to be experiencing these same issues as I am in the headset. The area that's causing the problem is also visible in play mode on unity, but appears to be invisible or gone all together in VRC on the headset. I don't know what's going on, culling isn't the issue for that either. Can someone please help me, I've been trying to figure this out and ask around for at least a day so far. I want to fix this and have a working VRC world. I'm already irritated, this is the second time I've had to rebuild my world, because something terrible happened the first time and I ended up losing the files on my computer somehow and I had to reupload everything, like models and assets, and reassign materials and this that and the other. And I don't want to go through all that again over something that could be a potential easy fix, and I'm just unaware of it.

near bronze
river plaza
#

I'll have to wait till tomorrow morning when I get back home. Probably between 5:30 and 10 am

rugged drum
#

I'm trying to modify a VRCParentConstraint during avatar preprocessing. It works fine in the editor, but in-game, the offsets are wrong.

Here's what I'm doing:

foreach (var constraint in setup.constraints)
{
    constraint.Sources = new();
    constraint.Sources.Add(new VRCConstraintSource()
    {
        SourceTransform = setup.referenceTransform,
        Weight = 1f
    });
    
    constraint.ZeroConstraint();
}
#

The constraint doesn't get zeroed. Its object winds up with offsets that keep it in its original position

#

In the editor, it correctly winds up with no offset

#

I'll probably just set up the constraint destructively for now, but this is a bit mysterious!

#

The script also modifies the collision tags for contact senders and receivers, and...hang on, did that work either

#

okay, yes, that worked

plush bluff
shell merlin
#

anyone here know how something like ovr toolkit was made? like, how youd make an application thats wrist-locked and overlayed over all steamvr games?

near bronze
# shell merlin anyone here know how something like ovr toolkit was made? like, how youd make an...

It involves plugging into the steamVR APIs for drawing overlays. There are some projects which show examples of that like this: https://github.com/SDraw/openvr_widgets
but either way, it's going to be a lot of custom work to fit your specific idea

GitHub

SteamVR overlay widgets. Contribute to SDraw/openvr_widgets development by creating an account on GitHub.

shell merlin
#

interesting, thank you!

quiet escarp
#

Has anyone done frame analysis on vrchat before? Since you can't profile when in game I was thinking about using the intel frame analyzer to get a closer look. My only worry is that when grabbing a frame for analysis it also grabs the meshes which I feel could possibly trigger some sort of anti-ripping ban trigger. I'm not too sure what VRChat has in terms of that

amber dust
#

I have a question about the world SDK. I have an editor script that OnBuildRequested creates a new scene and merges all of the existing ones into that one scene. And then disables all the source scenes. It can build the world and creates the bundles and stuff. But when it comes to upload it just says that the upload was cancelled. I don't really do anything that would return that what I do would fail or something either since it should be before the build anyway. And I removed everything that would trigger post build.
If I'm using an older SDK I can upload last build just fine. If I do a build and test it works just fine.
So, is there something implemented to prevent people from doing funky things, or is just my code bad?

warm root
dry pendant
quiet escarp
#

One problem is, as far as I'm aware, I have to launch the .exe from the analysis tool in order for it to hook correctly which I can't figure out how to for local testing. And as elff said it's looking like it may still be against tos and could get me banned if detected so I might stay away from it for now

#

Although it does technically class as ripping, there's definitely a distinction to be made between legitimate inspection of resource usage vs being a script kiddy wanting to redistribute someone's paid avi for free

near bronze
quiet escarp
quiet escarp
#

Although I trust you I am still a bit nervous for what I'm about to try xd

near bronze
#

I can't vouch for whether or not anything will work, but at the very least, local test instances don't expect or require EAC to be running so there is nothing to catch

quiet escarp
#

Cool

near bronze
#

that said, if you use launch.exe it will still start up EAC and stop you, even if the server doesn't care

quiet escarp
#

ah ok

#

I'll give the default 'error' scene a test

near bronze
#

What do you mean by the instance is temporary? What exactly is the difference between desktop and VR?

#

vrchat/steamvr only support a single VR client running at once per computer. The second interrupts and closes the first

#

do you want a vr client and desktop client?

#

or are you trying to have two simultaneous VR clients?

#

I'm not quite following what it is that you're trying to do

#

if you only want one client then... you only need to launch one client?

#

is it launching multiple when you don't want it to?

#

oh yeah, that's just not what the URIs do

#

you should use invite me instead

#

that's the only option I'm aware of, sorry Shrug

#

URIs always launch a new client, they do not hook into existing clients

#

I suppose if the automation is more important than the time it takes to switch, I'd close whatever running clients first and then launch the new one

quiet escarp
#

Hell yeah, managed to get it to work

#

Realised I should add a couple arguments after the .exe path instead of in the environment variables field (I've no clue what I'm doing)

#

What a shocker, my massive bundle of leaves was the massive spike lol

quiet escarp
#

Damn this is so useful, like I can see that audiolink uses 13 draw calls but takes about the same time as one draw call further on. Goes to show that relying on drawcalls as a performance indicator is still fairly vague

glacial yacht
#

yeah in the case of clever world building, it's less a big deal. on some avatars though.....

rugged drum
#

i'm gonna have to try this out

split bramble
#

Hey hey, a long time ago i saw in action menu you can hide some characters(codes) which resize the action menu's texts and picture, can someone help me with it?

unique forge
#

Pretty sure its just html

tropic gate
#

Work has begun on a universal better expressions menu!

unique forge
#

The what

tropic gate
#

lol, I’m working on a better expressions menu, just a few features will include 3d representation of toggle that’s about to be put on, saveable presets, easier navigation and it’s 3d so stick drift won’t be an issue

unique forge
tropic gate
#

I’m also making a auto setup script with it so all you will have to do is put it on your avatar

warm root
#

I'm occasionally seeing a stack-trace, but the trace doesn't actually seem to mention anything from my own code, only SDK code. Could anyone elaborate on what's actually going wrong here? The odd part is that the image download does succeed.

#
2025.04.28 14:45:43 Debug      -  [Image Download] Attempting to load image from URL '[redacted]'
2025.04.28 14:45:44 Error      -  Object reference not set to an instance of an object.
System.NullReferenceException: Object reference not set to an instance of an object.
  at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.RunUdonEventOnMainThreadAndRemoveFromQueue (System.String eventName, System.ValueTuple`2[T1,T2] argument) [0x00000] in <00000000000000000000000000000000>:0 
  at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.RunUdonEventOnMainThreadAndRemoveFromQueue (System.String eventName, System.ValueTuple`2[T1,T2] argument) [0x00000] in <00000000000000000000000000000000>:0 
  at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.DownloadImage (System.Uri uri, System.Threading.CancellationToken cancellationToken) [0x00000] in <00000000000000000000000000000000>:0 
  at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.<DownloadImage>g__SlicedTextureUpload|52_0 (System.Int32 width, System.Int32 height, System.Int32 bytesPerPixel, UnityEngine.TextureFormat format, System.Int32 mipLevel, Unity.Collections.NativeSlice`1[T] outputBuffer, UnityEngine.Texture2D outputTexture) [0x00000] in <00000000000000000000000000000000>:0 
  at Cysharp.Threading.Tasks.Internal.ContinuationQueue.RunCore () [0x00000] in <00000000000000000000000000000000>:0 
--- End of stack trace from previous location where exception was thrown ---
#
  at Cysharp.Threading.Tasks.UniTask+ExceptionResultSource.GetResult (System.Int16 token) [0x00000] in <00000000000000000000000000000000>:0 
  at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.DownloadImage (System.Uri uri, System.Threading.CancellationToken cancellationToken) [0x00000] in <00000000000000000000000000000000>:0 
  at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.<DownloadImage>g__SlicedTextureUpload|52_0 (System.Int32 width, System.Int32 height, System.Int32 bytesPerPixel, UnityEngine.TextureFormat format, System.Int32 mipLevel, Unity.Collections.NativeSlice`1[T] outputBuffer, UnityEngine.Texture2D outputTexture) [0x00000] in <00000000000000000000000000000000>:0 
  at Cysharp.Threading.Tasks.Internal.ContinuationQueue.RunCore () [0x00000] in <00000000000000000000000000000000>:0 
--- End of stack trace from previous location where exception was thrown ---
#
  at Cysharp.Threading.Tasks.UniTaskCompletionSourceCore`1[TResult].GetResult (System.Int16 token) [0x00000] in <00000000000000000000000000000000>:0 
  at Cysharp.Threading.Tasks.CompilerServices.AsyncUniTask`1[TStateMachine].GetResult (System.Int16 token) [0x00000] in <00000000000000000000000000000000>:0 
  at Cysharp.Threading.Tasks.UniTaskExtensions+<>c.<Forget>b__16_0 (System.Object state) [0x00000] in <00000000000000000000000000000000>:0 
  at Cysharp.Threading.Tasks.UniTaskCompletionSourceCore`1[TResult].TrySetException (System.Exception error) [0x00000] in <00000000000000000000000000000000>:0 
  at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.DownloadImage (System.Uri uri, System.Threading.CancellationToken cancellationToken) [0x00000] in <00000000000000000000000000000000>:0 
  at VRC.SDK3.Image.VRCImageDownloader+ImageDownloader.<DownloadImage>g__SlicedTextureUpload|52_0 (System.Int32 width, System.Int32 height, System.Int32 bytesPerPixel, UnityEngine.TextureFormat format, System.Int32 mipLevel, Unity.Collections.NativeSlice`1[T] outputBuffer, UnityEngine.Texture2D outputTexture) [0x00000] in <00000000000000000000000000000000>:0 
  at Cysharp.Threading.Tasks.Internal.ContinuationQueue.RunCore () [0x00000] in <00000000000000000000000000000000>:0 
#

The code that I suspect triggers the problem is just...

                pictureDownload = new VRCImageDownloader();
                pictureDownload.DownloadImage(thumbIds[videoId], imageMaterial, null, textureInfo);
                localThumb = true;
            }```
tropic gate
#

What you want to look for in your error message will be the line number of which your error is occurring, find these and it can be easy to figure out

warm root
#

There is no line number, that's the whole reason I posted this.

#

None of the functions listed are my functions either.

#

(what I posted is the whole error / stack trace)

shadow onyx
#

possibly the null you're setting there? that needs to be the UdonBehaviour that will receive the image events
it's optional in graph, but is required in UdonSharp

Note that UdonSharp will not receive any events unless udonBehavior is specified.
the function might be getting confused when you set it to null

shadow onyx
warm root
#

Ugh, that's very annoying. Thanks Lego. I suspected that may be the case depite how it doesn't look like it should need it.

plush bluff
#

This is indeed from an oversight caused by the third parameter to DownloadImage() being null, since while UdonGraph auto-assigns the current Udon behavior in this case, UdonSharp doesn't. This will now be corrected in a future release (as in don't throw an exception, the difference between UdonGraph and UdonSharp is intended).

grizzled jackal
#

<@&397642795457970181>

coarse cave
grizzled jackal
#

np

tropic gate
# tropic gate Work has begun on a universal better expressions menu!

A little update on my progress. Im successfully able to get all toggles off of any animator in the avatardesc even the vrc fury ones and toggle them on and off with the press of a button. I also set the image of the button to the image of the toggle. The animator, layers, states, animations, behaviors, and transitions are all made through script too. The menu ATM can be put on any avatar that has 0 sub menus and will toggle on and off the toggles.

Script length is 381 line so far

cloud coral
#

I've made a simple unity plugin for adding toggles/animations to a blend tree. The primary goal with this is to eventually to make smoothing a lot easier to add to blend trees.

#

I would also like to eventually add some qol stuff too like a tool the add parameters from the expression menu to the animation controller.

glacial yacht
#

pro tip: shrink your window down so things aren't teeny tiny with a ton of wasted space. It's hard to see what is going on here.

vague girder
autumn hatch
#

Am I misunderstanding how the Copy Avatar Parameter Driver behaviour works? I'm trying to make R float follow the R_Driver float but it just won't change, is there something obvious I'm just missing?

vague girder
#

to make it continuously run, you can use a self-transition

#

though, what exactly are you trying to do here? what is the purpose of the "R" parameter?

autumn hatch
#

Changing RBG color values on an avatar

#

Trying to make different "save states" you can switch between and set different color presets yourself between them

vague girder
#

I see

#

I was going to suggest just plugging the 3 floats (R, G, B) into a Direct blendtree, with 3 animations, each one controlling the value of one color channel

#

that would be the most efficient way of controlling color

#

I suppose that still applies, but you'd be using the parameters copied from the presets

autumn hatch
#

If I get my proof of concept working I might optimize it later on

vague girder
#

so that it only spams the parameter driver when the menu is open

autumn hatch
#

That's a good idea!

#

Thanks a lot, I'll try this out after dinner!

#

I did a quick test anyways and this seems to work perfectly fine now

#

The self-transition did the trick

autumn hatch
vague girder
#

nice ^^

vagrant imp
#

i'm assuming the drive parameters are synced and the rest are local

#

but if you wanted to push it you could also sync only one parameter at a time and base which one is currently synced on a bool

#

reduces the synced bits from 24 (3x 8-bit floats) to 11 (1x 8-bit float 3x 1-bit bool)

#

that's probably the most you could reduce and still be lossless, but if you're ever really cramming for space you can do a lossy conversion to binary and interpolate with float smoothing

#

this is how facetracking is usually synced

autumn hatch
#

I ended up with 3 synced floats (R G B) and bunch of unsynced ones to store values. There's plenty of room to optimize but I got plenty of budget and optimizing wouldn't give me any huge benefits in this case

vagrant imp
#

yeah i just was curious, i like trying to push these things

#

you could actually get away with 10 bits now that i think about it, since you could convert two bools into a 2-bit int instead of 2 separate bools which gives you 4 values for which color to sync, which would allow you to sync another float as well, maybe for alpha lol

autumn hatch
#

I'm not too happy with ending up with 6 layers (3 with motion time for RGB floats, 3 logic layers) but eh, it works

vagrant imp
#

oh you shouldn't need that many layers, did you set it up with dbts?

#

I'd probably use two layers tbh, one for the colors and one for the save state logic

autumn hatch
#

Dbts?

vagrant imp
#

direct blend tree

autumn hatch
#

Oh, no, I could've done that

vagrant imp
#

you can use a DBT for the colors to reduce those to one layer, and you'd probably just need one logic layer since you only have one button pressed at a time

#

and in the case someone wants to mess around and use both menus at the same time you can just have certain buttons take priority (or just whichever was pressed most recently)

autumn hatch
#

True, thanks for the insight!

vagrant imp
#

@autumn hatch here is how i would reduce the layers to 2

#

in this example i used 3 save slots because i didn't feel like making more lol, but you can add up to 256 slots this way

#

what the logic layer does is on the remote side just don't do anything, then all the logic is handled on the local side. Then on the local side it will save your current settings to the last save slot used, then it sets the "last save slot" parameter to the current parameter and loads the current save slot. Then it waits for the parameter to change, which starts over this process, which means the save is updated for each slot only after the next one is loaded since the most recently used slot is stored locally.

#

and from any of these states if the randomize button is pressed it will randomize the values, wait for the button to not be pressed, and then immediately save the new value and load the correct slot

#

just make sure the random parameter driver is set to "local only" since it uses the anystate which means it will transition for remote users as well

#

or actually you could just add the IsLocal parameter to that condition lol

vague girder
#

you could get it down to one blendtree and 3 animations

#

and as an extra optimization, if the layer that does the logic doesn't actually have any animations in it (which it shouldn't have anyways), you can set the layer weight to 0 to make it perform better

#

state behaviors still run even if the weight is 0

#

VRCFury will actually notice this and do the optimization automatically nowadays

#

but it doesn't hurt to also do yourself

pale lake
#

Hi, I was thinking about writing a tool to copy over saved avatar parameters from one avatar to another when you have multiple version of the same avatar.
I checked the docs and saw the LocalAvatarData\ folder which is technically what i want but when i go and change one value and load the avatar the file is being overwritten to its original state.
do you know why that happens ? Is there another location that i could go modify to do that ?

vague girder
#

duuude, I was just thinking about something like that today

#

crazy

pale lake
#

Uploading 6 different version of the same avatar and redoing the toggles for each ones is a pain

vague girder
#

the reason why I was thinking about it is because of the new avatar marketplace thing. creators are allowed to have variants of an avatar, so I was thinking it'd make sense to have toggles sync between them. it would also be useful if you have your avatar modularized into a base + accessories/clothing, that way you can do separate uploads for different outfits, and have base toggles sync

pale lake
#

I was just thinking of a way to one time sync all common parameters

#

on selected avatars

glacial yacht
#

is that not a thing in Pumkin's tools?

vague girder
#

change a toggle on one avatar and it changes it on another

glacial yacht
#

oh I see

pale lake
#

Well more like, you get a new avatar, you spend 10-30 minutes changing all the toggles and hue shift how you want it

#

then you have like 5 other different version of the avatar that you also need to change all your toggles and hue shift the same way so would be nice to have a tool when you say " take all the toggles i made from this avatar and do the same to those other 5" then you switch into another version of the avatar and all the toggles and hue shift are the same as the one you spent time doing earlier

glacial yacht
#

with no actual standards for parameters, I'm not sure how this could possibly work

pale lake
#

and when you open it, it has all your saved toggles parameters state

#

but when i tried to manually modify one and switched into said avatar, the file got overwritten to its previous state

glacial yacht
#

Yes but this would only work if multiple avatars have exactly the same parameters

pale lake
#

like if both avatar have a Hue_Shirt then just copy over that saved parameter

#

and ignore all the ones different

vague girder
#

VRCFury may complicate this a bit, since all parameters added by fury toggles or Full Controllers (that are not defined as global params) get VF##_ appended to them

#

and it may be different per avatar

glacial yacht
#

assuming it does exactly the same thing - what if it's named the same but does something different?

pale lake
glacial yacht
#

no, they get uploaded with the VF stuff

pale lake
#

too bad i guess

pale lake
glacial yacht
#

right - I mean this doesn't seem like something of much use if it's for such an extremely narrow use-case

vague girder
#

if it was part of a full controller, the original param name is prefixed, but if it's a fury toggle, it might be different, I forget

#

you could do some fuzzy matching and find a match, but if you have multiple instances of one prefab, you would end up with two identical param names

pale lake
#

etc etc

glacial yacht
#

if you're uploading them though why not just set those defaults before uploading?

#

or you mean you want them to also be synced I guess

pale lake
#

cuz i prefer doing it in vr

#

unity doesnt always gives the best visual result compared to ingame

#

and im not gonna "note" what i do to "hard do it" in the parameter file each time for every avatar :c

vague girder
#

I mean, that's why you make stuff modular, no?

#

you have one "common" base avatar, you make it a prefab, and you use it to build different versions of the avatar, each with different stuff added to them

#

so that if you change something on the base, they are all going to have that change

glacial yacht
#

I mostly use variants (outfits primarily) of the same avatar and I've never felt I needed this. I suppose it's an interesting idea but it'd need a bunch of work to do right

vague girder
#

you can combine that with that one tool to bulk-upload multiple avatars if you want

pale lake
#

i mean sure but thats what i want to use on commercial avatars, not one that is your "OC" per say

#

when i buy an avi i upload it and just get ingame

vague girder
pale lake
vague girder
pale lake
#

thats why i asked here

#

its as if vrchat knows the state of that file before i modify it when its supposed to read from it and write upon changes ingame

#

idk why it would write when i just switch into the avatar

pale lake
#

So i got this avatar with this ID, if i go to the LocalAvatarData folder i can see the avtr_472f5ac0-b041-4f5c-87c4-3ed2212bb2c5 File that contains the saved toggles state of my avatar.

I switch out of this avatar, open the file and changed the toggle for the tail from 1 to 0 ( which will turn it on )
I saved the file and then switch back into the avatar. But then the file get overwritten back to 1

#

i also notice the file gets written as well when changing out of the avatar

#

so both in and out overwrites

#

i dont see why/how it would overwrite when loading into the avatar when its just supposed to read from that file

shadow onyx
#

oh I think I encountered a similar issue

#

your avatar parameters that you had last selected, I think are kinda stored persistently? Even if you update that avatar

#

it sees you had X parameter saved, the new avatar file still has X parameter, and loads it

pale lake
#

Ye make sense but i'm modifying the file that has the toggle saved

#

i'm not touching anything in Unity

shadow onyx
#

you're not editing in Unity, but are editing the file?

#

oh from your local data

pale lake
#

this is the file the game is supposed to read the saved states from

#

but cant figure out why it gets overwritten by the game when its just supposed to read from it

#

so it doesnt acknowledge any changes made to it

shadow onyx
#

I guess it's an unexpected way to change the value, so its behavior is undefined

pale lake
#

to be clear, i dont want to change the state Live

#

i just want to copy paste the parameters from one avatar to another/multiple ( if they have common parameters name )

#

so i dont have to redo the hue shift on every of them

#

Ok

#

I tested doing the same thing but closing my game each times

#

and it works

#

looks like all those files in LocalAvatarData are loading in RAM when vrchat is running and the game overwrites the files when changing in and out avatars

#

but if modifications are made while the game is not running then it will work

gray mulch
pale lake
#

its a very niche thing, i don't really know too much about anything else than that one

#

also if i were to make it with OSC i'll only be able to apply all the changes to the avatar i'm currently in, meaning id have to switch in X avatars that i want to paste my settings to but if i use the files i can just do it all at once ( if file already exists )

willow kettle
#

so im coming across a rather bizarre issue and wondered if anyone had or has the same problem? when sending the osc parameter /avatar/change "avtr_{id}" the game registers it but never actually issues the command to change the avatar

#

is that function actually broken in vrchat?

#

or did the function change and the documentation was never updated

#

because my osc listener prints it as this

#

[OSC] msg → {"addr": "/avatar/change", "args": ["avtr_{id}"]}

shadow onyx
#
You can now use OSC to change avatars!
To do so, send a message to the /avatar/change address with an avatar ID as the argument.
avtr_26187637-0c30-4a09-86e1-bc928c07309e, for example. It should look like that.
You can only change to avatars in your favorites, your recents, or that you've uploaded yourself.
#

your issue might possibly relate to that last point

willow kettle
#

hmmm

#

am gonna write a test script since i am using an extremely custom flavor of osc query in python

#

it might not be supported over the osc query interface

#

for reference, python does not have a package or contain any valid documentation for OSC Query to do so

#

i had to probe with zeroconf and mDNS and write a custom http json response / reader

#

will let you know what i find

shadow onyx
#

python doesn't have an OSC package?

willow kettle
#

not for Query

#

unlike C# and other langauges

#

you have to use Python OSC

#

which is problematic to say the least

#

because certain apps like VRCFacetracking

#

will fight for control since its running as administrator

shadow onyx
#

that makes more sense

#

you see it appear in the OSC debug and everything though?

willow kettle
#

yup

#

never runs the actual swap

shadow onyx
#

huh I'm... kind of seeing the same thing, not sure what's going on

#

I wanted to test to see if that avatar changing thing was working, but first I wanted to test if, in general, OSC was working alright by just jumping. The big red button is from VRChat's demo project in the docs, and the second button is one I created, which as far as I can tell is identical to the first button

#

both successfully send the signal, but only the demo button actually works?

shadow onyx
#

ah nvm. figured it out. Man TouchOSC is not super clear

willow kettle
shadow onyx
#

I was sending the argument as a float, instead of an integer as it expected. This for some reason appears identical in the debug

thorn tundra
#

I'm sorry I have to come onto here and be a bother, but I'm at my wits end. I have a slide model that I'm trying my darnest to make slippery and act as a slide for VRChat, but for the life of me I can't get it to be slippery. Where might I go to ask for assistance with my issue?

shadow onyx
#

I'm trying the /avatar/change now and it indeed seems to not be working

willow kettle
shadow onyx
#

I found a canny on it just now, and people are saying it only works with favorited avatars (I'm currently testing it with an avatar I have uploaded, but not favorited)

#

aaaand.... it worked!

#

so the original article seems inaccurate. They must be favorited for it to work

#

which I think would be a bug, in my opinion

shadow onyx
shadow onyx
thorn tundra
shadow onyx
#

not sure, I did not try the script myself

thorn tundra
#

Well I'm about to

thorn tundra
#

Okay the full answer is no it does not work. Thank you though for the attempted assist.

tropic gate
#

YUR so like since vrc hates us and dont let us use VFX graph. HOW TF DO I DO DECALS .........