[1181] Grabbing "Is Animated" Physics Bones stutters, doesn't actually move.
complete
kitlith
This is specifically an issue with grabbing, not colliding, so far as I can tell.
Multiple people have tried using an animation to toggle "Is Animated" at runtime (i.e. disable that while grabbing, or only enable while a specific animation is happening) but it appears to make no difference at runtime.
GIF illustrating the issue courtesy of Joshuarox100.
Log In
Tupper - VRChat Head of Community
marked this post as
complete
Fixed in an upcoming Open Beta build.
Wunder Wulfe
I wonder if there will be a fix that will just
work
with IsAnimated, much like how interaction/collision works fine with it. That way you can still have animations stacked on top of it, and the deltas of the animation would still affect the movement of the bonesnaqtn
Is there any problem if IsAnimated is always true? I mean, how about setting it true even if actually animated or not.
kitlith
naqtn: That's what this post is about: having IsAnimated be true causes issues when you try to grab the bones. so it's untenable if you want to be able to grab the bones unless this behavior is changed. Meanwhile, if IsAnimated is false, animations can't move those bones around. Assuming no change, you need to be able to toggle IsAnimated in order to be able to both animate the bones sometimes, and grab them at others.
Toggling IsAnimated didn't seem to work because neither me or others who were trying it were disabling the component to reset it, and I only saw your Technical Note about that in PhysBonesTK just now. (For anyone following along, that's here: https://github.com/naqtn/PhysBonesTK/blob/main/Unity/PhysBonesTK-Dev/Assets/PhysBonesTK/Readme.md#reloading-parameters) I'm not sure requiring disabling the GameObject desirable behavior in the long run.
Nevertheless, this means that we still have a workaround in the form of disabling and re-enabling the PhysBone to refresh these parameters, including IsAnimated. I suspect this would cause janky behaviour for the idea of using a grab to toggle off IsAnimated (i.e. disabling an idle animation), but it could be made to work.
I think I have enough information to start implementing this on my avatar.
EDIT: This workaround seems to be incompatible with the idea of animating a bone with the goal of creating a new default position for the physics bone. Toggling "Is Animated" w/ configHasUpdated does not have this issue.
My description of this is clumsy. I'll try to come back after I get some sleep, and maybe make a gif illustrating this particular case. Maybe it should be split off as a different bug. :/
Joshuarox100
kitlith: The problem with toggling the object or component off is that it would disable whatever grabbed it, causing it to re-enable the parameter.
For example, say I grabbed my ear. Then I used the Ear_IsGrabbed parameter to reset the component with Is Animated disabled. When I disable the component, it also makes it unable to be grabbed, thus resetting Ear_IsGrabbed to false, and undoing the change.
Yes, you could set a delay for reverting Is Animated back to true, but either way, people would have to grab the bone twice in quick succession to hold it.
kitlith
RE: using animations to toggle "Is Animated": I just did some digging, there's a field VRCPhysBoneBase.configHasUpdated which causes the script to respond to changes in the parameters. It's set to true when modifying stuff in the inspector, and I guess it isn't set to true when an animation sets values on the script. I threw together a quick script (https://gist.github.com/kitlith/703806b980c4a613a1c70f147aec596d) to set configHasUpdated to true, and toggling "Is Animated" is handled once that field is set.
A possible fix might involve changing the config fields on VRCPhysBoneBase to properties that set configHasUpdated to true in the setter.
This may qualify as a separate bug, to be split out from this issue.
Blizzball
An easy fix for this I think would be a toggle to set: Animation overrides grab or grab overrides animation.
Wunder Wulfe
I think physbone might have to copy the mechanisms of dynamic bones by creating separate “particles” that are not directly attached to the bones in order to animate the bones but still perform pulling
Ruuubick - Designer
Merged in a post:
[1181] Animated bones flicker when grabbed
PingerSurprise
Pretty self explanatory.
Whenever the animator contains an animation that impacts a bone and you turn on IsAnimated for this bone, it flickers when grabbed.
It seems like the animator overrides grabbing.
Wolfy_527
I'm also having this issue. Tried toggling the "Is Animated" button with animations linked up to "(parameter)_IsGrabbed as well as even swapping between a set of bones, one with "Is Animated" toggled on, and the other with "Is Animated" toggled off, but the bones (which is obvious to me now) are a completely new set of bones, so they reset to the default pose, get de-grabbed and then change back to the animated "Is Animated" bones. Would love to see "Is Animated" working at runtime so people can interact with tails, ears, etc.
Ruuubick - Designer
marked this post as
tracked
Desmoulins
Darn, seeing that even using doing this via animator does not work makes this quite hard to use.
Load More
→