Beispiel #1
0
    // 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);
                    }
                }
            }
        }
    }