Hallo zusammen,
ich muss doch noch mal wegen meiner KI nerven. Ich habe vor die Logik meiner KI so um zu setzen, dass wenn der Spieler in der Nähe ist, und die Funktion Attack() aufgerufen wird, dass die KI prüft ob sie den Spieler sieht und wenn ja, dass sie die Position des Spielers dann in der Variable targetTemp zwischenspeichert und auf das Ziel zu läuft. Wenn der Spieler nicht mehr in Sicht ist, soll targetTemp nicht mehr aktuallisiert werden, die KI zu dem Punkt laufen und dort stehen bleiben.
Jetzt habe ich aber das Problem, dass targetTemp immer aktualisiert wird, auch wenn die KI den Spieler gar nicht sieht. Die if Abfrage mit "if (hit.collider.tag == "Player")" funktioniert allerdings, denn wenn ich dort ein print Befehl mit einfüge und mir die Angaben in der Console anschaue, hört der print Befehl auf, wenn die KI den Spieler nicht mehr sieht. Warum wird dann targetTemp immer aktualisiert?
// Raycast auf den Spieler
// -----------------------
var hit : RaycastHit;
var rayDirection = target.position - transform.position;
if (Physics.Raycast(transform.position, rayDirection, hit, 200))
{
Debug.DrawLine(transform.position, hit.point, Color.green);
if (hit.collider.tag == "Player")
targetTemp = target; // Position des Spielers zwischenspeichern
print("Temp X: " + targetTemp.position.x + " Temp Y: " + targetTemp.position.y + " Temp Z: " + targetTemp.position.z);
if (targetTemp != null && transform.position != targetTemp.position)
{
// Zombie zum Spieler drehen
// -------------------------
var rotateDirection = targetTemp.position - transform.position;
rotateDirection.y = 0;
var lookAtTarget = Quaternion.LookRotation(rotateDirection);
transform.rotation = Quaternion.Slerp(transform.rotation, lookAtTarget, Time.deltaTime * rotateSpeed);
moveDirection = transform.TransformDirection(Vector3.forward * walkSpeed);
}
else
moveDirection = Vector3.zero;
}