void FetchSelfTransforms(List <SyncTransforms_TransformMono> transformsList, UDPBox udpBox, IPEndPoint ipEndPoint, bool isFetchAll = false) { UDPBox_GameThreadMediator.Instance?.EnqueueToUpdateQueue(() => { var package = new SyncTransformsPackage(mTemplate.HeadBytes); package.Op = SyncTransformsPackage.EOperate.Push; for (int i = 0, iMax = transformsList.Count; i < iMax; i++) { var transformMono = transformsList[i]; if (!transformMono.isSelfControl && !isFetchAll) { continue; } var transformInfo = new SyncTransformData(); transformInfo.NetworkID = transformMono.networkID; transformInfo.Pos_X = transformMono.transform.position.x; transformInfo.Pos_Y = transformMono.transform.position.y; transformInfo.Pos_Z = transformMono.transform.position.z; transformInfo.Euler_X = transformMono.transform.eulerAngles.x; transformInfo.Euler_Y = transformMono.transform.eulerAngles.y; transformInfo.Euler_Z = transformMono.transform.eulerAngles.z; transformInfo.SCALE_X = transformMono.transform.localScale.x; transformInfo.SCALE_Y = transformMono.transform.localScale.y; transformInfo.SCALE_Z = transformMono.transform.localScale.z; package.TransformList.Add(transformInfo); } var transformPackageBytes = package.Serialize(); udpBox.SendMessage(transformPackageBytes, ipEndPoint); }); }
IEnumerator Start() { if (udpBoxContainer != null) { SetUDPBoxContainer(udpBoxContainer.GetNativeContainer()); } mPackageTemplate = new SyncTransformsPackage(mUdpBoxContainer.PackageHeadBytes); var waitForSecond = new WaitForSeconds(delay); while (true) { if (mUdpBoxContainer.State != UDPBoxContainer.EState.HasClients && mUdpBoxContainer.State != UDPBoxContainer.EState.HasServer) { yield return(null); continue; } if (mUdpBoxContainer.IsMaster) { mPackageTemplate.TransformList.Clear(); for (int i = 0, iMax = mUdpBoxContainer.ClientIPConnectList.Count; i < iMax; i++) { var client = mUdpBoxContainer.ClientIPConnectList[i]; mPackageTemplate.Op = SyncTransformsPackage.EOperate.Fetch; mUdpBoxContainer.SendUDPMessageToRandomPort(mPackageTemplate.Serialize(), client); Debug.Log("Send to client!"); } } else { mPackageTemplate.Op = SyncTransformsPackage.EOperate.FetchAll; mUdpBoxContainer.SendUDPMessageToRandomPort(mPackageTemplate.Serialize(), mUdpBoxContainer.MasterIPConnectInfo); Debug.Log("Send to master!"); } yield return(waitForSecond); } }
public SyncTransformsHandler(byte[] packageHeadBytes) { transformsList = new List <SyncTransforms_TransformMono>(8); mTemplate = new SyncTransformsPackage(packageHeadBytes); }