Untitled
unknown
plain_text
a year ago
2.1 kB
2
Indexable
Never
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Enemy : MonoBehaviour { public Transform player; public GameObject attackObject; public float attackDistance = 3f; public float attackHeight = 4f; public float attackDuration = 1f; public float attackSpeed = 5f; public int attackCount = 3; private bool isAttacking = false; private int currentAttackCount = 0; void Update() { if (!isAttacking && Vector3.Distance(transform.position, player.position) < attackDistance) { StartCoroutine(Attack()); } } IEnumerator Attack() { isAttacking = true; while (currentAttackCount < attackCount) { // Move up to the attack height float t = 0f; Vector3 startPos = transform.position; Vector3 endPos = new Vector3(transform.position.x, transform.position.y + attackHeight, transform.position.z); while (t < 1f) { t += Time.deltaTime / attackDuration; transform.position = Vector3.Lerp(startPos, endPos, t); yield return null; } // Instantiate the attack object Instantiate(attackObject, player.position, Quaternion.identity); // Move to the player t = 0f; startPos = transform.position; endPos = player.position; while (t < 1f) { t += Time.deltaTime * attackSpeed / Vector3.Distance(startPos, endPos); transform.position = Vector3.Lerp(startPos, endPos, t); yield return null; } // Check if we reached the player if (Vector3.Distance(transform.position, player.position) < 0.1f) { currentAttackCount++; if (currentAttackCount >= attackCount) { Destroy(gameObject); yield break; } } } isAttacking = false; } }