Create a weapon/gun using trigger pull instead of a gesture to shoot?

My three main questions as a TLDR at the bottom.

Hello all, I’m trying to make a weapon prop for my avatar that fires when the trigger is pulled instead of how most avatar weapon props are made using a specific hand gesture. I’m wondering if anyone else has managed to accomplish this as I’ve run into a number of problems. The first is that it seems that when switching between hand poses, the default value for GestureRight/LeftWeight is 1.0, as my transition to the shooting animation triggers whenever the gesture the game thinks I’m making, changes. I find this incredibly odd, why would the default value be 1.0 instead of 0.0? Unless I’m doing something wrong, this makes no sense to me.

I was able to get around this, by setting the transition parameters to my shooting anim to GestureRightWeight must be 0.7<value<1. That way on transitioning gestures and it’s 1 and not less than 1, it’ll then only trigger when I’m actually puling the trigger. Problem is, for other users apparently the polling rate/sync rate for the GestureRight/LeftWeight are “playable”. Thus it only updates every second or so. Others will only see me shoot if the sync time happens to coincide with when the trigger value is between 0.7 and 1, which for a fast trigger pull can last for substantially less than a second. Often the shot will not show for remote users as a result. It shows on my side just fine though as the sync timing is not a client side issue as far as I can tell.

TLDR: So I have three questions, assuming I’ve not done something wrong:
Why is the default value for GestureRight/LeftWeight 1.0 when transitioning gesture states instead of 0.0?
Why is GestureRight/LeftWeight playable synced and not IK synced like other gesture parameters?
Has anyone been able to get around these issues or otherwise been able to properly set up a weapon that shoots on trigger pull as opposed to a gesture?


For those who are also perhaps having this problem. I was able to find a workaround that seems to work. If a bit duct-tape and spit of a workaround. I set up a two new parameters. The first being a local only parameter (named Client side) that was driven to “true” by the VRC parameter driver on the not shooting state (which is the default entry state). I then made two different transitions to the shooting state. One that is on my end, were the actual detection takes place for the trigger pull that depends on 0.7<GestureRightWeight<1 as well as the “Client side” parameter being true. Once in the shooting state, I made the VRC parameter driver update the second new bool parameter “have shot” to true. This parameter is synced across the network by placing it in the expression parameters list like any other toggle or synced parameter. The second transition to the shooting state from the non-shooting state is for external clients, and depended on the “have shot” bool being true. That way, while there might be a slight delay (for calculation time) between when I shot and when an external client will see me shooting, it does in fact shoot seemingly every time for both me and external clients. Once the shooting anim has finished and it returns to the non-shooting state I also update the “Have shot” bool back to false to reset the loop.

I haven’t tested this extensively so I’m not sure what other problems might present themselves, or if the delay between the shooter and other clients is large enough to make PVP not viable, but for the moment this seems to work.