Ich implementiere einen NPC, um in einem virtuellen Raum herumzulaufen, insbesondere in einer Katze. Ich habe eine Reihe von kurzen Animationsclips (3-5 Sekunden). Mein erster Instinkt war nur, eine zufällige Animation auszuwählen, als die letzte endete, aber ich erkannte, dass sie nicht realistisch aussehen würde, da sie das Verhalten zu oft ändern würde, selbst wenn die nächste Animation auf physisch bedingte Möglichkeiten beschränkt ist.
Meine beabsichtigte Lösung ist so etwas wie ein Verhaltensbaum ( http://www.gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How_they_work.php ), in dem jede Animation eine gewichtete Liste der nächsten Animationen enthält. Das heißt, wenn die Katze läuft, hat sie eine 80% ige Chance, weiterzulaufen, 20% im Sitzen, 0% im Schlaf. Grundsätzlich wird ein Markov-Modell verwendet, um den entsprechenden nächsten Schritt zu erhalten.
Ich habe jedoch keine Ahnung, ob dies eine gute Lösung ist, und ich weiß auch nicht, wie ich das Mapping von der aktuellen Animation zur potenziellen nächsten Animation + Wahrscheinlichkeit generieren werde. 30 Animationen * 30 nächste Animationen = 900 Gewichtungen. Das ist viel manuell zu berechnen.
Die Katze reagiert manchmal, wenn sie auf ein Hindernis stößt, aber die Hauptlast des Problems besteht darin, eine realistische Folge von Animationen auszuwählen, ohne sie alle im Voraus auszuwählen. Im Baum gibt es auch einige andere Eingaben, wie die Nähe zu einer Person, den Ort im Raum, die Zeit seit dem letzten Essen usw.