void Start() { instance = this; Application.runInBackground = true; ICommunicator communicator = null; //初始化通信 //if (!PhotonNetwork.connected || !PhotonNetwork.inRoom) { // Debug.LogWarning("You are not connected to Photon. TrueSync will start in offline mode."); //} else { // communicator = new PhotonTrueSyncCommunicator(PhotonNetwork.networkingPeer); //} TrueSyncConfig activeConfig = ActiveConfig; //创建lockstep lockstep = AbstractLockstep.NewInstance( lockedTimeStep.AsFloat(), communicator, PhysicsManager.instance, activeConfig.syncWindow, activeConfig.panicWindow, activeConfig.rollbackWindow, OnGameStarted, OnGamePaused, OnGameUnPaused, OnGameEnded, OnPlayerDisconnection, OnStepUpdate, ProvideInputData ); //========================================================================== mFrameData = new FrameData(); mLockStep = gameObject.AddComponent <LockStep>(); gameObject.AddComponent <GameProcessManager_Dota>(); gameObject.AddComponent <MyTimerDriver>(); PB_MatchTeamFight_FMS2GS2C mMatchTeamFight = (PB_MatchTeamFight_FMS2GS2C)NetData.Instance.Query(MsgID.S2CMatch, (uint)MatchMsgID.Fms2Gs2CMatchFight); FRS2C_Host = mMatchTeamFight.Frs2Chost; FRS2C_Port = mMatchTeamFight.Frs2Cport; guanqia = mMatchTeamFight.Guanqia; teamid = mMatchTeamFight.Teamid; fightroomid = mMatchTeamFight.Fightroomid; randomseed = mMatchTeamFight.Seed; fps = mMatchTeamFight.Fps; foreach (PB_FightPlayerInfo mFightPlayerInfo in mMatchTeamFight.Playersdata) { GameObject actorobj; Actor actor; if (mFightPlayerInfo.ChooseHero == 1) { actorobj = _AssetManager.GetGameObject("prefab/hero/yase/yase_prefab"); actor = actorobj.GetComponent <PlayerActor_yase>(); } else { actorobj = _AssetManager.GetGameObject("prefab/hero/houyi/houyi_prefab"); actor = actorobj.GetComponent <PlayerActor_houyi>(); } //actor.ownerIndex =(int) mFightPlayerInfo.Playeridx; if (mFightPlayerInfo.Pid == NetData.Instance.PlayerID) { actor.IsETCControl = true; playeridx = mFightPlayerInfo.Playeridx; hellokey = mFightPlayerInfo.Hellokey; //actor.localOwner = new TSPlayerInfo((byte)mFightPlayerInfo.Pid, mFightPlayerInfo.Name); } else { actor.IsETCControl = false; //actor.owner = new TSPlayerInfo((byte)mFightPlayerInfo.Pid, mFightPlayerInfo.Name); } if (mActorParent == null) { mActorParent = GameObject.Find("ActorParent").transform; } actor.transform.parent = mActorParent; //actor.Position = new CustomVector3(0, 0, 0); actor.Speed = (FP)0.1f; actor.mActorAttr.HpMax = (FP)100; actor.mActorAttr.Hp = (FP)50; actor.mActorAttr.Name = mFightPlayerInfo.Name; actor.RotateTSTransform.LookAt(TSVector.left); actor.AllTSTransform.LookAt(TSVector.left); actor.Angle = new TSVector(); actor.OwnerID = mFightPlayerInfo.Playeridx; if (actor.OwnerID % 2 == 0) //临时的阵营分配规则 { actor.OwnerCamp = GameCamp.BLUE; } else { actor.OwnerCamp = GameCamp.RED; } AddPlayerActor(actor.OwnerID, actor); } OnBattleStart(); //========================================================================== //检测是否是录像模式, 如果是就加载录像 //if (ReplayRecord.replayMode == ReplayMode.LOAD_REPLAY) { // ReplayPicker.replayToLoad.Load(); // ReplayRecord replayRecord = ReplayRecord.replayToLoad; // if (replayRecord == null) { // Debug.LogError("Replay Record can't be loaded"); // gameObject.SetActive(false); // return; // } else { // lockstep.ReplayRecord = replayRecord; // } //} //如果配置了显示TrueSyncStats,那就初始化 if (activeConfig.showStats) { this.gameObject.AddComponent <TrueSyncStats>().Lockstep = lockstep; } //创建协程调度 scheduler = new CoroutineScheduler(lockstep); //非录像模式下 初始化帧的玩家列表 if (ReplayRecord.replayMode != ReplayMode.LOAD_REPLAY) { lockstep.AddPlayer(0, "Local_Player", true); //if (communicator == null) { // lockstep.AddPlayer(0, "Local_Player", true); //} else { // List<PhotonPlayer> players = new List<PhotonPlayer>(PhotonNetwork.playerList); // players.Sort(UnityUtils.playerComparer); // for (int index = 0, length = players.Count; index < length; index++) { // PhotonPlayer p = players[index]; // lockstep.AddPlayer((byte) p.ID, p.NickName, p.IsLocal); // } //} } //初始化场景中现有的帧同步行为 TrueSyncBehaviour[] behavioursArray = FindObjectsOfType <TrueSyncBehaviour>(); for (int index = 0, length = behavioursArray.Length; index < length; index++) { generalBehaviours.Add(NewManagedBehavior(behavioursArray[index])); } //实例化玩家预设playerPrefabs和同步其行为的拥有者 initBehaviors(); //初始化行为拥有者,并分配给对于玩家。没有继承TrueSyncBehaviour的就继续放到普通行为列表 initGeneralBehaviors(generalBehaviours, false); //添加物理对象移除监听 PhysicsManager.instance.OnRemoveBody(OnRemovedRigidBody); //设置启动状态 startState = StartState.BEHAVIOR_INITIALIZED; }
public void OnS2CMatch(NetPack pack) { Debug.LogFormat("匹配系统MatchMsgID,CMD={0}, ", pack.CMD); //MatchManager mMatchManager = GameObject.Find("MatchView").GetComponent<MatchManager>(); MatchManager mMatchManager = FindObjectOfType <MatchManager>(); switch ((MatchMsgID)pack.CMD) { case MatchMsgID.Fms2Gs2CMatchAdd: PB_MatchTeamAdd_FMS2GS2C mMatchTeamAdd = PB_MatchTeamAdd_FMS2GS2C.Parser.ParseFrom(pack.BodyBuffer.Bytes); if (mMatchTeamAdd.Ret) { NetData.Instance.Set(MsgID.S2CMatch, (uint)MatchMsgID.Fms2Gs2CMatchAdd, mMatchTeamAdd); } mMatchManager.ShowMatching(mMatchTeamAdd.Ret); Debug.LogFormat("OnS2CMatch,请求加入匹配队列结果:mMatchTeamAdd={0}", mMatchTeamAdd.ToString()); break; case MatchMsgID.Fms2Gs2CMatchDel: PB_MatchTeamDel_FMS2GS2C mMatchTeamDel = PB_MatchTeamDel_FMS2GS2C.Parser.ParseFrom(pack.BodyBuffer.Bytes); Debug.LogFormat("OnS2CMatch,请求取消匹配队列结果:mMatchTeamDel={0}", mMatchTeamDel.ToString()); if (mMatchTeamDel.Ret) { mMatchManager.ShowMatching(false); } break; case MatchMsgID.Fms2Gs2CMatchStart: PB_MatchTeamReady_FMS2GS2C mMatchTeamReady = PB_MatchTeamReady_FMS2GS2C.Parser.ParseFrom(pack.BodyBuffer.Bytes); mMatchManager.ShowMatched(true, mMatchTeamReady.Lasttime); foreach (PB_MatchTeamMemberInfo OnePlayersinfo in mMatchTeamReady.Playersinfo) { if (OnePlayersinfo.Pid != NetData.Instance.PlayerID) { continue; } if (OnePlayersinfo.Ready) { mMatchManager.SureFightBtn.interactable = false; mMatchManager.sSureFightBtnText.text = "已准备"; } } Debug.LogFormat("OnS2CMatch,推送匹配成功,及相关信息(多次推送当作刷新信息):mMatchTeamReady={0}", mMatchTeamReady.ToString()); break; case MatchMsgID.Fms2Gs2CMatchFail: PB_MatchTeamFail_FMS2GS2C mMatchTeamFail = PB_MatchTeamFail_FMS2GS2C.Parser.ParseFrom(pack.BodyBuffer.Bytes); Debug.LogFormat("OnS2CMatch,推送战斗准备失败(重新进入匹配队列):mMatchTeamFail={0}", mMatchTeamFail.ToString()); if (mMatchTeamFail.Notmatchpidlist.Contains(NetData.Instance.PlayerID)) { mMatchManager.ShowMatched(false, 0); mMatchManager.ShowMatching(false); } else { mMatchManager.ShowMatched(false, 0); mMatchManager.ShowMatching(true); } break; case MatchMsgID.Fms2Gs2CMatchFight: PB_MatchTeamFight_FMS2GS2C mMatchTeamFight = PB_MatchTeamFight_FMS2GS2C.Parser.ParseFrom(pack.BodyBuffer.Bytes); Debug.LogFormat("OnS2CMatch,推送战斗准备成功,开始战斗,及相关信息:mMatchTeamFight={0}", mMatchTeamFight.ToString()); NetData.Instance.Set(MsgID.S2CMatch, (uint)MatchMsgID.Fms2Gs2CMatchFight, mMatchTeamFight); LoadingManager.LoadSceneAsync(SceneConfig.Fight); break; } }