public static byte[] Pack <T>(T message) { using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { Pack(message, writer); byte[] data = writer.ToArray(); return(data); } }
void CheckSendRate() { float now = Time.time; if (SendMessagesAllowed && syncInterval >= 0 && now > nextSendTime) { nextSendTime = now + syncInterval; using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { if (WriteParameters(writer)) { SendAnimationParametersMessage(writer.ToArray()); } } } }
void UpdateClient() { // send to server if we have local authority (and aren't the server) // -> only if connectionToServer has been initialized yet too // check only each 'syncInterval' if (!IsServer && IsClientWithAuthority && Time.time - lastClientSendTime >= syncInterval) { if (HasEitherMovedRotatedScaled()) { // serialize // local position/rotation for VR support using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { SerializeIntoWriter(writer, TargetComponent.localPosition, TargetComponent.localRotation, TargetComponent.localScale); // send to server CmdClientToServerSync(writer.ToArray()); } } lastClientSendTime = Time.time; } // apply interpolation on client for all players // unless this client has authority over the object. could be // himself or another object that he was assigned authority over if (!IsClientWithAuthority && goal != null) { // teleport or interpolate if (NeedsTeleport()) { // local position/rotation for VR support ApplyPositionRotationScale(goal.LocalPosition, goal.LocalRotation, goal.LocalScale); // reset data points so we don't keep interpolating start = null; goal = null; } else { // local position/rotation for VR support ApplyPositionRotationScale(InterpolatePosition(start, goal, TargetComponent.localPosition), InterpolateRotation(start, goal, TargetComponent.localRotation), InterpolateScale(start, goal, TargetComponent.localScale)); } } }
void FixedUpdate() { if (!SendMessagesAllowed) { return; } if (!Animator.enabled) { return; } CheckSendRate(); for (int i = 0; i < Animator.layerCount; i++) { if (!CheckAnimStateChanged(out int stateHash, out float normalizedTime, i)) { continue; } using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { WriteParameters(writer); SendAnimationMessage(stateHash, normalizedTime, i, layerWeight[i], writer.ToArray()); } } }