Animation Replication Issues

First off, I want other players to see my local animations that use a StarterCharacterScript to play to be specific.
The main issue is the animations won’t play for others 99% of the time though it’s rare it does so essentially, they just T-Pose, not literally though since they just do the pose a rig would even when moving. The idle does register except it’s the default R6 idle and not what I want. I did try using an animator, didn’t work. I do not plan on using remotes for animation playing since I would have to spend a year at least recoding my game. Some context is its like an Asim game where you use characters instead of the default players avatar. I’m not sure if it has to do with multiple people respawning at once while loading animations. I did recently move so it could be connection issues.

4 Likes

Are you setting the Player’s Character property to the created rig?

For animations to replicate properly, they must:

  • Be uploaded to the same owner of the game they’re used in.
  • Have their weights assigned correctly.
  • Be played on a player’s character.
  • I’ve also found animations to barely work if uploaded to anything but a group.

You should also just use the Animator to load animations since loading animations onto a Humanoid is deprecated. You should also play client movement animations locally, there’s absolutely no need to make them managed by the server.

It’s also really easy to modify the animations on the default Animate script (Yes, even at runtime), so if you aren’t doing that, I’d highly recommend it.

Well, problem is:

  1. I own the game.
  2. They normally play on the owner characters client.
  3. I play tested it when it was published yet it didn’t replicate either.
  4. I tried using the animator inside the humanoid, but it still couldn’t replicate.
  5. I did try using legacy animation blending but that didn’t work either.
    (Side note: I’m using a custom animate script)

If it works in roblox studio but doesn’t work in game, it just means that the animationID has been uploaded by another owner.

You can try to reupload the animation and update the animationsIDs

If the problem still persists, you should try to update the animation priority and see if the problem comes from rendering 2 animations with the same priority.
Priority should be higher than the default animations

It doesn’t work in either and yes I published the animations

I also have mentioned already that
1 - I’m playing the anims on the client
2 - It works completely fine on the client view
3 - It’s just not being replicated
4 - I own the game, and I did publish my own animations hence why I said it still works sometimes
5 - I tried it on the animator, but it still hasn’t worked
So, it wouldn’t make any sense if it was either a priority issue or an animator issue.

little boost since this hasnt gained traction after this

TLDR: for animations to replicate, the Animator instance has to exist first on the server and be replicated to the client, not created on the client (either intentionally, or by calling Humanoid:LoadAnimation() too early).

It’s very easy when using custom characters, to forget that you need to add an Animator as a child of the Humanoid on the server and then wait for the Animator instance to replicate to the client before the client makes any LoadAnimation calls. If you call Humanoid:LoadAnimation() on a client character before its Animator has replicated, the Humanoid will spawn a new Animator child which will not replicate back to the server or any other clients, and will be usable for client-local animations only.

Here’s a better example:
client 1


client 2

And yes, there is an animator in each humanoid.
image
(side note: I probably should’ve sent this at the start since it would’ve explained more and also, I tried using the animator instead of the humanoid, but it still had the same outcome)

These videos show a different scenario than your original post describes, right? Like the first video, I can see the wizard character playing an Idle animation, but then no walk/run animations. But this is different than “they just T-Pose”, which implies zero animation replication.

Do you have multiple scripts competing to play animations, or some mix of client and server Play() calls?

I’d recommend just making yourself a small debug script that polls Animator:GetPlayingAnimationTracks() and shows what each character is playing every frame (in a GUI or printed to output periodically). Or just Then you’ll at least know if it’s a replication issue (tracks missing), a scripting issue (you have too many tracks playing, like if your priorities are set wrong, or you’re not stopping tracks), or a content loading issue.

1 Like

is this a game made under a group/community? if so check you uploaded it under the group and not on your account.

1 Like

Thank you for this suggestion, I will test this and mark it as the solution for now.

1 Like

I tried it and it was only showing the current playing animation so unfortunately that wasn’t the issue
I also did try changing their priorities and it didn’t really fix anything.
If it helps, I will send how I load the animations and how I play them.

local anims = char:WaitForChild("Animations")

local idleAnim = hum:LoadAnimation(anims:WaitForChild("Idle"))
idleAnim.Priority = Enum.AnimationPriority.Idle
local walkAnim = hum:LoadAnimation(anims:WaitForChild("Walk"))
walkAnim.Priority = Enum.AnimationPriority.Idle
local runAnim = hum:LoadAnimation(anims:WaitForChild("Run"))
runAnim.Priority = Enum.AnimationPriority.Idle
local InjuredIdleAnim = hum:LoadAnimation(anims:WaitForChild("InjuredIdle"))
InjuredIdleAnim.Priority = Enum.AnimationPriority.Idle
local InjuredWalkAnim = hum:LoadAnimation(anims:WaitForChild("InjuredWalk"))
InjuredWalkAnim.Priority = Enum.AnimationPriority.Idle
local InjuredRunAnim = hum:LoadAnimation(anims:WaitForChild("InjuredRun"))
InjuredRunAnim.Priority = Enum.AnimationPriority.Idle

and

task.spawn(function()
	while task.wait() do
		if hum.Health > (hum.MaxHealth / 2) then
			InjuredIdleAnim:Stop(0.5)
			InjuredRunAnim:Stop(0.5)
			InjuredWalkAnim:Stop(0.5)
			if hum.MoveDirection == Vector3.zero then
				if not idleAnim.IsPlaying then
					idleAnim:Play()
					walkAnim:Stop()
					runAnim:Stop()
				end
			else
				idleAnim:Stop(0.5)
				if running then
					if not runAnim.IsPlaying then
						runAnim:Play(0.5)
						walkAnim:Stop(0.5)
					end
					runAnim:AdjustSpeed(hum.WalkSpeed / script:GetAttribute("RunSpeed"))
				else
					if not walkAnim.IsPlaying then
						walkAnim:Play(0.5)
						runAnim:Stop(0.5)
					end
					walkAnim:AdjustSpeed(hum.WalkSpeed / script:GetAttribute("WalkSpeed"))
				end
			end
		else
			idleAnim:Stop(0.5)
			runAnim:Stop(0.5)
			walkAnim:Stop(0.5)
			if hum.MoveDirection == Vector3.zero then
				if not InjuredIdleAnim.IsPlaying then
					InjuredIdleAnim:Play()
					InjuredWalkAnim:Stop()
					InjuredRunAnim:Stop()
				end
			else
				InjuredIdleAnim:Stop(0.5)
				if running then
					if not InjuredRunAnim.IsPlaying then
						InjuredRunAnim:Play(0.5)
						InjuredWalkAnim:Stop(0.5)
					end
					InjuredRunAnim:AdjustSpeed(hum.WalkSpeed / script:GetAttribute("RunSpeed"))
				else
					if not InjuredWalkAnim.IsPlaying then
						InjuredWalkAnim:Play(0.5)
						InjuredRunAnim:Stop(0.5)
					end
					InjuredWalkAnim:AdjustSpeed(hum.WalkSpeed / script:GetAttribute("WalkSpeed"))
				end
			end
		end
	end
end)

I do want to clarify there was a point in time it worked for everyone, so I do find it weird that it stopped working.

The game was made on my account and published to it, and the animations were published on it too.
I might have one idea what the issue could be but either way it would need fixing.
I recently moved and the wifi has been having issues.

I think that animators have to be DIRECTLY parented to a Humanoid/AnimationController. Give it a try and see if it works.

another nudge tho im starting to suspect it being one of my devs messing it up constantly since bugs only appear when i leave this specific dev unsupervised