/// 追击目标 public static void SeekTarget(this SeekComponent self) { ///如果卡住在地图到达不了目标点 此计时40秒后 重置巡逻目标点 if (self.delTime == 0) { //如果追到目标后,离目标距离小于2米,不追击 if (self.targetDistance < 4f) { return; } // 每间隔 resTime(100) MS 发送一次目标点坐标 消息 self.SendSeePosition(); self.seeTimer = TimeHelper.ClientNow(); } ///精确到毫秒 self.delTime = TimeHelper.ClientNow() - self.seeTimer + 1; if (self.delTime > self.resTime) { self.delTime = 0; } }
public override int Check(AIComponent aiComponent, AIConfig aiConfig) { long sec = TimeHelper.ClientNow() / 1000 % 15; if (sec >= 10) { return(0); } return(1); }
// Start is called before the first frame update void Start() { TipsRandom.AddRange(StaticData.configExcel.GetVertical().ManorRoleBubbleRandom); maxRandom = TipsRandom.Count; seedRandomTips = (int)TimeHelper.ClientNow(); randomTips = new System.Random(seedRandomTips); currAnimTimeBegin = 0f; currBubbleShowTime = 0f; isBubbleShow = false; isBeginAnimByTime = true; }
public static void OnRead(this NetInnerComponent self, long channelId, MemoryStream memoryStream) { Session session = self.GetChild <Session>(channelId); if (session == null) { return; } session.LastRecvTime = TimeHelper.ClientNow(); Game.EventSystem.Callback(self.SessionStreamDispatcherType, session, memoryStream); }
protected override void Update(RouterComponent self) { long timeNow = TimeHelper.ClientNow(); self.RecvOuter(timeNow); self.RecvInner(timeNow); // 每秒钟检查一次 if (timeNow - self.LastCheckTime > 1000) { self.CheckConnectTimeout(timeNow); } }
/* * public List<MatchingItem> Get_SameGameType(int gt) * { * List<MatchingItem> tmp_ls = new List<MatchingItem>(); * m_Ls_MatchingItems.ForEach ((MatchingItem mib) => * { * }); * return tmp_ls; * }*/ public override void Update() { m_Ls_NeedDel.Clear(); for (var i = 0; i < m_Ls_MatchingItems.Count;) { var mi = m_Ls_MatchingItems[i]; var ms = m_Ls_MatchStrategy[(int)mi.MatchStrategyType]; if (i + ms.MaxPlayer > m_Ls_MatchingItems.Count) { break; } var tmp_ls = m_Ls_MatchingItems.GetRange(i, ms.MaxPlayer - 1); if (CanMath(tmp_ls)) { i += tmp_ls.Count; Match(tmp_ls); } else { i++; } } for (var i = 0; i < m_Ls_MatchingItems.Count;) { var mi = m_Ls_MatchingItems[i]; var ms = m_Ls_MatchStrategy[(int)mi.MatchStrategyType]; var ts = TimeHelper.ClientNow() - mi.St_Time;//TimeHelper.DateTimeToUnixTimestamp_Now()-mi.St_Time; if (ts >= TMatching_AI_Time) { if (mi.MatchStrategyType == EMatchStrategyType.MatchStrategy_1V1) { MatchAI(m_Ls_MatchingItems.GetRange(i, 1)); } else if (mi.MatchStrategyType == EMatchStrategyType.MatchStrategy_2V2) { var tmp_ls = m_Ls_MatchingItems.GetRange(i, m_Ls_MatchingItems.Count - 1); MatchAI(tmp_ls); } } } foreach (var itemdel in m_Ls_NeedDel) { this.m_Ls_MatchingItems.Remove(itemdel); } }
protected override async ETTask Run(Player entity, Actor_PlayerNetSyncToCline message) { G2C_OtherPlayerPosition packge = new G2C_OtherPlayerPosition(); packge.DirAccount.Add(message.DirAccount); packge.PositionX.Add(message.PositionX); packge.PositionY.Add(message.PositionY); packge.PositionZ.Add(message.PositionZ); packge.RotationX.Add(message.RotationX); packge.RotationY.Add(message.RotationY); packge.RotationZ.Add(message.RotationZ); packge.RotationW.Add(message.RotationW); packge.VelocityX.Add(message.VelocityX); packge.VelocityY.Add(message.VelocityY); packge.VelocityZ.Add(message.VelocityZ); //Log.Info("时间: " + TimeHelper.ClientNow()); packge.ServerTime = TimeHelper.ClientNow(); packge.Fire.Add(message.Fire); packge.Bullets.Add(message.Bullets); //Log.Error("场景子弹数量: " + message.Bullets.Count); try { entity.session.Send(packge); } catch (Exception e) { //说明有人掉线了 if (playerComponent == null) { playerComponent = Game.Scene.GetComponent <PlayerComponent>(); } //给其它玩家广播这个玩家掉线的信息 playerComponent.removeOnePlayerLink(entity.Account).Coroutine(); Log.Error("一名玩家离线了: " + entity.Account); } await ETTask.CompletedTask; }
public static void Check(this SessionIdleCheckerComponent self) { Session session = self.GetParent <Session>(); long timeNow = TimeHelper.ClientNow(); if (timeNow - session.LastRecvTime < 30 * 1000 && timeNow - session.LastSendTime < 30 * 1000) { return; } Log.Info($"session timeout: {session.Id} {timeNow} {session.LastRecvTime} {session.LastSendTime} {timeNow - session.LastRecvTime} {timeNow - session.LastSendTime}"); session.Error = ErrorCode.ERR_SessionSendOrRecvTimeout; session.Dispose(); }
public static void Update(this MobaControllerComponent self) { if (self.isGameStarted) { return; } long timeNow = TimeHelper.ClientNow(); self.lastFrameCostTime = timeNow - self.lastFrameStartTime; //复活野怪 //复活英雄 // }
public static void GetUserInfo(CSEmptyAccountInfo csEmptyAccountInfo, Action <SCUserInfo> ResponseSCUserInfoCallBack) { if (StaticData.IsUsedLocalDataNotServer) { SCUserInfo scUserInfo = new SCUserInfo() { Image = 11111, Name = "TestName", Experience = 1000, PresentTime = TimeHelper.ClientNow() }; ResponseSCUserInfoCallBack(scUserInfo); } else { ProtocalManager.Instance().SendCSEmptyAccountInfo(csEmptyAccountInfo, ResponseSCUserInfoCallBack, (errorInfo) => { }); } }
private static async ETTask PingAsync(PingComponent self) { Session session = self.GetParent <Session>(); long instanceId = self.InstanceId; while (true) { if (self.InstanceId != instanceId) { return; } long time1 = TimeHelper.ClientNow(); try { G2C_Ping response = await session.Call(self.C2G_Ping) as G2C_Ping; if (self.InstanceId != instanceId) { return; } long time2 = TimeHelper.ClientNow(); self.Ping = time2 - time1; Game.TimeInfo.ServerMinusClientTime = response.Time + (time2 - time1) / 2 - time2; await TimerComponent.Instance.WaitAsync(2000); } catch (RpcException e) { // session断开导致ping rpc报错,记录一下即可,不需要打成error Log.Info($"ping error: {self.Id} {e.Error}"); return; } catch (Exception e) { Log.Error($"ping error: \n{e}"); } } }
private static RouterNode New(this RouterComponent self, string innerAddress, uint connectId, uint outerConn, uint innerConn, IPEndPoint syncEndPoint) { RouterNode routerNode = self.AddChild <RouterNode>(); routerNode.ConnectId = connectId; routerNode.OuterConn = outerConn; routerNode.InnerConn = innerConn; routerNode.InnerIpEndPoint = NetworkHelper.ToIPEndPoint(innerAddress); routerNode.SyncIpEndPoint = syncEndPoint; routerNode.InnerAddress = innerAddress; routerNode.LastRecvInnerTime = TimeHelper.ClientNow(); self.ConnectIdNodes.Add(connectId, routerNode); routerNode.Status = RouterStatus.Sync; Log.Info($"router new: outerConn: {outerConn} innerConn: {innerConn} {syncEndPoint}"); return(routerNode); }
/// <summary> /// 所有玩家已就绪游戏开始 /// </summary> /// <param name="self"></param> public static void GameStart(this MobaControllerComponent self) { //正式开始游戏前的准备 Moba5V5Room room = self.GetParent <Moba5V5Room>(); Moba5V5Component moba = Game.Scene.GetComponent <Moba5V5Component>(); //更改房间状态为游戏中 moba.FreeRooms.Remove(room.Id); moba.GamingRooms.Add(room.Id, room); //更改玩家状态为游戏中 for (int i = 0; i < room.gamers.Length; i++) { if (room.gamers[i].UserID != 0) { Gamer gamer = room.gamers[i]; moba.Waiting.Remove(gamer.UserID); moba.Playing.Add(gamer.UserID, room); } } //服务端加载游戏逻辑 for (int i = 0; i < room.gamers.Length; i++) { room.gamers[i].AddComponent <GamerMoveComponent>(); room.gamers[i].AddComponent <GamerPathComponent>(); room.gamers[i].Position = new Vector3(-10, 0, -10); } //开始服务端游戏计时 self.isGameStarted = true; self.gameStartTime = TimeHelper.ClientNow(); self.lastFrameCostTime = self.gameStartTime; self.SpawnArmy().NoAwait(); //周期刷新士兵 self.SpawnWild().NoAwait(); //刷新野怪 room.Broadcast(new A1008_GameStart_M2C()); }
public static async ETTask Send(this BenchmarkComponent self, Session session, int j) { try { await session.Call(new C2R_Ping()); ++self.k; if (self.k % 100000 != 0) { return; } long time2 = TimeHelper.ClientNow(); long time = time2 - self.time1; self.time1 = time2; Log.Info($"Benchmark k: {self.k} 每10W次耗时: {time} ms {session.Network.Count}"); } catch (Exception e) { Log.Error(e); } }
public void OnGUI() { GUILayout.BeginVertical(); if (GUILayout.Button("Connect", GUILayout.Width(200))) { m_Session = ClientNetWork.Create("127.0.0.1:2000"); } if (GUILayout.Button("Send", GUILayout.Width(200))) { for (int i = 0; i < 100; ++i) { Ping_Msg ping_Msg = new Ping_Msg(); ping_Msg.Time = TimeHelper.ClientNow(); m_Session.Send(ping_Msg); } } if (GUILayout.Button("DisConnect", GUILayout.Width(200))) { m_Session.ShutDown(); } GUILayout.EndVertical(); }
public void Update() { //TODO 先硬编码一波,这一块要放到行为树去处理的 fui5V5Map = Game.Scene.GetComponent <FUIComponent>().Get(FUI5V5Map.UIPackageName) as FUI5V5Map; if (fui5V5Map == null) { return; } if (this.userInputComponent.QDown) { SessionComponent.Instance.Session.Send(new UserInput_SkillCmd() { Message = "Q" }); if (fui5V5Map.SkillQ_CDInfo.visible) { return; } fui5V5Map.SkillQ_CDInfo.text = "5"; fui5V5Map.SkillQ_CDInfo.visible = true; fui5V5Map.SkillQ_Bar.self.value = 100; fui5V5Map.SkillQ_Bar.Visible = true; fui5V5Map.SkillQ_Bar.self.TweenValue(0, 5).OnComplete(() => { fui5V5Map.SkillQ_CDInfo.visible = false; fui5V5Map.SkillQ_Bar.Visible = false; }); m_CDComponent.TriggerCD(this.Entity.Id, "QCD"); } if (this.userInputComponent.WDown) { SessionComponent.Instance.Session.Send(new UserInput_SkillCmd() { Message = "W" }); if (fui5V5Map.SkillW_CDInfo.visible) { return; } fui5V5Map.SkillW_CDInfo.text = "7"; fui5V5Map.SkillW_CDInfo.visible = true; fui5V5Map.SkillW_Bar.self.value = 100; fui5V5Map.SkillW_Bar.self.visible = true; fui5V5Map.SkillW_Bar.self.TweenValue(0, 7).OnComplete(() => { fui5V5Map.SkillW_CDInfo.visible = false; fui5V5Map.SkillW_Bar.self.visible = false; }); m_CDComponent.TriggerCD(this.Entity.Id, "WCD"); } if (this.userInputComponent.EDown) { SessionComponent.Instance.Session.Send(new UserInput_SkillCmd() { Message = "E" }); if (fui5V5Map.SkillE_CDInfo.visible) { return; } fui5V5Map.SkillE_CDInfo.text = "10"; fui5V5Map.SkillE_CDInfo.visible = true; fui5V5Map.SkillE_Bar.self.value = 100; fui5V5Map.SkillE_Bar.self.visible = true; fui5V5Map.SkillE_Bar.self.TweenValue(0, 10).OnComplete(() => { fui5V5Map.SkillE_CDInfo.visible = false; fui5V5Map.SkillE_Bar.self.visible = false; }); m_CDComponent.TriggerCD(this.Entity.Id, "ECD"); } if (this.userInputComponent.RDown) { SessionComponent.Instance.Session.Send(new UserInput_SkillCmd() { Message = "R" }); } long currentTime = TimeHelper.ClientNow(); if (fui5V5Map.SkillQ_CDInfo.visible) { fui5V5Map.SkillQ_CDInfo.text = ((int)Math.Ceiling((double)(this.m_QCDInfo.LastTriggerTimer + this.m_QCDInfo.Interval - currentTime) / 1000)) .ToString(); } if (fui5V5Map.SkillW_CDInfo.visible) { fui5V5Map.SkillW_CDInfo.text = ((int)Math.Ceiling((double)(this.m_WCDInfo.LastTriggerTimer + this.m_WCDInfo.Interval - currentTime) / 1000)) .ToString(); } if (fui5V5Map.SkillE_CDInfo.visible) { fui5V5Map.SkillE_CDInfo.text = ((int)Math.Ceiling((double)(this.m_ECDInfo.LastTriggerTimer + this.m_ECDInfo.Interval - currentTime) / 1000)) .ToString(); } }
private static void Main(string[] args) { // 异步方法全部会回掉到主线程 SynchronizationContext.SetSynchronizationContext(OneThreadSynchronizationContext.Instance); try { Game.EventSystem.Add(DLLType.Core, typeof(Game).Assembly); Game.EventSystem.Add(DLLType.Hotfix, DllHelper.GetHotfixAssembly()); Options options = Game.Scene.AddComponent <OptionComponent, string[]>(args).Options; StartConfig startConfig = Game.Scene.AddComponent <StartConfigComponent, string, int>(options.Config, options.AppId).StartConfig; if (!options.AppType.Is(startConfig.AppType)) { Log.Error("命令行参数apptype与配置不一致"); return; } IdGenerater.AppId = options.AppId; LogManager.Configuration.Variables["appType"] = $"{startConfig.AppType}"; LogManager.Configuration.Variables["appId"] = $"{startConfig.AppId}"; LogManager.Configuration.Variables["appTypeFormat"] = $"{startConfig.AppType, -8}"; LogManager.Configuration.Variables["appIdFormat"] = $"{startConfig.AppId:0000}"; Log.Info($"server start........................ {startConfig.AppId} {startConfig.AppType}"); Game.Scene.AddComponent <TimerComponent>(); Game.Scene.AddComponent <OpcodeTypeComponent>(); Game.Scene.AddComponent <MessageDispatcherComponent>(); // 根据不同的AppType添加不同的组件 OuterConfig outerConfig = startConfig.GetComponent <OuterConfig>(); InnerConfig innerConfig = startConfig.GetComponent <InnerConfig>(); ClientConfig clientConfig = startConfig.GetComponent <ClientConfig>(); // 发送普通actor消息 Game.Scene.AddComponent <ActorMessageSenderComponent>(); // 发送location actor消息 Game.Scene.AddComponent <ActorLocationSenderComponent>(); // db组件 Game.Scene.AddComponent <DBComponent>(); Game.Scene.AddComponent <DBCacheComponent>(); Game.Scene.AddComponent <DBProxyComponent>(); // location server需要的组件 Game.Scene.AddComponent <LocationComponent>(); // 访问location server的组件 Game.Scene.AddComponent <LocationProxyComponent>(); // 这两个组件是处理actor消息使用的 Game.Scene.AddComponent <MailboxDispatcherComponent>(); Game.Scene.AddComponent <ActorMessageDispatcherComponent>(); // 内网消息组件 Game.Scene.AddComponent <NetInnerComponent, string>(innerConfig.Address); // 外网消息组件 Game.Scene.AddComponent <NetOuterComponent, string>(outerConfig.Address); // manager server组件,用来管理其它进程使用 Game.Scene.AddComponent <AppManagerComponent>(); Game.Scene.AddComponent <RealmGateAddressComponent>(); Game.Scene.AddComponent <UserComponent>(); Game.Scene.AddComponent <UnitComponent>(); Game.Scene.AddComponent <RoomComponent>(); Game.Scene.AddComponent <UnitStateMgrComponent>(); // 配置管理 Game.Scene.AddComponent <ConfigComponent>(); Game.Scene.AddComponent <ConsoleComponent>(); Game.Scene.AddComponent <SessionKeyComponent>(); Game.Scene.AddComponent <OnlineComponent>(); long fixedUpdateInterval = (long)(EventSystem.FixedUpdateTime * 1000); long timing = TimeHelper.ClientNow(); while (true) { try { Thread.Sleep(1); OneThreadSynchronizationContext.Instance.Update(); Game.EventSystem.Update(); if (TimeHelper.ClientNow() - timing >= fixedUpdateInterval) { timing += fixedUpdateInterval; Game.EventSystem.FixedUpdate(); } } catch (Exception e) { Log.Error(e); } } } catch (Exception e) { Log.Error(e); } }
private static async ETTask CheckAsync(RouterCheckComponent self) { Session session = self.GetParent <Session>(); long instanceId = self.InstanceId; while (true) { if (self.InstanceId != instanceId) { return; } await TimerComponent.Instance.WaitAsync(1000); if (self.InstanceId != instanceId) { return; } long time = TimeHelper.ClientFrameTime(); if (time - session.LastRecvTime < 7 * 1000) { continue; } try { long sessionId = session.Id; uint localConn = 0; uint remoteConn = 0; KService service = session.AService as KService; KChannel kChannel = service.Get(sessionId); if (kChannel == null) { Log.Warning($"not found remoteConn: {sessionId}"); continue; } localConn = kChannel.LocalConn; remoteConn = kChannel.RemoteConn; IPEndPoint realAddress = self.GetParent <Session>().RemoteAddress; Log.Info($"get recvLocalConn start: {self.ClientScene().Id} {realAddress} {localConn} {remoteConn}"); (uint recvLocalConn, IPEndPoint routerAddress) = await RouterHelper.GetRouterAddress(self.ClientScene(), realAddress, localConn, remoteConn); if (recvLocalConn == 0) { Log.Error($"get recvLocalConn fail: {self.ClientScene().Id} {routerAddress} {realAddress} {localConn} {remoteConn}"); continue; } Log.Info($"get recvLocalConn ok: {self.ClientScene().Id} {routerAddress} {realAddress} {recvLocalConn} {localConn} {remoteConn}"); session.LastRecvTime = TimeHelper.ClientNow(); ((KService)session.AService).ChangeAddress(sessionId, routerAddress); } catch (Exception e) { Log.Error(e); } } }
public long Now() { return(TimeHelper.ClientNow() - this.syncClientTime + syncTime); }
//--appId=1 --appType=AllServer --config=../Config/StartConfig/LocalAllServer.txt /*{ "_t" : "StartConfig", "_id" : NumberLong("98547768819754"), * "C" : [{ "_t" : "OuterConfig", "Address" : "127.0.0.1:10002", "Address2" : "127.0.0.1:10002" }, * { "_t" : "InnerConfig", "Address" : "127.0.0.1:20000" }, * { "_t" : "HttpConfig", "Url" : "http://*:8080/", "AppId" : 0, "AppKey" : "", "ManagerSystemUrl" : "" }, * { "_t" : "DBConfig", "ConnectionString" : "mongodb://localhost:27017", "DBName" : "ET" }], * "AppId" : 1, "AppType" : "AllServer", "ServerIP" : "*" } */ private static void Main(string[] args) { // 异步方法全部会回掉到主线程 SynchronizationContext.SetSynchronizationContext(OneThreadSynchronizationContext.Instance); try { Game.EventSystem.Add(DLLType.Model, typeof(Game).Assembly); Game.EventSystem.Add(DLLType.Hotfix, DllHelper.GetHotfixAssembly()); Options options = Game.Scene.AddComponent <OptionComponent, string[]>(args).Options; StartConfig startConfig = Game.Scene.AddComponent <StartConfigComponent, string, int>(options.Config, options.AppId).StartConfig; if (!options.AppType.Is(startConfig.AppType)) { Log.Error("命令行参数apptype与配置不一致"); return; } IdGenerater.AppId = options.AppId; LogManager.Configuration.Variables["appType"] = startConfig.AppType.ToString(); LogManager.Configuration.Variables["appId"] = startConfig.AppId.ToString(); LogManager.Configuration.Variables["appTypeFormat"] = $"{startConfig.AppType,-8}"; LogManager.Configuration.Variables["appIdFormat"] = $"{startConfig.AppId:D3}"; Log.Info($"server start........................ {startConfig.AppId} {startConfig.AppType}"); Game.Scene.AddComponent <OpcodeTypeComponent>(); Game.Scene.AddComponent <MessageDispatcherComponent>(); // 根据不同的AppType添加不同的组件 OuterConfig outerConfig = startConfig.GetComponent <OuterConfig>(); InnerConfig innerConfig = startConfig.GetComponent <InnerConfig>(); ClientConfig clientConfig = startConfig.GetComponent <ClientConfig>(); switch (startConfig.AppType) { case AppType.Manager: Game.Scene.AddComponent <AppManagerComponent>(); Game.Scene.AddComponent <NetInnerComponent, string>(innerConfig.Address); Game.Scene.AddComponent <NetOuterComponent, string>(outerConfig.Address); break; case AppType.Realm: Game.Scene.AddComponent <MailboxDispatcherComponent>(); Game.Scene.AddComponent <ActorMessageDispatcherComponent>(); Game.Scene.AddComponent <NetInnerComponent, string>(innerConfig.Address); Game.Scene.AddComponent <NetOuterComponent, string>(outerConfig.Address); Game.Scene.AddComponent <LocationProxyComponent>(); Game.Scene.AddComponent <RealmGateAddressComponent>(); break; case AppType.Gate: Game.Scene.AddComponent <PlayerComponent>(); Game.Scene.AddComponent <MailboxDispatcherComponent>(); Game.Scene.AddComponent <ActorMessageDispatcherComponent>(); Game.Scene.AddComponent <NetInnerComponent, string>(innerConfig.Address); Game.Scene.AddComponent <NetOuterComponent, string>(outerConfig.Address); Game.Scene.AddComponent <LocationProxyComponent>(); Game.Scene.AddComponent <ActorMessageSenderComponent>(); Game.Scene.AddComponent <ActorLocationSenderComponent>(); Game.Scene.AddComponent <GateSessionKeyComponent>(); break; case AppType.Location: Game.Scene.AddComponent <NetInnerComponent, string>(innerConfig.Address); Game.Scene.AddComponent <LocationComponent>(); break; case AppType.Map: Game.Scene.AddComponent <NetInnerComponent, string>(innerConfig.Address); Game.Scene.AddComponent <UnitComponent>(); Game.Scene.AddComponent <LocationProxyComponent>(); Game.Scene.AddComponent <ActorMessageSenderComponent>(); Game.Scene.AddComponent <ActorLocationSenderComponent>(); Game.Scene.AddComponent <MailboxDispatcherComponent>(); Game.Scene.AddComponent <ActorMessageDispatcherComponent>(); Game.Scene.AddComponent <PathfindingComponent>(); break; case AppType.Battle: Game.Scene.AddComponent <NetInnerComponent, string>(innerConfig.Address); Game.Scene.AddComponent <LocationProxyComponent>(); Game.Scene.AddComponent <ActorMessageSenderComponent>(); Game.Scene.AddComponent <ActorLocationSenderComponent>(); Game.Scene.AddComponent <MailboxDispatcherComponent>(); Game.Scene.AddComponent <ActorMessageDispatcherComponent>(); break; case AppType.AllServer: // 发送普通actor消息 Game.Scene.AddComponent <ActorMessageSenderComponent>(); // 发送location actor消息 Game.Scene.AddComponent <ActorLocationSenderComponent>(); // 数据库管理组件(管理数据库连接地址,数据库名称等) Game.Scene.AddComponent <DBComponent>(); // 数据库调用组件(调用DB数据库的组件 添加、查询、修改、删除等操作) Game.Scene.AddComponent <DBProxyComponent>(); // location server需要的组件 Game.Scene.AddComponent <LocationComponent>(); // 访问location server的组件 Game.Scene.AddComponent <LocationProxyComponent>(); // 这两个组件是处理actor消息使用的 Game.Scene.AddComponent <MailboxDispatcherComponent>(); Game.Scene.AddComponent <ActorMessageDispatcherComponent>(); // 内网消息组件 Game.Scene.AddComponent <NetInnerComponent, string>(innerConfig.Address); // 外网消息组件 Game.Scene.AddComponent <NetOuterComponent, string>(outerConfig.Address); // manager server组件,用来管理其它进程使用 Game.Scene.AddComponent <AppManagerComponent>(); Game.Scene.AddComponent <RealmGateAddressComponent>(); Game.Scene.AddComponent <GateSessionKeyComponent>(); // 配置管理 Game.Scene.AddComponent <ConfigComponent>(); // 数值变化检测组件 Game.Scene.AddComponent <NumericWatcherComponent>(); // recast寻路组件 Game.Scene.AddComponent <PathfindingComponent>(); // 登陆之后保护的玩家 Game.Scene.AddComponent <PlayerComponent>(); Game.Scene.AddComponent <UnitComponent>(); // 进入战场后的战场组件 //Game.Scene.AddComponent<TankComponent>(); Game.Scene.AddComponent <BattleComponent>(); // 房间系统组件 Game.Scene.AddComponent <RoomComponent>(); Game.Scene.AddComponent <ConsoleComponent>(); // Game.Scene.AddComponent<HttpComponent>(); break; case AppType.Benchmark: Game.Scene.AddComponent <NetOuterComponent>(); Game.Scene.AddComponent <BenchmarkComponent, string>(clientConfig.Address); break; case AppType.BenchmarkWebsocketServer: Game.Scene.AddComponent <NetOuterComponent, string>(outerConfig.Address); break; case AppType.BenchmarkWebsocketClient: Game.Scene.AddComponent <NetOuterComponent>(); Game.Scene.AddComponent <WebSocketBenchmarkComponent, string>(clientConfig.Address); break; default: throw new Exception($"命令行参数没有设置正确的AppType: {startConfig.AppType}"); } long fixedUpdateInterval = (long)(EventSystem.FixedUpdateTime * 1000); long timing = TimeHelper.ClientNow(); while (true) { try { Thread.Sleep(1); OneThreadSynchronizationContext.Instance.Update(); Game.EventSystem.Update(); if (TimeHelper.ClientNow() - timing >= fixedUpdateInterval) { timing += fixedUpdateInterval; Game.EventSystem.FixedUpdate(); } } catch (Exception e) { Log.Error(e); } } } catch (Exception e) { Log.Error(e); } }
public void Update() { if (myGamer == null) //需要先绑定本地玩家才能控制角色 { return; } long time = TimeHelper.ClientNow(); lastFrameCostTime = time - lastFrameStartTime; //计算本地一帧的时间 lastFrameStartTime = time; if (isGameStarted && moba5V5UI != null) { gameCostTime += lastFrameCostTime; //计算本地游戏时间 moba5V5UI.gameTime.text = $"{(int)(gameCostTime / 60000)}:{(int)((gameCostTime / 1000) % 60)}"; } CheckTarget(); //检查锁定目标是否超出距离 #region 响应用户操作 //PC上WASD按键移动 手机摇杆移动 #if UNITY_STANDALONE xoff = Input.GetAxis("Horizontal"); //取横轴输入值 按A键时为-1 按D键时为1 zoff = Input.GetAxis("Vertical"); //取纵轴输入值 按S键时为-1 按W键时为1 #elif UNITY_ANDROID xoff = up.upPosition.x; zoff = up.upPosition.y; #elif UNITY_IPHONE xoff = up.upPosition.x; zoff = up.upPosition.y; #endif if (xoff != 0 || zoff != 0) { if (isMoving == false) //开始移动 只执行一次 { touchHandler.Touch(TOUCH_KEY.Run); } if (time - StartRunTime > 200 && isMoving == true) //持续移动 反复执行 { touchHandler.OnKeyChanged(TouchEvent.Press, TOUCH_KEY.Run); } if (canMove) //在可以移动的情况下才执行 { isMoving = true; movement.Set(xoff, 0f, zoff); movement = movement.normalized + myGamer.Position; //计算移动方向 myGamer.GetComponent <GamerTurnComponent>().Turn(movement); myGamer.Position = Vector3.Lerp(myGamer.Position, movement, speed * lastFrameCostTime / 1000); } } else { if (isMoving == true) //停止移动 { isMoving = false; touchHandler.Release(TOUCH_KEY.Run); } } //键盘技能按键消息 不处理也释放键位 if (Input.GetKeyDown(KeyCode.Alpha1)) { touchHandler.Touch(TOUCH_KEY.Skill1); } if (Input.GetKeyUp(KeyCode.Alpha1)) { touchHandler.Release(TOUCH_KEY.Skill1); } if (Input.GetKeyDown(KeyCode.Alpha2)) { touchHandler.Touch(TOUCH_KEY.Skill2); } if (Input.GetKeyUp(KeyCode.Alpha2)) { touchHandler.Release(TOUCH_KEY.Skill2); } if (Input.GetKeyDown(KeyCode.Alpha3)) { touchHandler.Touch(TOUCH_KEY.Skill3); } if (Input.GetKeyUp(KeyCode.Alpha3)) { touchHandler.Release(TOUCH_KEY.Skill3); } if (Input.GetKeyDown(KeyCode.Alpha4)) { touchHandler.Touch(TOUCH_KEY.Skill4); } if (Input.GetKeyUp(KeyCode.Alpha4)) { touchHandler.Release(TOUCH_KEY.Skill4); } if (Input.GetKeyDown(KeyCode.Space)) { touchHandler.Touch(TOUCH_KEY.Attack); //攻击按钮 } if (Input.GetKeyUp(KeyCode.Space)) { touchHandler.Release(TOUCH_KEY.Attack); } if (Input.GetKeyDown(KeyCode.F)) { touchHandler.Touch(TOUCH_KEY.Summon1); //召唤师技能1 } if (Input.GetKeyDown(KeyCode.F)) { touchHandler.Release(TOUCH_KEY.Summon1); } if (Input.GetKeyDown(KeyCode.G)) { touchHandler.Touch(TOUCH_KEY.Summon2); //召唤师技能2 } if (Input.GetKeyDown(KeyCode.G)) { touchHandler.Release(TOUCH_KEY.Summon2); } if (Input.GetKeyDown(KeyCode.B)) { touchHandler.Touch(TOUCH_KEY.Summon3); //回城 } if (Input.GetKeyDown(KeyCode.G)) { touchHandler.Release(TOUCH_KEY.Summon3); } if (canMove && !isMoving) { touchHandler.Touch(TOUCH_KEY.Idle); //休息 } #endregion }