2017-08-15 47 views
0

我有一個滾動的大理石,並希望我的相機遵循它。我的問題是,當它旋轉時,我的相機也圍繞着我的物體旋轉。停止旋轉父母的相機

這是我的代碼。

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

    [marble addChildNode:cameraNode]; 

    SCNLookAtConstraint *marbleStare = [SCNLookAtConstraint lookAtConstraintWithTarget:marble]; 

    marbleStare.gimbalLockEnabled = YES; 

    cameraNode.constraints = @[marbleStare];  
} 

我在想,轉換約束應該可以工作,但我不明白它是如何工作的。

+0

你在使用SceneKits物理系統嗎? iOS 11添加了一個['SCNDistanceConstraint'](https://developer.apple.com/documentation/scenekit/scndistanceconstraint)。你是否也需要iOS 10的解決方案? – orangenkopf

+0

@orangenkopf 是的,我肯定會需要iOS 10的解決方案。謝謝! – Sam

回答

0

您確定您需要將cameraNode製作成大理石的孩子嗎?

因爲根據SKNode文檔:當一個節點的座標系縮放或旋轉,這種轉變是同時適用於節點自己的內容和其後代的see SKNode

所以我假設你需要取消的孩子大理石相機。而才達到這followint從相機對象行爲,你可以更新相機中的代碼,即移動大理石

+0

我改變了一些看到下一個答案... – Sam

0

我已經取消childed我的相機我的球,使我的類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的座標他們正在改變,但我的相機仍然不動!

+0

相機和大理石是同一父母的孩子?你有沒有把自己設置爲'SCNSceneView'的'委託',這樣該方法實際上被調用? – orangenkopf

+0

是的,我有。我還設置了scnView.isPlaying = YES ...我還添加了NSLog以返回marbleNode.presentationNode的位置。我將用完整的代碼回答下面的問題。謝謝你的幫助! – Sam

+0

顯然我不再允許回答問題!所以我不能給你我的代碼@#$!&& – Sam