I am getting an issue where sometimes, only in live games, certain custom joints in animations don’t replicate. This is on a game that has StreamingEnabled set to true, but as I’ll later show in the repro, this doesn’t seem to be the cause.
Specifically, this happens for a custom joint created between the player’s right hand and a weapon instance, and the behavior is similar to what is shown in the OP.
Running a player + servers test, these animations always replicate correctly. However, I was able to generate a repro that only works on a live game with the following steps:
Step 0: Download this repro file
AnimationReplicationRepro.rbxl (46.0 KB)
Step 1: Go into the animation editor and load the “MovePartDown” animation. Export this as your own animation on the roblox website so that it can be displayed in the live game.
Step 2: Copy the ID of your new animation into here:
Step 3: Publish this place to a roblox game.
Step 4: Start the game on a higher-end, desktop device, and walk a fair distance from the spawn.
Step 5: Load the game on a low-memory, low-end mobile device, and click the “Add Custom Part & Start Animation” button.
On the mobile device, the whole animation loads correctly, shifting the part down; however, on the desktop device, it will not shift down but instead stay in the upwards, unanimated position:
If you move closer to the low-end-device’s character, the animation will actually replicate correctly. Clicking the “Add Custom Part & Start Animation” button will allow you to reset this, and see at what distance the the player’s animation will fully replicate. In this case it seems to be a very short distance indeed.
Takeaways from investigating this bug:
- This bug is NOT dependent on StreamingEnabled; turning this off on the repro I was still able to get the same result.
- I made the server tell the client to run the animation exactly when the part is created to model what happens in my game. It seems that this is not a race condition issue, so if you create the part, wait a second, and then load the animation, the custom joint’s animated transform will still not replicate.
- This only happens when there are custom joints. Changing the animation to contain regular R15 parts (such as raising the arms up), the arms will replicate, but the custom joint itself will not.
It seems like the transform of the custom joint itself is what is not replicating correctly, and only replicates from the low-end client to nearby players based on throttling that’s determined by the low-end client.
Workaround: You could use animation events and a custom script that listens to these as the animation plays, and adjust the transform if found. This is tedious and may require some hardcoding.
Alternatively you can run an animation on an invisible proxy character on the client every time an animation with custom joints plays, and adjust it on the client-side AnimationTrack that’s playing it. This could become performance intensive.
There’s not a great workaround. Animated custom joints are de-facto broken until this bug is fixed.