Я изменил ваш код, и теперь он работает.Я добавил слой «Player» к игровому объекту игрока, а затем переписал ваш сценарий следующим образом:
using UnityEngine;
public class Enemy : MonoBehaviour
{
public int maxHealth = 40;
public float speed;
public float attackRange;
public float attackDelay;
public float chaseRange;
public float bulletForce;
private float lastAttackTime;
private float distanceToTarget;
public Transform target;
public GameObject projectile;
private Rigidbody2D rb2d;
private void Start()
{
rb2d = GetComponent<Rigidbody2D>();
}
private void FixedUpdate()
{
if (distanceToTarget < chaseRange)
{
Chase(target.position);
}
else
{
rb2d.velocity = Vector2.zero;
}
}
private void Update()
{
distanceToTarget = Vector3.Distance(transform.position, target.position);
if (distanceToTarget < attackRange)
{
if (Time.time > lastAttackTime + attackDelay)
{
RaycastHit2D Hit = Physics2D.Raycast(transform.position, transform.up, attackRange, 1 << LayerMask.NameToLayer("Player"));
if (Hit)
{
Fire();
lastAttackTime = Time.time;
}
}
}
}
private void Chase(Vector3 target)
{
Vector3 targetDir = target - transform.position;
float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f;
Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
transform.rotation = Quaternion.RotateTowards(transform.rotation, q, 180);
rb2d.velocity = targetDir.normalized * speed;
}
private void Fire()
{
GameObject newBullet = Instantiate(projectile, transform.position, transform.rotation);
newBullet.GetComponent<Rigidbody2D>().AddForce(transform.up * bulletForce, ForceMode2D.Impulse);
}
}
Сначала, если у вас есть твердое тело, используйте его вместо Transform.Translate.Во-вторых, убедитесь, что ваш raycast применяется только к слою Player.В-третьих, вместо
AddRelativeForce(new Vector2(0f, bulletForce));
используйте
AddForce(transform.up * bulletForce, ForceMode2D.Impulse);
В-четвертых, поиграйтесь с сериализованными значениями, пока не получите желаемый результат.Я снизил скорость противника и увеличил силу пули.Дайте знать, если у вас появятся вопросы.