Ich verwende SceneKit und habe eine App mit mehreren SCNNodes. Wenn der Benutzer auf einen Finger tippt, folgt er dem Finger (mit einem UILongPressGestureRecognizer). In dem Staat begann und geändert, verwende ich die folgende Codezeile, um die Position des Knotens zu ändern:Ändern der SCNNode-Position, ohne die Ausrichtung zu ändern
_currentlyMoving?.position = SCNVector3Make(worldPoint.x, worldPoint.y, worldPoint.z)
In dieser Zeile _currentlyMoving
die SCNNode ist, und World die Position meines Fingers.
Dies bewegt den Knoten in die richtige Position; Es scheint jedoch auch die Rotation des Knotens in (0,0,0) zu ändern (der Knoten befindet sich immer in seiner Startrotation).
Gibt es eine Möglichkeit, die Position eines SCNNode zu ändern, ohne die Drehung?
Auch habe ich folgendes versucht, aber es hat nicht funktioniert entweder (das gleiche passierte):
_currentlyMoving?.transform.m41 = worldPoint.x
_currentlyMoving?.transform.m42 = worldPoint.y
_currentlyMoving?.transform.m43 = worldPoint.z
Die einzige andere Sache, die ich mit dem Knoten tue, sind die folgenden drei Zeilen zu stoppen up Bewegung nahm während:
_currentlyMoving?.physicsBody?.velocity = SCNVector3Make(0.0, 0.0, 0.0)
_currentlyMoving?.physicsBody?.velocityFactor = SCNVector3Make(0.0, 0.0, 0.0)
_currentlyMoving?.physicsBody?.angularVelocity = SCNVector4Make(0.0, 0.0, 0.0, 1.0)
Hat Ihr Knoten ein physicBody-Set? Wenn Sie es programmatisch bewegen, haben Sie einen "kinematischen" Körper verwendet? – Toyos
@Toyos Es hat einen Physikkörper, aber es ist dynamisch, nicht kinematisch. – Jsdodgers
Die Transformation des Knotens sollte nicht von seiner Position beeinflusst werden, es sei denn, Sie haben bestimmte Einschränkungen. Können Sie den minimalen Code teilen, um dieses Problem zu reproduzieren? – Gusutafu