KWEngine kann 3D-Modelle mit vorgefertigten Animationen importieren. Die Animationen sind nicht separat erhältlich, sondern sind in die 3D-Modelldatei integriert.
Gängige Dateiformate für Modelle mit integrierten Animationen sind:
- Filmbox (FBX)
- glTF (GLB oder GLTF)
- Collada (DAE)
Jede Animation hat unabhängig von ihrer Länge einen Start- und Endpunkt. Der Startpunkt wird mit der Zahl 0.0
(für 0%) gekennzeichnet, der Endpunkt mit der Zahl 1.0
(für 100%).
Es folgt ein Beispiel für eine Player
-Klasse, in der bei Stillstand und Bewegung zwischen zwei Animationen (‚idle‘ und ‚walk‘) hin- und hergeschaltet wird.
class Player : GameObject { // Merkt sich, ob die Figur im letzten Frame lief oder nicht: private bool _isWalking = false; public override void Act() { bool animationSwitched = false; if(Keyboard.IsKeyDown(Keys.Left)) { // Wenn die Spielfigur vorher still stand, // muss ein Wechsel der Animation stattfinden: if(_isWalking == false) { animationSwitched = true; _isWalking = true; } MoveOffset(-0.01f, 0f, 0f); } if(Keyboard.IsKeyDown(Keys.Right)) { // Wenn die Spielfigur vorher still stand, // muss ein Wechsel der Animation stattfinden: if(_isWalking == false) { animationSwitched = true; _isWalking = true; } MoveOffset(+0.01f, 0f, 0f); } if(Keyboard.IsKeyDown(Keys.Left) == false && Keyboard.IsKeyDown(Keys.Right) == false) { // Wenn die Spielfigur sich vorher bewegt hat, // muss ein Wechsel der Animation stattfinden: if(_isWalking == true) { animationSwitched = true; _isWalking = false; } } DoAnimation(_isWalking, animationSwitched); } private void DoAnimation(bool isWalking, bool animationSwitched) { // Wenn das Modell keine Animationen besitzt, beende die // Methode vorzeitig: if(HasAnimations == false) { return; } // Wenn die Animation wechselt, muss der Stand der Animation // auf 0% zurückgesetzt werden: if(animationSwitched) { SetAnimationPercentage(0f); } if(isWalking == true) { // Jedes GameObject hat die Felder // 'AnimationID' und 'AnimationPercentage'. // In diesem Beispielmodell hat die Laufanimation die ID 1: SetAnimationID(1); SetAnimationPercentageAdvance(0.001f); } else { SetAnimationID(0); SetAnimationPercentageAdvance(0.001f); } } }
Jedes GameObject
verfügt über die drei Methoden:
SetAnimationID()
SetAnimationPercentage()
SetAnimationPercentageAdvance()
Die AnimationID
beginnt bei 0 zu zählen, so dass die erste im Modell gespeicherte Animation den Wert 0 hat. Die zweite hat den Wert 1, usw.
Die AnimationPercentage
beinhaltet den aktuellen Stand der Animation. Setzt man für dieses Feld z.B. den Wert 0.25
, so würde sich das 3D-Modell so ausrichten, dass es den Animationsstand bei 25% der Animation einnimmt.
Die Advance
-Variante hingegen führt die gerade aktuelle Animation um den übergebenen Wert fort und springt automatisch an den Anfang der Animation zurück, wenn das Animationsende erreicht ist.
Sollte das importierte 3D-Modell keine Animationen beinhalten, kann die AnimationID
nur den Wert -1 annehmen.
Schreibe einen Kommentar