[Studio Beta] Avatar Joint Upgrade: Enabling Physically-Simulated Characters

Right now ragdolls only work with R15 rigs unfortunately

The logic for an Animator “finding” an AnimationConstraint and a Motor6D should be identical. So that should work for both. If you find a setup that doesn’t match between the two, let us know - it’s a bug.

3 Likes

Like Motor6D’s and Bones, the Transform property does not replicate at all. Every client is responsible for updating it itself. It works this way so Animators update joint angles independently on each client while only replicating animation state changes. We don’t want the joint angles replicating from client to server every frame.

If you or other people have more context on why this is a problem, we might be able to improve it.

1 Like

this update are really useful, i wouldnt struggle with ragdoll setup anymore. but rn physics looks weird i must say

1 Like

This is really cool, i tried it in the provided place and i must say it is sometimes a bit wonky with tools ex. flinging you in directions and it might take a bit of work to update games to support this but yeah i like it

This feature looks to be very useful to me, it would be good if it soon supported CreateHumanoidModelFromDescription & went live for full deployment :smile:

1 Like

Also I hope there will be no bugs with UseStrafingAnimations in Combination with the AvatarJointUpgrade

1 Like

I never thought the day when ROBLOX adds in-engine ragdoll would come.
ROBLOX is finally becoming good? Took only, what? 10 years?

2 Likes

Im not talking about client to server, im talking about server to client.

Its a problem for me because i want to make a character aim and test it in the server as well as to see it aiming in the client


this is super fun! cant wait to see what else comes out of this

1 Like

That’s what they are referring to. Animation transformations intentionally do not replicate from the Server to the Client, as that allows Clients to interpolate the Animations themselves, seeing a much smoother result than if they had to wait on the Server for Animations to transform rigs. The implementation of this means that .Transform is not replicated, where it would be wasted even if it was, as Animators reset the transformations of the entire rig before stepping any Animations.

Ok but what if i want to have NPC that is controlled by the server and i want it to aim or play animation that all the clients see it as the same?

1 Like

Then you must do what Roblox did and set .Transform manually on each Client at the RunService.PreSimulation event. If you are using Motor6Ds, you can instead set .C0 on the Server, which acts as an offset to the .Transform that replicates. You can also take advantage of the Animation system with Weights, which automatically replicates, as shown here:

This method would be a lot easier with Additive Animations, though :pensive:

Animations automatically replicate from server to client?

Hold on…

We have ingame csg api with mesh support on its way.
We have emissive textures on their way.
We have ingame mesh and image apis.
Ingame asset creation is supposedly on its way.
And now, we have physically simulated avatars.

Is it possible to make LittleBigPlanet in Roblox now?!?

1 Like

Yes… In some cases, they even replicate Client to Server, specifically, Animations played on the Animator under the Humanoid of a Player, will replicate from that Player to the Server, where the Server will then replicate those Animations to every other Client. It’s how the default Animate LocalScript works.

1 Like

The demo game is amazing! Is there a way to exclude the ragdoll physics when teleporting? I am working on something right now to which I have included my script that teleports me to a named part with a chat command. The issue with it is every time I teleport it activates the ragdoll physics, and I end up on the ground being dragged back to where I teleported from, presumably because by teleporting I have moved faster that the threshold speed of 100. This usually results in me falling off the map and dying.

1 Like

A lot of teleport scripts set the HumanoidRootPart.CFrame directly. This moves the whole Assembly attached to the HumanoidRootPart, which includes any parts connected by kinematic joints. If you have non-kinematic joints, those parts don’t move, so the body becomes separated and explodes.

I personally teleport characters with Model.SetPrimaryPartCFrame, which moves the whole Model. You can also use Model.MoveTo and Model.PivotTo.

1 Like

after doing some experimenting, you can kind of get this working on r6 by setting it up manually with a starterCharcater

I hope we don’t have to wait too long for r6 to be actually compatible

I’m pretty sure my script does use Humanoid.CFrame, I’ll have a look at the documentation you linked and see what I can do about changing it, although my scripting knowledge is quite limited. If all else fails I can always ask the assistant in Roblox Studio.

Thank you for taking the time to reply!

1 Like