Merhaba 2 tane player var 1 tanede düşman var o düşman en yakın playere doğru gidecek bunu nasıl yapabilirim alttaki kodda en yakın playeri seçiyor ancak ona doğru gitmiyor onu nasıl yapabilirim
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class zombie : MonoBehaviour
{
private Animator anim;
public Transform target;
public int health = 1;
private Player p;
public int zombipuanı = 10;
bool oyundevam = true;
public int zombiparası = 10;
BoxCollider pc2d;
public GameObject[] otherEnemies;
public GameObject Gun;
public float Range;
public Transform Target;
bool Detected = false;
Vector3 Direction;
public float FireRate;
float nextTimeToFire = 0;
private void OnDrawGizmosSelected()
{
Gizmos.DrawWireSphere(transform.position, Range);
}
void Start()
{
pc2d = GetComponent<BoxCollider>();
anim = GetComponent<Animator>();
otherEnemies = GameObject.FindGameObjectsWithTag("Player");
Target = PlayereEnYakinEnemy().GetComponent<Transform>();
Vector3 targetPos = Target.position;
Direction = PlayereEnYakinEnemy().transform.position - (Vector3)transform.position;
RaycastHit2D rayInfo = Physics2D.Raycast(transform.position, Direction, Range);
}
// Update is called once per frame
void Update()
{
otherEnemies = GameObject.FindGameObjectsWithTag("Player");
Target = PlayereEnYakinEnemy().GetComponent<Transform>();
Vector3 targetPos = Target.position;
Direction = PlayereEnYakinEnemy().transform.position - (Vector3)transform.position;
RaycastHit2D rayInfo = Physics2D.Raycast(transform.position, Direction, Range);
if (rayInfo)
{
if (rayInfo.collider.gameObject.tag == "Player")
{
if (Detected == false)
{
Detected = true;
}
}
else
{
if (Detected == true)
{
Detected = false;
}
}
}
if (Detected)
{
Gun.transform.up = Direction;
if (Time.time > nextTimeToFire)
{
nextTimeToFire = Time.time + 1 / FireRate;
}
}
}
// Start is called before the first frame update
// Update is called once per frame
private void OnTriggerEnter(Collider other) / / burası can yeri
{
if (other.gameObject.tag.Equals("mermi"))
{
health -= 1; // silme
if (health <= 0)
{
Destroy(this.gameObject, 1.2f);
}
}
}
public GameObject PlayereEnYakinEnemy() // burası en yakın playeri seçiyor burdan
{
float mesafe = Mathf.Infinity;
GameObject enyakinenemy = null;
foreach (GameObject enemy in otherEnemies)
{
Vector3 aralarindakiMesafe = Gun.gameObject.transform.position - enemy.transform.position;
float enyakinenemymesafesi = aralarindakiMesafe.sqrMagnitude;
if (enyakinenemymesafesi < mesafe)
{
mesafe = enyakinenemymesafesi;
enyakinenemy = enemy;
}
}
return enyakinenemy;
}
}Burasıda haraket kodu yeri
public void hareker() // haraket kodu
{
if (oyundevam)
{
if (Vector3.Distance(transform.position, target.position) > 2f)
{
transform.position = Vector3.MoveTowards(transform.position, target.position, 3 * Time.deltaTime);
anim.SetTrigger("yürümek");
}
else
{
anim.SetTrigger("saldırı");
}
oyundevam = true;
}
}