Nie mam odpowiedzi na pytanie w formie pisemnej, ale wierzę, że prawdopodobnie próbujesz zapytać „dlaczego nie ma bardziej funkcjonalnych silników gier”, zamiast szukać konkretnego do użycia. Jeśli to prawda, należy ponownie sformułować pytanie. Jeśli nie ... zignoruj mnie. :)
Podejście czysto funkcjonalne nie nadaje się do gier. Gry (i grafika, fizyka i sztuczna inteligencja) i przede wszystkim zmiany stanu. Prawidłowe funkcjonalne podejście do tych problemów polegałoby na obliczeniu całego nowego stanu raz na pętlę, co będzie miało bardzo poważny spadek wydajności w porównaniu z kodowaniem bardziej bezpośrednio od tego, jak działa rzeczywisty sprzęt.
Z tego powodu nie widać żadnych funkcjonalnych silników gier w produkcji. Jest to po prostu zły paradygmat programowania dla większości problemów, które silnik gry ma rozwiązać. Jest to zły paradygmat programowania dla większości problemów, które należy rozwiązać również w skryptach wyższego poziomu i kodzie logiki gry. Chociaż prawie na pewno możliwe jest stworzenie funkcjonalnego silnika gry, byłby on powolny, trudny i uciążliwy w użyciu, i nie służyłby żadnemu prawdziwemu celowi poza schludnym pokazem / zabawką do popisania się.
Nie oznacza to, że programowanie funkcjonalne nie ma gdzieś miejsca w grach. Używam bardzo funkcjonalnego stylu kodowania (w stosownych przypadkach) w C #, Unity JavaScript, a nawet C ++ 11. Niektóre bardzo specyficzne problemy najlepiej lub przynajmniej najłatwiej rozwiązać za pomocą funkcjonalnego stylu, a większość popularnych obecnie języków obsługuje tę formę programowania, aczkolwiek w bardziej uciążliwy sposób niż „prawdziwe” języki funkcjonalne. Zazwyczaj problemy rozwiązywane za pomocą podejść funkcjonalnych nie są zawarte w kodzie podstawowego silnika ani w kodzie działającym w samej grze. Kodowanie funkcjonalne może być bardzo korzystne w przypadku narzędzi i przetwarzania danych offline (na przykład modele pieczenia i inne zasoby). Można również argumentować, że programowanie GPU ma niejasną funkcjonalność w sposobie pisania algorytmów,
Oczywiście nadal najlepiej jest unikać podejść funkcjonalnych poza ściśle określonymi okolicznościami, ponieważ chcesz, aby te narzędzia offline działały tak szybko, jak to możliwe. Języki funkcjonalne wyróżniają się równoległością, co jest dobre w przypadku niektórych problemów, ale abstrakcje sprzętowe zwykle prowadzą do bardzo nieefektywnej wydajności jednowątkowej. (Języki takie jak LISP mają się tu dobrze, ponieważ nie są czysto funkcjonalne, a w rzeczywistości wspólny LISP jest wieloparadygmatowy). Absolutnym najgorszym aspektem silnika gry lub powiązanego zestawu narzędzi jest wąskie gardło w iteracji treści. Fantazyjny silnik z wieloma funkcjami, który zajmuje artystom lub projektantom godziny na zrobienie tego, co można zrobić w 5 minut (lub idealnie, niemal natychmiast) doprowadzi do niskiej jakości gier lub anulowania z powodu eskalacji budżetu.