private void FixedUpdate() { if (!photonView.isMine) { return; } //如果更换场景摄像头被Destroy了则playercamera指向新场景的摄像头 if (!playercamera) { playercamera = FindObjectOfType <Camera>().transform; } if (!Ground) { Ground = GameObject.Find("Ground(Clone)").transform; } cooltime += Time.deltaTime; if (cooltime >= 0.2f) { cooltime = 0f; //每10帧判断敌人队伍是否应该被看见 foreach (var item in WorldObj.allTeams) { //判断每一支非己方的TeamObj是否该被看见 if (item.nationality != nationality) { bool seen = false; //是否该被看见变量 GameObject infoSource = null; foreach (var team in WorldObj.allTeams) { if (team.nationality == nationality) { if (Vector3.Distance(item.transform.position, team.transform.position) < WorldObj.SkillDistance) { seen = true; infoSource = team.gameObject; break; } } } foreach (var eachcity in WorldObj.allCities) { if (eachcity && eachcity.nationality == nationality) { if (Vector3.Distance(item.transform.position, eachcity.transform.position) < WorldObj.SkillDistance) { seen = true; infoSource = eachcity.gameObject; break; } } } //根据判断结果使敌人消失或者显形(包括敌人血条teamHealthCanvas) if (seen && !item.visible) //使显形 { item.visible = true; StartCoroutine(Funcs.SlowDisappearIE(item.teamHealthCanvas, 2f, 100f, true)); StartCoroutine(Funcs.SlowDisappearIE(item.transform, 2f, 100f, true)); try { //侦查信息显示 uiController.ScoutInfoShow(nationality, WorldObj.AnimatorAction.Victory, WorldObj.ScoutInfoType.EnemyBeFound, infoSource); } catch (Exception) { } } else if (!seen && item.visible)//使消失 { item.visible = false; StartCoroutine(Funcs.SlowDisappearIE(item.teamHealthCanvas, 2f, 100f, false)); StartCoroutine(Funcs.SlowDisappearIE(item.transform, 2f, 100f, false)); } } } } //如果正在操作界面的城市受到攻击,则关闭UI if (cityController.cityObj && cityController.cityObj.fighting && WorldObj.UIRun) { uiController.CloseAllPanels(); } //如果城市的敌人列表中的队伍不再攻城或者已经不存在,则从列表中清除该队伍 foreach (var item in WorldObj.allCities) { if (item && item.fighting) { for (int i = 0; i < item.enemies.Count; i++) { TeamObj fightTeam = null; foreach (var eachTeam in WorldObj.allTeams) { if (eachTeam.hero == item.enemies[i]) { fightTeam = eachTeam; } } if ((fightTeam && !fightTeam.enemies.Contains(item.word)) || !fightTeam) { item.UpdateEnemies(item.enemies[i], false); } if (item.enemies.Count == 0) { item.UpdateFighting(false); } } } } }
/// <summary> /// 英雄使用英雄技 /// </summary> /// <param name="_objTeam">目标队伍</param> public void HeroUseSkill(TeamObj _objTeam) { if (!clickSkill) { return; } clickSkill = false; //如果本队伍是工兵,则不适用英雄技 if (teamObj.soldiertype == WorldObj.SoldierType.Worker || teamObj.soldiertype == WorldObj.SoldierType.Tank) { return; } //判断目标队伍距离 if (Vector3.Distance(_objTeam.transform.position, teamObj.transform.position) > WorldObj.SkillDistance) { return; } switch (WorldObj.MatchHero(teamObj.hero).heroskill) { case WorldObj.HeroSkill.none: break; case WorldObj.HeroSkill.IncreaseOwnSpeed: if (_objTeam.nationality == countryObj.nationality) { //急行军倒计时,计时完毕恢复初始速度 _objTeam.UpdateTeamNAVSpeed(WorldObj.IncreaseOwnSpeedCoefficient * _objTeam.GetComponent <NavMeshAgent>().speed); StartCoroutine(TeamSpeedCountDownRestore(WorldObj.IncreaseOwnSpeedTime, _objTeam)); // 英雄技能进入冷却 HeroSkillCoolDown(); } break; case WorldObj.HeroSkill.ReduceEnemySpeed: if (_objTeam.nationality != countryObj.nationality) { //缓慢倒计时,计时完毕恢复初始速度 _objTeam.UpdateTeamNAVSpeed(WorldObj.ReduceEnemySpeedCoefficient * _objTeam.GetComponent <NavMeshAgent>().speed); StartCoroutine(TeamSpeedCountDownRestore(WorldObj.ReduceEnemySpeedTime, _objTeam)); // 英雄技能进入冷却 HeroSkillCoolDown(); } break; case WorldObj.HeroSkill.Disorient: if (_objTeam.nationality != countryObj.nationality) { //迷惑减低军心 _objTeam.UpdateTeamMorale(Mathf.RoundToInt(WorldObj.DisorientCoefficient * _objTeam.GetComponent <TeamObj>().teammorale)); // 英雄技能进入冷却 HeroSkillCoolDown(); } break; case WorldObj.HeroSkill.Encourage: if (_objTeam.nationality == countryObj.nationality) { //鼓舞提升军心 _objTeam.UpdateTeamMorale(Mathf.RoundToInt(WorldObj.EncourageCoefficient * _objTeam.GetComponent <TeamObj>().teammorale)); // 英雄技能进入冷却 HeroSkillCoolDown(); } break; case WorldObj.HeroSkill.Silence: if (_objTeam.nationality != countryObj.nationality) { //保存原技能 HeroObj objHero = WorldObj.MatchHero(_objTeam.hero); WorldObj.HeroSkill originalSkill = objHero.heroskill; //沉默对手 objHero.GiveHeroSkill(WorldObj.HeroSkill.none); //计时结束后恢复对手 StartCoroutine(HeroSkillSilenceCountDownRestore(WorldObj.SilenceTime, objHero, originalSkill)); // 英雄技能进入冷却 HeroSkillCoolDown(); } break; case WorldObj.HeroSkill.Disease: if (_objTeam.nationality != countryObj.nationality) { //瘟疫降低敌方队伍人数 _objTeam.UpdateSoldierNumber(Mathf.RoundToInt(WorldObj.DiseaseCoefficient * _objTeam.GetComponent <TeamObj>().soldiernumber)); // 英雄技能进入冷却 HeroSkillCoolDown(); } break; default: break; } }