gpt4 book ai didi

ios - 如何将重力引导到场景包中 3D 空间中的特定点?

转载 作者:行者123 更新时间:2023-12-01 16:02:51 24 4
gpt4 key购买 nike

使用 SceneKit,我知道如何使用 SCNphysicsField 创建线性重力。我的问题是是否可以指定指向 3D 空间中特定点的方向(例如指向球体的中心)。

这是我尝试过的 radialGravity() :

let gravityNode=SCNNode()
let gravity=SCNPhysicsField.radialGravity()
gravity.scope=SCNPhysicsFieldScope.insideExtent
gravity.strength=9.8
gravityNode.physicsField=gravity
gravityNode.position=SCNVector3Make(0, 0, 0)
homeScene.rootNode.addChildNode(gravityNode)

最佳答案

使用SCNPhysicsField.radialGravity() .您还需要将物理实体放在您想要受影响的每个对象上(可能还有一个类别位掩码)。

这是一个可以在 macOS Playground 中运行的示例:

//: Playground - 名词:人们可以玩耍的地方

进口 cocoa
导入场景套件
导入 SpriteKit
导入游乐场支持

让场景 = SCNScene()

让重力节点 = SCNNode()
让radialGravityField = SCNPhysicsField.radialGravity()
重力节点.physicsField = 径向重力场
GravityNode.position = SCNVector3Make(0, 10, 0)
径向重力场. 强度 = 9.8

//注释掉下一行以禁用径向重力场
场景.rootNode.addChildNode(gravityNode)
//取消注释下一行以禁用默认重力
//scene.physicsWorld.gravity = SCNVector3Make(0, 0, 0)

让 boxGeometry = SCNBox(宽度:1,高度:1,长度:1,倒角半径:0)
boxGeometry.firstMaterial?.diffuse.contents = SKColor.yellow
让形状= SCNPhysicsShape(几何:boxGeometry,选项:无)

让 boxNode1 = SCNNode(几何:boxGeometry)
boxNode1.position = SCNVector3Make(0, 6, 0)
场景.rootNode.addChildNode(boxNode1)
让 body1 = SCNPhysicsBody(类型:.dynamic,形状:形状)
boxNode1.physicsBody = body1

让 boxNode2 = SCNNode(几何:boxGeometry)
boxNode2.position = SCNVector3Make(0, 14, 0)
场景.rootNode.addChildNode(boxNode2)
让 body2 = SCNPhysicsBody(类型:.dynamic,形状:形状)
boxNode2.physicsBody = body2

让pyramidNode = SCNNode(几何:SCNPyramid(宽度:1,高度:1,长度:1))
金字塔节点位置 = SCNVector3Make(2, 10, -2)
pyramidNode.physicsBody = SCNPhysicsBody(类型:.dynamic,形状:SCNPhysicsShape(几何:pyramidNode.geometry!))
场景.rootNode.addChildNode(pyramidNode)

//在地面放置一些东西来欺骗自动摄像头
让sphereNode = SCNNode(几何:SCNSphere(半径:0.2))
sphereNode.position = SCNVector3Make(0, -1, 0)
场景.rootNode.addChildNode(sphereNode)

让地板 = SCNFloor()
让 floorNode = SCNNode(几何:地板)
floorNode.physicsBody = SCNPhysicsBody(类型:.static,形状:SCNPhysicsShape(几何:地板,选项:无))
场景.rootNode.addChildNode(floorNode)

let sceneView = SCNView(frame: CGRect(x: 0, y: 0, width: 600, height: 400))
场景 View .allowsCameraControl = true
场景 View .autoenablesDefaultLighting = true
场景 View .backgroundColor = SKColor.lightGray
场景 View .showsStatistics = true
sceneView.debugOptions = [.showPhysicsFields, .showPhysicsShapes]
PlaygroundPage.current.liveView = 场景 View
sceneView.scene = 场景

关于ios - 如何将重力引导到场景包中 3D 空间中的特定点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41419105/

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