示例#1
0
 // Update is called once per frame
 void Update()
 {
     if (paused)
     {
         return;
     }
     if (lives == 0)
     {
         return;
     }
     //Buscar unidades cercanas para atacarlas
     if (currentState == EnemyState.RUNNING)
     {
         currentTarget = UnitiesManager.instance.SearchUnit(transform.position, visionRange);
         if (currentTarget != null)
         {
             //anim.SetTrigger("Idle");
             currentState = EnemyState.SEARCHING;
             agent.SetDestination(new Vector3(currentTarget.transform.position.x, 0.5f, currentTarget.transform.position.z));
         }
         else
         {
             float dist = Vector3.Distance(transform.position, goal.transform.position);
             if (dist <= distToAttack)
             {
                 ActivateEnd();
             }
         }
     }
     else if (currentState == EnemyState.SEARCHING)
     {
         if (currentTarget.lives > 0)
         {
             float dist = Vector3.Distance(transform.position, currentTarget.transform.position);
             //Debug.Log("In Search "+dist+" "+distToAttack);
             if (dist <= distToAttack)
             {
                 anim.SetTrigger("Idle");
                 agent.speed  = 0;
                 currentState = EnemyState.ATTACKING;
             }
         }
         else
         {
             anim.SetTrigger("Run");
             currentTimeAttack = 0;
             currentState      = EnemyState.RUNNING;
             agent.speed       = speed;
             agent.SetDestination(new Vector3(goal.transform.position.x, 0.5f, goal.transform.position.z));
         }
     }
     else if (currentState == EnemyState.ATTACKING)
     {
         if (currentTarget.lives > 0)
         {
             currentTimeAttack += Time.deltaTime;
             if (currentTimeAttack > attackSpeed)
             {
                 audio.Play();
                 anim.SetTrigger("Attack");
                 currentTimeAttack = 0;
                 bool died = currentTarget.ReciveDamage(attackForce);
                 if (died)
                 {
                     anim.SetTrigger("Run");
                     currentState = EnemyState.RUNNING;
                     agent.speed  = speed;
                     agent.SetDestination(new Vector3(goal.transform.position.x, 0.5f, goal.transform.position.z));
                 }
             }
         }
         else
         {
             anim.SetTrigger("Run");
             currentTimeAttack = 0;
             currentState      = EnemyState.RUNNING;
             agent.speed       = speed;
             agent.SetDestination(new Vector3(goal.transform.position.x, 0.5f, goal.transform.position.z));
         }
     }
 }
示例#2
0
 // Update is called once per frame
 void Update()
 {
     if (paused)
     {
         return;
     }
     if (lives == 0)
     {
         return;
     }
     //Buscar unidades cercanas para atacarlas
     if (currentState == EnemyState.RUNNING)
     {
         currentTarget = UnitiesManager.instance.SearchUnit(transform.position, visionRange);
         if (currentTarget != null)
         {
             currentState = EnemyState.SEARCHING;
             agent.SetDestination(new Vector3(currentTarget.transform.position.x, 0.5f, currentTarget.transform.position.z));
         }
         else
         {
             float dist = Vector3.Distance(transform.position, goal.transform.position);
             Debug.Log(dist + "  " + distToAttack);
             if (dist <= distToAttack)
             {
                 lives = 0;
                 GameManager.instance.LoseLive();
                 EnemyGenerator.instance.RemoveEnemy(this);
                 Destroy(this.gameObject, 0.1f);
             }
         }
     }
     else if (currentState == EnemyState.SEARCHING)
     {
         if (currentTarget.lives > 0)
         {
             float dist = Vector3.Distance(transform.position, currentTarget.transform.position);
             Debug.Log("In Search " + dist + " " + distToAttack);
             if (dist <= distToAttack)
             {
                 agent.speed  = 0;
                 currentState = EnemyState.ATTACKING;
             }
         }
         else
         {
             currentTimeAttack = 0;
             currentState      = EnemyState.RUNNING;
             agent.speed       = speed;
             agent.SetDestination(new Vector3(goal.transform.position.x, 0.5f, goal.transform.position.z));
         }
     }
     else if (currentState == EnemyState.ATTACKING)
     {
         if (currentTarget.lives > 0)
         {
             currentTimeAttack += Time.deltaTime;
             if (currentTimeAttack > attackSpeed)
             {
                 currentTimeAttack = 0;
                 bool died = currentTarget.ReciveDamage(attackForce);
                 if (died)
                 {
                     currentState = EnemyState.RUNNING;
                     agent.speed  = speed;
                     agent.SetDestination(new Vector3(goal.transform.position.x, 0.5f, goal.transform.position.z));
                 }
             }
         }
         else
         {
             currentTimeAttack = 0;
             currentState      = EnemyState.RUNNING;
             agent.speed       = speed;
             agent.SetDestination(new Vector3(goal.transform.position.x, 0.5f, goal.transform.position.z));
         }
     }
 }