using System.Collections; using System.Collections.Generic; using UnityEngine; public class Attack : Palye { [Header("发射的子弹")] public GameObject bullet; [Header("射击间隔")] public float attackInterval = 1f; [Header("敌人Tag")] public string enemyTag = "Enemy"; [Header("paotaInfo的脚本")] public paotaInfo towerInfo; // 引用 paotaInfo 脚本 [Header("需要一个canvas,作为生成子弹的父节点")] public Canvas canvas; [Header("子弹的飞行速度")] public float bulletSpeed; private float attackTimer = 0f; // Start is called before the first frame update void Start() { if (towerInfo == null) { Debug.LogError("未找到 paotaInfo 脚本,请检查挂载!"); } } // Update is called once per frame void Update() { if (!transform.parent.CompareTag("paotai")) { return; } attackTimer += Time.deltaTime; if (attackTimer >= attackInterval) { attackTimer = 0f; CheckAndAttack(); } } private void CheckAndAttack() { if (towerInfo == null) return; // 使用 CircleCollider2D 的范围检测敌人 Collider2D[] hits = Physics2D.OverlapCircleAll(transform.position, towerInfo._CircleCollider2D.radius); foreach (var hit in hits) { if (hit.CompareTag(enemyTag)) { Debug.Log("检测到敌人"); // 检测到敌人,开始射击 Shoot(hit.transform); return; // 只攻击一个目标 } } } private void Shoot(Transform target) { if (bullet != null) { // 创建子弹实例 GameObject newBullet = Instantiate(bullet, canvas.transform); newBullet.transform.position = transform.position; newBullet.GetComponent().Init(target.gameObject, bulletSpeed); newBullet.GetComponent().user = this; Debug.Log("射击敌人:" + target.name); } } private void OnDrawGizmos() { // 可视化攻击范围,需确保 paotaInfo 已挂载 if (towerInfo != null) { Gizmos.color = Color.red; Gizmos.DrawWireSphere(transform.position, towerInfo._CircleCollider2D.radius); } } }