/// <summary> /// Custom Deserialization /// </summary> /// <param name="reader"></param> /// <param name="initialState"></param> public override void OnDeserialize(NetworkReader reader, bool initialState) { base.OnDeserialize(reader, initialState); if (initialState) { for (int i = 0; i < animator.layerCount; i++) { int stateHash = reader.ReadInt(); float normalizedTime = reader.ReadFloat(); animator.SetLayerWeight(i, reader.ReadFloat()); animator.Play(stateHash, i, normalizedTime); } ReadParameters(reader); } }
void ReadParameters(NetworkReader reader) { bool animatorEnabled = animator.enabled; // need to read values from NetworkReader even if animator is disabled ulong dirtyBits = reader.ReadULong(); for (int i = 0; i < parameters.Length; i++) { if ((dirtyBits & (1ul << i)) == 0) { continue; } AnimatorControllerParameter par = parameters[i]; if (par.type == AnimatorControllerParameterType.Int) { int newIntValue = reader.ReadInt(); if (animatorEnabled) { animator.SetInteger(par.nameHash, newIntValue); } } else if (par.type == AnimatorControllerParameterType.Float) { float newFloatValue = reader.ReadFloat(); if (animatorEnabled) { animator.SetFloat(par.nameHash, newFloatValue); } } else if (par.type == AnimatorControllerParameterType.Bool) { bool newBoolValue = reader.ReadBool(); if (animatorEnabled) { animator.SetBool(par.nameHash, newBoolValue); } } } }