Es gibt verschiedene Optionen zum Animieren eines 3D-Modells mit SceneKit. Wenn Sie jedoch die Arme und Beine eines 3D-Modells nach Belieben animieren möchten, sind die Optionen SCNIKConstraint oder SCN Animation.
Dieser Artikel beschreibt die Unterschiede zwischen ihnen.
Wie man eine Animation in SceneKit ausführt und wie man sie richtig verwendet
SCN Animation kann frei betrieben werden, wenn dies im Voraus definiert wurde. SCNIK Constraint eignet sich jedoch, wenn Sie die Geschwindigkeit und den Bewegungsumfang der Animation interaktiv bedienen möchten.
Daher werde ich erklären, wie der Arm des Roboters mit SCNIK Constraint frei animiert werden kann.
Die IK von SCNIKConstraint heißt Inverse Kinematics.
Ich werde diesen Artikel zitieren, weil er leicht zu verstehen war. Implementierungshinweis zur inversen Kinematik
IK ist eine Aktion, bei der die verbundenen Dinge zu einem bestimmten Punkt gelangen, sodass sich der Körper in Verbindung mit Händen, Handgelenken, Armen und Schultern bewegt, wie wenn ein Mensch nach einem bestimmten Ort greift. sagen.
SCNIKConstraint ist ein Mechanismus, mit dem Sie diese IK auf SceneKit-Knoten anwenden können.
Referenz: Apple Official: SCNIK Constraint
Dieses Mal erstellen wir eine Animation, in der sich der linke Arm des Roboters entsprechend dem Luftwiderstand bewegt.
** Bereiten Sie ein 1.3D-Modell vor **
Das 3D-Modell muss Knocheneinstellungen haben. Dieses Mal werden wir das vorhandene Modell verwenden.
Ein 3D-Modell des Roboters (Dateiname: robot.usdz) ist in Apples ARKit-Beispielprojekt enthalten. Verwenden Sie dieses Modell.
In diesem Artikel gab es ein Beispiel für das Erstellen mit einem Modellierungswerkzeug.
[SceneKit] Verwendung der SCNIK-Einschränkung
** 2. Erstellen Sie ein Spielprojekt aus der Xcode-Projekterstellung **
** 3. Ziehen Sie usdz-Dateien per Drag & Drop auf Ihr Projekt **
In diesem Artikel erfahren Sie, wie Sie ein 3D-Modell im usdz-Format in SceneKit laden.
Laden Sie ein 3D-Modell im usdz-Format in SceneKit und animieren Sie es
** 4. Erkennen, wann der Bildschirm gezogen wird **
Registrieren Sie UIPanGestureRecognizer bei viewDidLoad.
GameViewController.swift
let tapGesture = UIPanGestureRecognizer(target: self, action: #selector(handleDrag(_:)))
scnView.addGestureRecognizer(tapGesture)
** 5. Bestimmen Sie die beiden Gelenke, die der Startpunkt und der Endpunkt sein sollen **
Bestimmen Sie beim Überprüfen der Knocheninformationen des Modells mit Xcode die beiden Gelenke, die der Startpunkt und der Endpunkt sind (der Teil, der sich tatsächlich bewegt). Dieses Mal habe ich die linke Hand als Startpunkt und die linke Hand als Endpunkt bewegt.
Wenn Sie die beiden Gelenke nicht richtig auswählen, bewegen sie sich entweder nicht oder verhalten sich seltsam.
Wenn ich zum Beispiel zwei Punkte wählen würde, die Taille und die linke Hand, würde es wie John Travolta von Saturday Night Fever aussehen.
** 6. Bewegen Sie den Arm des Roboters beim Ziehen **
Ermitteln Sie das Ausmaß der Widerstandsbewegung und bestimmen Sie anhand dieser das Ziel des Roboterarms.
GameViewController.swift
@objc
func handleDrag(_ gestureRecognize: UIPanGestureRecognizer) {
//Holen Sie sich den Startpunkt der Animation (hier die Schulter des linken Arms)
guard let root = scene.rootNode.childNode(withName: "left_shoulder_1_joint", recursively: true) else { return }
//Holen Sie sich den Ort, um sich tatsächlich zu bewegen (hier die linke Armhand)
guard let target = scene.rootNode.childNode(withName: "left_hand_joint", recursively: true) else { return }
//Geben Sie den Startpunkt und den Ort an, an dem Sie zu SCNIKConstraint wechseln möchten
let ik:SCNIKConstraint = SCNIKConstraint.inverseKinematicsConstraint(chainRootNode: root)
target.constraints = [ik]
//Bestimmen Sie das Ausmaß der Bewegung des Roboterarms aus dem Ausmaß der Widerstandsbewegung
let move = gestureRecognize.translation(in: view)
let targetPosition = SCNVector3(target.position.x + Float(move.x * 0.1), target.position.y + Float(move.y * 0.1 * -1), target.position.z)
//Bewege deinen Arm
ik.targetPosition = targetPosition
}
Wir senden Informationen zur Entwicklung von iOS-Anwendungen. Bitte folgen Sie mir, da es auch auf Twitter gepostet wird. https://twitter.com/jugemjugemjugem
Recommended Posts