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