void FixedUpdate() { if (!sendMessagesAllowed) { return; } CheckSendRate(); for (int i = 0; i < animator.layerCount; i++) { int stateHash; float normalizedTime; if (!CheckAnimStateChanged(out stateHash, out normalizedTime, i)) { continue; } using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { WriteParameters(writer); SendAnimationMessage(stateHash, normalizedTime, i, writer.ToArray()); } } }
public static byte[] Pack <T>(T message) where T : IMessageBase { using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { Pack(message, writer); byte[] data = writer.ToArray(); return(data); } }
void CheckSendRate() { if (SendMessagesAllowed && syncInterval > 0 && sendTimer < Time.time) { sendTimer = Time.time + syncInterval; using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { if (WriteParameters(writer)) { SendAnimationParametersMessage(writer.ToArray()); } } } }
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.transform.localPosition, TargetComponent.transform.localRotation, TargetComponent.transform.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.transform.localPosition), InterpolateRotation(start, goal, TargetComponent.transform.localRotation), InterpolateScale(start, goal, TargetComponent.transform.localScale)); } } }
public static byte[] PackMessage(int msgType, MessageBase msg) { using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { try { // write message type writer.WriteInt16((short)msgType); // serialize message into writer msg.Serialize(writer); // return byte[] return(writer.ToArray()); } finally { } } }
void FixedUpdate() { if (!SendMessagesAllowed) { return; } CheckSendRate(); if (m_MotionStateUpdate) { //Update the motionHash using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { WriteParameters(writer); SendMotionMessage(m_Motion.currentState.serializationKey, writer.ToArray()); } } }
void Update() { // if server then always sync to others. if (isServer) { // just use OnSerialize via SetDirtyBit only sync when position // changed. set dirty bits 0 or 1 SetDirtyBit(HasEitherMovedRotatedScaled() ? 1UL : 0UL); } // no 'else if' since host mode would be both if (isClient) { // send to server if we have local authority (and aren't the server) // -> only if connectionToServer has been initialized yet too if (!isServer && IsClientWithAuthority) { // check only each 'syncInterval' if (Time.time - lastClientSendTime >= syncInterval) { if (HasEitherMovedRotatedScaled()) { // serialize // local position/rotation for VR support using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { if (useGlobalPosition) { SerializeIntoWriter(writer, targetComponent.transform.position, targetComponent.transform.rotation, targetComponent.transform.localScale); } else { SerializeIntoWriter(writer, targetComponent.transform.localPosition, targetComponent.transform.localRotation, targetComponent.transform.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) { // received one yet? (initialized?) if (goal != null) { // teleport or interpolate if (NeedsTeleport()) { // local position/rotation for VR support ApplyPositionRotationScale(goal.thePosition, goal.theRotation, goal.theScale); // reset data points so we don't keep interpolating start = null; goal = null; } else { // local position/rotation for VR support if (useGlobalPosition) { ApplyPositionRotationScale(InterpolatePosition(start, goal, targetComponent.transform.position), InterpolateRotation(start, goal, targetComponent.transform.rotation), InterpolateScale(start, goal, targetComponent.transform.localScale)); } else { ApplyPositionRotationScale(InterpolatePosition(start, goal, targetComponent.transform.localPosition), InterpolateRotation(start, goal, targetComponent.transform.localRotation), InterpolateScale(start, goal, targetComponent.transform.localScale)); } } } } } }