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?
-
Dystans: Najpierw sprawdzamy
Vector3.Distancemiędzy AI a graczem. Jeśli gracz jest za daleko, AI go nie widzi. -
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). -
Raycast (Linia wzroku): To najważniejszy krok. Nawet jeśli gracz jest blisko i przed AI, może być za ścianą. Wysyłamy
Physics.Raycastod 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
PlayeriObstacles.
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?
