// 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); } } } } }