Description
Description
The NetworkAnimator dont send animator layer weight updates. Its not possible from host to client or from client (sServerAuthoritative = false) to host.
If i have 2 Players (Host and Client) i try to override the current animation (just the arms). If i do it with animation layer i have to set the correct layer weight. But the attached Component doesnt sync the weight value updates. The will just set on the owner.
The Component
public class OwnerNetworkAnimator : NetworkAnimator
{
protected override bool OnIsServerAuthoritative()
{
return false;
}
}
Code Example to set the weight
// Works Great on host and client
animator.SetFloat("vectorX", currentAnimationVector.x);
animator.SetFloat("vectorY", currentAnimationVector.y);
// Work just for the owner
// Set AnimationLayer
animator.SetLayerWeight(1, (controller.Enemy ? 1 : 0));
Actual Outcome
animator.GetLayerWeight(1) is always 0 and will not be updated for non owner.
Expected Outcome
animator.GetLayerWeight(1) will be updated for owner and for non owner
Screenshots
Environment
- OS: Windows 10
- Unity Version: 2021.3.16f
- Netcode Commit: 1.1.0
Additional Context
Because of the problem, wrong animation will be executed.
WORKAROUND:
In my case i have to layers. the seconde one overrides my arm animations. Because i cant change the layer weight over the network, i set the 2. layer weight (arm layer) to 1 (full activated) and leave it like this the whole time. In the seconde layer i created an empty state (that doesnt change anything) and a arm animation state. Now, with the network animator i can send a trigger (important: trigger have to call over the network animation component) to start the arm animation.
With this workaround, everything works for my simple example.