停止相机围绕旋转父级旋转

时间:2017-08-15 20:38:06

标签: objective-c scenekit

我有一个滚动的大理石,我希望我的相机能够跟随它。我的问题是我的相机在旋转时也在我的物体周围旋转。

这是我的代码。

-(void) setupCameraOnMarble:(SCNNode*)marble
{
    [cameraNode removeFromParentNode];

    [marble addChildNode:cameraNode];

    SCNLookAtConstraint *marbleStare = [SCNLookAtConstraint lookAtConstraintWithTarget:marble];

    marbleStare.gimbalLockEnabled = YES;

    cameraNode.constraints = @[marbleStare];    
}

我认为变换约束应该有效,但我不明白它是如何工作的。

2 个答案:

答案 0 :(得分:0)

你确定你需要让cameraNode成为大理石的孩子吗?

因为根据SKNode文档:当缩放或旋转节点的坐标系时,此转换既适用于节点自己的内容,也适用于其后代的内容see SKNode

所以我假设你需要从大理石上取下儿童相机。要从相机中获得跟随对象的行为,您可以在代码中的某处更新相机坐标,从而移动大理石

答案 1 :(得分:0)

我已经将我的相机放到我的球体上,并使我的类成为SCNSceneRendererDelegate协议并将其添加到渲染循环中: -(void) renderer:(id)renderer updateAtTime:(NSTimeInterval)time { [cameraNode setPosition: SCNVector3Make(marbleNode.presentationNode.position.x, marbleNode.presentationNode.position.y + 5, marbleNode.presentationNode.position.z + 10)]; }

如果我记录了marble.presentationNode的坐标,他们正在改变,但我的相机仍然没有移动!