【问题标题】:SceneKit Following CameraSceneKit 跟随相机
【发布时间】:2017-08-28 08:49:42
【问题描述】:

我使用球作为我的球员的主要物理体:

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)

}

我只需要将相机位置冻结在一定距离,就像在第三人称的游戏中一样。

在这种情况下,相机获取球的物理属性并随之旋转。但我需要跟随球员和所有人,而不是以巨大的球速旋转......

如何固定播放器旁边的相机,而不是继承其属性?任何想法如何忽略物理体的旋转?

提前致谢。

【问题讨论】:

    标签: 3d swift3 camera physics scenekit


    【解决方案1】:

    您可以只更新相机的位置,然后将其添加到场景中,而不是添加到播放器中。你应该在renderer(_:​update​At​Time:​)中的每一帧都这样做

    https://developer.apple.com/reference/scenekit/scnscenerendererdelegate/1522937-renderer

    frontCamerNode.position = SCNVector3(x: player.position.x, player.position.y, player.position.z - 10)
    

    我认为还有更多工作要做,比如旋转相机等。但也许这会为你指明正确的方向。

    【讨论】:

      猜你喜欢
      • 2016-02-24
      • 2017-09-12
      • 2017-01-29
      • 2018-01-08
      • 2021-12-08
      • 1970-01-01
      • 2018-12-29
      • 2017-01-01
      • 1970-01-01
      相关资源
      最近更新 更多