Hinzufügen und Überblenden von Animationen in SceneKit

8

Ich schaute auf Banana Spiel von WWDC, die in Objective geschrieben wurde - C versuchte, den Code in swift für den Import von Animationen und den Übergang zwischen ihnen zu konvertieren, aber ich habe Probleme beim Ausführen der Animationen in DAE-Dateien.

Ich habe DAE-Dateien im AutoDesk-Format von 3DSMAx und im OpenCollada-Format exportiert. Das Autodeskformat der Animation ist für jeden Bone, daher kann ich eine Animation nicht mit dem Namen aufrufen, also importiere ich einfach die Szene und mache folgendes, damit die Animation startet, sobald die Datei geladen wird.

%Vor%

Obwohl die Animation abgespielt wird, sobald die Szene startet, weiß ich, wie man die Animation speichert.

Wenn ich die Collada-Datei mit openCollada exportieren. Ich kann Folgendes verwenden, um das get auszuführen und die Animation auszuführen, da es nur eine Animation für das gesamte Objekt und nicht für jeden Bone im Fall des AutoDesk Collada-Formats gibt. Auf diese Weise kann ich die Animation auch mit CAAnimation speichern.

%Vor%

Aber dann läuft der Charakter in einem Winkel und läuft auch vor und zurück, anstatt an der gleichen Stelle zu laufen.

Auch die Beleuchtung ist besser mit openCollada. Ich möchte nur OpenCollada anstelle von Autodesk Collada-Export verwenden. Momentan verwende ich das openCollada-Format zum Exportieren der Szene und Autodesk zum Exportieren von Zeichen.

Wie speichern Sie Animationen in SceneKit swift und wechseln Sie zwischen ihnen? Vielen Dank. : D

    
Siddharth Shekar 04.02.2015, 06:49
quelle

1 Antwort

13

Wenn Sie die Standardoptionen beim Laden einer Szene aus einer Datei nicht ändern, werden alle Animationen in der Szene sofort und automatisch an ihre Zielknoten angehängt und abgespielt. (Siehe Importoptionen für Animationen in der SceneKit-API-Referenz.)

Wenn Sie die Animationen aus einer Szenendatei laden und sie für das spätere Anhängen an Knoten beibehalten möchten, laden Sie sie am besten mit dem SCNSceneSource Klasse. Darüber hinaus können Sie Ihr Basismodell in einer Datei und Animationen in anderen Dateien speichern (müssen es aber nicht).

Schau dir einfach diesen Bananen-Animations-Ladecode an. Schau es dir einfach an. *

%Vor%

Was ist hier los?

  1. Es gibt eine benutzerdefinierte Klasse, die den animierten Charakter verwaltet. Es besitzt eine SCNNode , die das Charaktermodell enthält, sowie eine Menge CAAnimation s für alle Dinge, die das Modell tun kann (idle / jump / throw / etc).
  2. Diese Klasse wird initialisiert, indem der von einer DAE-Datei geladene Zeichenknoten übergeben wird. ( AAPLGameSimulation loadNodeWithName:fromSceneNamed: ist ein Convenience-Wrapper zum Laden eines SCNScene aus einer Datei und zum Entnehmen eines benannten Knotens.) Diese DAE-Datei enthält nur das Zeichenmodell ohne Animationen.
  3. Dann lädt AAPLMonkeyCharacter die benötigten Animationen aus den separaten DAE-Dateien, die jede Animation enthalten, und speichert diese. Hier kommt SCNSceneSource ins Spiel - Sie können Animationen aus der Datei holen, ohne sie abzuspielen.
  4. Wenn es Zeit ist zu spielen, ruft die Affenklasse addAnimation:forKey: auf, um die Animation auf ihrem Hauptknoten auszuführen.

Wenn ich auf Swift übersetze und mich auf dein Problem bewerbe - wo du scheinbar alle Animationen in derselben Datei hast -, würde ich so etwas machen (vage Umrisse einer hypothetischen Klasse):

%Vor%

Die Schlüsselbits:

  • SCNSceneSourceAnimationImportPolicyDoNotPlay stellt sicher, dass Knoten, die von der Szenenquelle geladen werden, nicht mit Animationen beginnen, die angehängt / abgespielt werden.
  • Sie müssen die Animationen separat mit entryWithIdentifier:withClass: laden. Stellen Sie sicher, dass Sie sie so konfigurieren, wie Sie möchten (Wiederholung, Fadedauer usw.), bevor Sie sie an die Knoten anfügen.
rickster 04.02.2015, 22:03
quelle

Tags und Links