public IEnumerator attack(GameObject enemy) { isAttacking = true; unitMovement = gameObject.GetComponent <unitMovement>(); while (enemy != null) { unitMovement.rotateCoroutine = StartCoroutine(unitMovement.turnTowards(gameObject, enemy.transform.position)); if (Vector3.Distance(transform.position, enemy.transform.position) > Mathf.Abs(range)) { while (enemy != null && Vector3.Distance(transform.position, enemy.transform.position) > Mathf.Abs(range)) { transform.position = Vector3.MoveTowards(gameObject.transform.position, enemy.transform.position, unitMovement.speed * Time.deltaTime); yield return(new WaitForEndOfFrame()); } } attackCooldown = Time.time - lastAttackTime; if (attackCooldown >= 1f / attackSpeed && enemy != null) { lastAttackTime = Time.time; enemyUnitMovement = enemy.GetComponent <unitMovement>(); enemyUnitMovement.health -= unitMovement.attack; // anim = GetComponent<Animation>(); // anim.Play(); } yield return(new WaitForEndOfFrame()); } isAttacking = false; yield return(null); }
public IEnumerator arrowAttack(GameObject enemy) { shooting = true; unitMovement = unit.GetComponent <unitMovement>(); while (enemy != null) { unitMovement.rotateCoroutine = StartCoroutine(unitMovement.turnTowards(unit, enemy.transform.position)); if (Vector3.Distance(unit.transform.position, enemy.transform.position) > Mathf.Abs(range)) { while (enemy != null && Vector3.Distance(unit.transform.position, enemy.transform.position) > Mathf.Abs(range)) { unit.transform.position = Vector3.MoveTowards(unit.transform.position, enemy.transform.position, unitMovement.speed * Time.deltaTime); yield return(new WaitForEndOfFrame()); } } attackCooldown = Time.time - lastAttackTime; if (attackCooldown >= 1f / attackSpeed && enemy != null) { lastAttackTime = Time.time; Vector3 Vo = calculateVelocity(enemy.transform.position, unit.transform.GetChild(1).position, 1f); GameObject spawn = Instantiate(arrowPrefab, arrowSpawn.position, Quaternion.identity); Rigidbody rb = spawn.GetComponent <Rigidbody>(); rb.transform.rotation = Quaternion.Euler(transform.rotation.x, transform.rotation.y, transform.rotation.z); rb.velocity = Vo; } yield return(new WaitForEndOfFrame()); } shooting = false; yield return(null); }