gpt4 book ai didi

swift - SceneKit 如何在不同高度的地形上移动角色

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:58:35 26 4
gpt4 key购买 nike

我正在处理一个场景,其中有一个角色和一个带楼梯的平台。角色必须上下楼梯并从平台上跳下: enter image description here

我通过虚拟方向键移动角色。我正在寻找一种移动角色的正确方法。现在我有两种方式,各有优缺点:

第一种方式:射线测试。这种方式非常有效:我可以在楼梯上上下移动角色,但如果我在垫子附近有很多物体,并且我想跳跃,我需要做很多光线测试。

第二种方式:移动角色的物理 body 。使用这种方式我无法理解如何将角色移下楼梯。每次看起来都像是跳过楼梯。

那么在不同高度的地形上移动角色的正确方法是什么?

最佳答案

要在不同高度的地形上移动角色,您应该使用 collisions .要了解更多信息,请观看 Enhancements to SceneKit 中有关碰撞网格 的部分内容在 WWDC 2015(时间 17:30)并查看 Fox 2 中的代码游戏样本。

以下是如何使用碰撞的代码片段:

private func loadCharacter() {
let scene = SCNScene( named: "Art.scnassets/character/max.scn")!
model = scene.rootNode.childNode( withName: "Max_rootNode", recursively: true)
model.simdPosition = Character.modelOffset

characterNode = SCNNode()
characterNode.name = "character"
characterNode.simdPosition = Character.initialPosition

characterOrientation = SCNNode()
characterNode.addChildNode(characterOrientation)
characterOrientation.addChildNode(model)

let collider = model.childNode(withName: "collider", recursively: true)!
collider.physicsBody?.collisionBitMask = Int(([ .enemy, .trigger, .collectable ] as Bitmask).rawValue)

let (min, max) = model.boundingBox
let collisionCapsuleRadius = CGFloat(max.x - min.x) * CGFloat(0.4)
let collisionCapsuleHeight = CGFloat(max.y - min.y)

let collisionGeometry = SCNCapsule(capRadius: collisionCapsuleRadius, height: collisionCapsuleHeight)
characterCollisionShape = SCNPhysicsShape(geometry: collisionGeometry, options:[.collisionMargin: Character.collisionMargin])
collisionShapeOffsetFromModel = float3(0, Float(collisionCapsuleHeight) * 0.51, 0.0)
}

关于swift - SceneKit 如何在不同高度的地形上移动角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56820054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com