Hello, I'm trying to understand physics by placing objects but I have a positioning problem. In fact, I create a floor with static physics and then a static block as well. I position the two elements at position 0 but the block crosses the ground by half.
Why?
this is my playground
import SceneKit
import PlaygroundSupport
// create a scene view with an empty scene
var sceneView = SCNView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
var scene = SCNScene()
sceneView.scene = scene
// start a live preview of that view
PlaygroundPage.current.liveView = sceneView
// default lighting
sceneView.autoenablesDefaultLighting = true
sceneView.allowsCameraControl = true
sceneView.debugOptions = [.showPhysicsShapes]
// a camera
var cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(x: 0, y: 0, z: 3)
scene.rootNode.addChildNode(cameraNode)
// Make floor node
let floorNode = SCNNode()
let floor = SCNFloor()
floor.reflectivity = 0.25
floorNode.geometry = floor
floorNode.physicsBody = SCNPhysicsBody(type: .static, shape: nil)
scene.rootNode.addChildNode(floorNode)
// Add box
let cube = SCNNode(geometry: SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0))
cube.geometry?.firstMaterial?.diffuse.contents = UIColor.red
cube.position = SCNVector3(0, 0, 0)
cube.physicsBody = SCNPhysicsBody(type: .static, shape:SCNPhysicsShape(geometry: cube.geometry!, options: nil))
scene.rootNode.addChildNode(cube)
thanks !
SceneKit
RSS for tagCreate 3D games and add 3D content to apps using high-level scene descriptions using SceneKit.
Posts under SceneKit tag
84 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
Hello
I try to understand the movement of a character with physics. To do this, I imported max into the fox2 file provided by Apple. I apply a .static physics to it and I have a floor with static physics and static blocks to test collisions everything works very well except that Max is above the ground.
He doesn't touch my ground. I couldn't understand why until I had the physicsShapes displayed in the debug options. With that I see that if max does not touch the ground it is because the automatic shape is below Max and this shape touches the ground.
So I would like to know why the shape is shifted downwards and how to correct this problem?
I did tests and the problem seems to come from physicsBody?.mass. If I remove the mass, the shape is correct but when I move my character it crosses the walls and when I put it on it is well stopped by the static boxes...
Someone with an idea of how to correct this problem?
This is my simplify code
import SceneKit
import PlaygroundSupport
// create a scene view with an empty scene
var sceneView = SCNView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
var scene = SCNScene()
sceneView.scene = scene
// start a live preview of that view
PlaygroundPage.current.liveView = sceneView
// default lighting
sceneView.autoenablesDefaultLighting = true
sceneView.allowsCameraControl = true
sceneView.debugOptions = [.showPhysicsShapes]
// a camera
var cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(x: 0, y: 0, z: 3)
scene.rootNode.addChildNode(cameraNode)
// Make floor node
let floorNode = SCNNode()
let floor = SCNFloor()
floor.reflectivity = 0.25
floorNode.geometry = floor
floorNode.physicsBody = SCNPhysicsBody(type: .static, shape: nil)
scene.rootNode.addChildNode(floorNode)
//add character
guard let fichier = SCNScene(named: "max.scn") else { fatalError("failed to load Max.scn") }
guard let character = fichier.rootNode.childNode(withName: "Max_rootNode", recursively: true) else { fatalError("Failed to find Max_rootNode") }
scene.rootNode.addChildNode(character)
character.position = SCNVector3(0, 0, 0)
character.physicsBody = SCNPhysicsBody(type: .static, shape: nil)
character.physicsBody?.mass = 5
Thank you!
I’m wondering if it’s possible to use SceneKit or GamePlayKit to handle physics etc and having SwiftUI to create the 3D content?
I am creating an AR app that uses ARKit and SceneKit.
Will visionOS support SceneKit AR applications, or will I have to rewrite my app using RealityKit?
Thanks for answering my question.
: - )