internal void RecieveChangeAuthorInGroup(ushort netId, ushort author) { if (GamePacketManager.IsLeader) { //Hostではauthorの整合性を確認 if (netId < m_identityList.Count) { m_identityList[netId].SetAuthor(author); //Clientに通達する using (var packet = new DataStreamWriter(9, Allocator.Temp)) { packet.Write((byte)BuiltInPacket.Type.ChangeAuthor); packet.Write(m_groupHash); packet.Write(netId); packet.Write(author); GamePacketManager.Brodcast(packet, QosType.Reliable); } } } else { //確認されたauthorの変更を反映 if (netId < m_identityList.Count) { m_identityList[netId].SetAuthor(author); } } }
/// 所有者側は現在のTransform情報を送信する private void SendTransform() { if (forceUpdateTransfromFrag) { forceUpdateTransfromFrag = false; } else { float elapsedTime = (float)(RecordableIdentityManager.progressTimeSinceStartup - prevSendTime) / 1000.0f; if (elapsedTime <= minInterval) { return; } //定期更新. if (elapsedTime <= maxInterval) { //一定以上動いたら更新 float sqrDistance = Vector3.SqrMagnitude(recPosition - CacheTransform.position); float diffAngle = Quaternion.Angle(recRotation, CacheTransform.rotation); if (diffAngle < deltaRotSendThreshold && sqrDistance < deltaPosSendThreshold * deltaPosSendThreshold) { return; } } //Debug.Log ("SendTransform elapsedTime = " + elapsedTime); } //TODO できればScene単位でパケットをまとめて、type(1byte) sceneHash(4byte)の5byteのデータを削減したい using (var packet = new DataStreamWriter(65, Allocator.Temp)) { packet.Write((byte)BuiltInPacket.Type.SyncTransform); packet.Write(CacheRecordableIdentity.sceneHash); packet.Write(CacheRecordableIdentity.netId); packet.Write(RecordableIdentityManager.progressTimeSinceStartup); packet.Write(CacheTransform.position); packet.Write(CacheTransform.rotation); if (CacheRigidbody != null) { packet.Write(CacheRigidbody.velocity); packet.Write(CacheRigidbody.angularVelocity); } else { packet.Write(Vector3.zero); packet.Write(Vector3.zero); } GamePacketManager.Brodcast(packet, qosType); } SetRecTransformValue(); prevSendTime = RecordableIdentityManager.progressTimeSinceStartup; }
internal void BrodcastRpc(byte componentIndex, byte methodId, DataStreamWriter rpcPacket, QosType qosType, bool important) { if (!isSyncComplete) { return; } var writer = new DataStreamWriter(rpcPacket.Length + 9, Allocator.Temp); CreateRpcPacket(ref writer, ref rpcPacket, componentIndex, methodId); GamePacketManager.Brodcast(writer, qosType); //if (important) { // GamePacketManager.Brodcast (writer, qosType); //} else { // GamePacketManager.Brodcast (writer, qosType, gridId); //} writer.Dispose(); }