public void InitFightingHero(bool isInitPos = true) { ClearFightHero(); Dictionary <long, Hero> heroes = DataManager.GetInstance().GetGameData().Heroes; foreach (KeyValuePair <long, Hero> heropair in heroes) { if (heropair.Value.teamPosition > -1)//必须在阵容 { //HeroTableData heroTableData = DataManager.GetInstance().GetHeroTableDataByHero(heropair.Value); DIYTableData dIYTableData = DataManager.instance.GetDIYTableDatasById(heropair.Value.heroPartDic[HeroPart.Body]); if (dIYTableData != null) { GameObject fighthero = EnityManager.GetInstance().CreateFightHero(heropair.Value); fighthero.transform.SetParent(transform, false); if (heroStartPos != null && heroStartPos.Length > heropair.Value.teamPosition) { fighthero.transform.position = heroStartPos[heropair.Value.teamPosition]; } //if (heropair.Value.teamPosition == 2) { followHero = fighthero.transform; } FightHeros.Add(fighthero); } } } teamListPanel.InitTeamList(); }
public void UpdateHP() { if (Camera.current != null)// && HP != MaxHp) { Vector3 hpPos = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y + 2f, gameObject.transform.position.z); Vector3 screenPos = Camera.current.WorldToScreenPoint(hpPos); EnityManager.GetInstance().hpManager.UpdateEnityHPByEnityName(gameObject.name, screenPos, (float)HP / (float)MaxHp, (100 - gameObject.transform.position.z) / 100); } }
public void InitMonster(string[] monsterArr) { if (WayGameObject != null) { for (int i = 0; i < monsterArr.Length; i++) { int monsterid = int.Parse(monsterArr[i]); HeroTableData heroTableData = DataManager.GetInstance().GetHeroTableDataByHeroId(monsterid); if (heroTableData != null) { GameObject enity = EnityManager.GetInstance().CreateEnity(EnityType.Enemy, heroTableData.heroPrefab); enity.transform.SetParent(WayGameObject.transform.parent.transform, false); enity.transform.position = monsterPosArr[i].position; } } } }
public void InitAIBaseByEnity(Enity enity) { this.enity = enity; selfType = enity.enityType; attackType = EnityManager.GetInstance().GetAttackEnityType(selfType); isCanMove = enity.enityType == EnityType.Hero; searchRadius = DataManager.instance.GetConfigValueToFloat("fight_search_radius"); moveSpeed = DataManager.instance.GetConfigValueToFloat("fight_move_speed"); moveAnimatorType = AnimatorAction.Run; animator = enity.gameObject.GetComponent <Animator>(); //////////////////////////判断是否装备武器/////////////////////////////////// Item equip = enity.GetEnityEquip(); if (equip != null) { aiWeapon = gameObject.AddComponent <AIWeapon>(); aiWeapon.InitWeaponByEquip(equip); } isInit = true; }
// Update is called once per frame void Update() { timeCumulative += Time.deltaTime; if (isInit) { //timeCumulative = 0.0f; ///////////////搜索周边敌人//////////////////////////// //print("attackType:" + attackType.ToString()); //if(EnemyManager.GetInstance().GetEnemysCount(attackType) == 0) { //transform.LookAt(Vector3.forward); //DoAction(AnimatorParameters.Victory, ActionParamtersType.Bool, 1); //return; } List <GameObject> targetList = GetGameObjectsByAttackTargetType(attackType); AnimatorStateInfo _animatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (targetList.Count > 0) //有攻击目标 { if (attackTargetNum > 0 && aiWeapon != null) //攻击数量 { GameObject lockTarget = null; //锁定最近的目标 float distanceTemp = float.MaxValue; List <GameObject> inAttackRadiusTargetList = new List <GameObject>(); //在攻击范围内的怪物 for (int i = 0; i < attackTargetNum; i++) { GameObject target = targetList[i]; float distance = Vector3.Distance(target.transform.position, transform.position); if (distanceTemp > distance) { distanceTemp = distance; lockTarget = target; } if (aiWeapon.attackRadius > distance)//在攻击范围内 { inAttackRadiusTargetList.Add(target); } } if (inAttackRadiusTargetList.Count > 0)//有可以攻击的怪物 { if (!EnityManager.GetInstance().hpManager.IsCreateHP(gameObject.name)) { UpdateHP(); } transform.rotation = Quaternion.LookRotation(lockTarget.transform.position - transform.position);//先调整方向,朝向最近目标 ///////////////////好,攻击目标开始!////////////////////////////// if (animator.parameterCount > (int)attackAnimatorType) { //DoAction(moveAnimatorType, ActionParamtersType.Bool, 0);//如果在跑动,先停止跑动 this.enity.OnPlayAnimation(moveAnimatorType, 0); if (aiWeapon.timeCumulative > aiWeapon.attackSpeed) { aiWeapon.timeCumulative = 0.0f; aiWeapon.isCanAttack = true; this.enity.OnPlayAnimation(attackAnimatorType); //DoAction(attackAnimatorType, ActionParamtersType.Trigger); } //AnimatorStateInfo info = animator.GetCurrentAnimatorStateInfo(0); // 判断动画是否播放完成 if (_animatorStateInfo.normalizedTime >= 0.7f) { //if (animator.parameterCount > (int)attackAnimatorType)//判断是否有这个参数INDEX { string _animatorParameterName = animator.GetParameter((int)attackAnimatorType).name; if (_animatorStateInfo.IsName(_animatorParameterName)) { if (aiWeapon.isCanAttack) { //播放完毕,要执行的内容 //print("info:" + info.ToString()); aiWeapon.isCanAttack = false; aiWeapon.OnAttackTarget(lockTarget, 0); } } } } } else { //没有武器自爆处理 //KillSelf(); } } else//需要移动过去,如果可以移动的话 { if (isCanMove)//先判断是否可以跑动 { this.enity.OnPlayAnimation(moveAnimatorType); //DoAction(moveAnimatorType, ActionParamtersType.Bool);//播放跑动动画 //transform.rotation = Quaternion.LookRotation(lockTarget.transform.position - transform.position);//先调整方向,朝向目标 transform.LookAt(lockTarget.transform.position); //if (animator.parameterCount > (int)moveAnimatorType && _animatorStateInfo.IsName(animator.GetParameter((int)moveAnimatorType).name))//判断在运动状态再移动,不然会出现还在攻击状态下漂移的情况 if (this.enity.animatorAction == AnimatorAction.Run) { //////////////开始移动//////////////////////// //transform.position = transform.position + transform.forward.normalized * 0.1f; //GameObject projectile = Instantiate(bombPrefab, spawnPosition.position, Quaternion.identity) as GameObject; //projectile.transform.LookAt(target.transform.position); GetComponent <Rigidbody>().MovePosition(transform.position + transform.forward.normalized * moveSpeed); } } } currentLockTarget = lockTarget; } } else { if (selfType.ToString() == EnityType.Hero.ToString()) { this.enity.OnPlayAnimation(moveAnimatorType); //DoAction(moveAnimatorType, ActionParamtersType.Bool, 1); if (this.enity.animatorAction == AnimatorAction.Run)//判断在运动状态再移动,不然会出现还在攻击状态下漂移的情况 { transform.rotation = initRotation; GetComponent <Rigidbody>().MovePosition(transform.position + transform.forward.normalized * moveSpeed); } } } } }