我使用球作为球员的主要物理主体:
setup_Player () {
playerGeometry = SCNSphere(radius: CGFloat(radius))
playerGeometry.segmentCount = 64
player = SCNNode(geometry: playerGeometry)
player.geometry?.materials = [playerMaterial];
player.position = SCNVector3(x: 1, y: 15, z: 0.5)
let playerShape = SCNPhysicsShape(geometry: playerGeometry, options: nil)
let playerBody = SCNPhysicsBody(type: .dynamic, shape: playerShape)
player.physicsBody?.categoryBitMask = collisionRollingBall
player.physicsBody?.collisionBitMask = collsionTarget
player.physicsBody?.mass = 10
player.physicsBody = playerBody
scene.rootNode.addChildNode(player)
}
编写代码来修复摄像机在我的播放器旁边的位置:
func setupCamera () {
//create a main camera
cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.camera?.zFar = 100;
cameraNode.position = SCNVector3Make(0, 0, 0)
cameraNode.eulerAngles = SCNVector3Make(0, 0, 0)
cameraNode.rotation = SCNVector4Make(0, 1, 0, Float(-M_PI_4*0.75))
scene.rootNode.addChildNode(cameraNode)
//add a secondary camera to the player
let frontCameraNode = SCNNode()
frontCameraNode.position = SCNVector3Make(0, 15, 0)
frontCameraNode.rotation = SCNVector4Make(1, 0, 0, Float(-M_PI_4*2.2))
frontCameraNode.camera = SCNCamera()
frontCameraNode.camera?.zFar = 100
player.addChildNode(frontCameraNode)
}
我只需要将摄像机位置冻结在一定距离处,就像在第三人称游戏中一样。
在这种情况下,相机获取球的物理属性并随之旋转。但我需要跟随球员和所有人,而不是以巨大的球速旋转......
如何将相机固定在播放器旁边,而不是继承其属性?任何想法如何忽略物理体的旋转?
提前谢谢。
您可以更新摄像机的位置,然后将其添加到场景中,而不是添加到播放器中。您应该在renderer(_:updateAtTime:)
中的每一帧都执行此操作
https://developer.apple.com/reference/scenekit/scnscenerendererdelegate/1522937-renderer
frontCamerNode.position = SCNVector3(x: player.position.x, player.position.y, player.position.z - 10)
我认为还需要做更多的事情,例如相机的旋转等。但也许这为你指明了正确的方向。