System percepcji AI: Jak sprawić, by przeciwnik „widział” i „słyszał”?

W grach RPG realizm walki i skradania zależy od tego, jak naturalnie zachowują się przeciwnicy. AI, które natychmiast wie, gdzie jest gracz, wydaje się niesprawiedliwe („cheating AI”). Z kolei AI, które ignoruje gracza stojącego tuż obok, wygląda na zepsute. Kluczem jest stworzenie systemu percepcji.

1. Wzrok: Pole widzenia (Field of View)

Wzrok AI to najczęściej kombinacja dystansu, kąta widzenia oraz sprawdzania przeszkód.

Jak to działa technicznie?

  1. Dystans: Najpierw sprawdzamy Vector3.Distance między AI a graczem. Jeśli gracz jest za daleko, AI go nie widzi.

  2. Kąt (FOV): Używamy Vector3.Angle, aby sprawdzić, czy kierunek do gracza mieści się w zadanym kącie (np. 90 stopni przed oczami NPC).

  3. Raycast (Linia wzroku): To najważniejszy krok. Nawet jeśli gracz jest blisko i przed AI, może być za ścianą. Wysyłamy Physics.Raycast od oczu AI do gracza. Jeśli promień trafi w gracza – widzi go. Jeśli trafi w ścianę – gracz jest bezpieczny.

2. Słuch: Zdarzenia dźwiękowe

Słuch nie zależy od kierunku patrzenia, ale od odległości i natężenia dźwięku.

Implementacja: Zamiast kazać AI „słuchać” co klatkę, lepiej odwrócić rolę. Gdy gracz wykonuje głośną akcję (bieg, skok, rzut przedmiotem), wysyła sygnał do wszystkich AI w określonym promieniu:

C#

void MakeNoise(float radius) {
    var colliders = Physics.OverlapSphere(transform.position, radius);
    foreach (var col in colliders) {
        if (col.TryGetComponent<IAIListener>(out var listener)) {
            listener.OnHearNoise(transform.position);
        }
    }
}

3. Stan „Podejrzenia” i detekcja czasowa

Profesjonalne systemy AI nie przechodzą ze stanu „IDLE” do „ATTACK” w jedną klatkę. Wprowadź pasek detekcji:

  • Jeśli gracz jest w FOV, ale daleko lub w cieniu, pasek rośnie powoli.

  • Jeśli gracz stoi tuż przed NPC, pasek wypełnia się natychmiast.

  • Gdy pasek przekroczy 50%, AI przechodzi w stan Investigate (Idzie sprawdzić ostatnią znaną pozycję).


Optymalizacja percepcji

Przy dużej liczbie przeciwników, wykonywanie Raycastów co klatkę dla każdego z nich zabije wydajność (o której pisaliśmy w poprzednim poście!).

  • Update Tick: Wykonuj percepcję np. 5-10 razy na sekundę, a nie 60.

  • Warstwy (Layers): Upewnij się, że Raycasty sprawdzają tylko warstwy Player i Obstacles.

Podsumowanie

Dobry system percepcji to fundament wciągającego gameplayu. Dzięki niemu gracz może planować swoje ruchy, chować się w cieniu i manipulować przeciwnikami, co w grach RPG jest niezwykle satysfakcjonujące.

Czy w Waszych projektach stosujecie proste sprawdzanie dystansu, czy budujecie zaawansowane sensory dla swoich NPC?