SCNAction.rotate 剪辑通过其他节点
SCNAction.rotate clips through other nodes
我有一个节点 (nodeCollection),它有一个 SCNNode 作为子节点,它是这样创建的:
let boxGeo = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0.0)
let node = SCNNode(geometry: boxGeo)
node.physicsBody = SCNPhysicsBody.staticBody()
我也在像这样创建 redbox 节点:
let redBox = SCNNode()
redBox.geometry = SCNBox(width: 0.5, height: 0.5, length: 0.5, chamferRadius: 0.1)
redBox.geometry?.firstMaterial?.diffuse.contents = UIColor.redColor()
redBox.position = SCNVector3Make(0, 1, -2)
redBox.physicsBody = SCNPhysicsBody.dynamicBody()
然后我运行下面的代码使节点旋转
let rotateAction = SCNAction.rotateByAngle(CGFloat(M_PI_2), aroundAxis: SCNVector3Make(0, 0, 1), duration: 0.15)
rotateAction.timingMode = .EaseInEaseOut
nodeCollection.runAction(rotateAction)
然后我将 nodeCollection 和 redBox 作为子节点添加到 SCNScene
但是正如您所看到的,当我在 nodeCollection 上执行旋转时,redBox 的物理特性不成立。 当红色盒子落在场景中时,它停止并停留在蓝色盒子上,物理原理起作用
我该如何解决这个问题,以便当蓝色框旋转时,它不会直接穿过红色框
尝试将蓝框的 physicsBody 类型更改为 kinematic
,静态物体不应该移动。
我有一个节点 (nodeCollection),它有一个 SCNNode 作为子节点,它是这样创建的:
let boxGeo = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0.0)
let node = SCNNode(geometry: boxGeo)
node.physicsBody = SCNPhysicsBody.staticBody()
我也在像这样创建 redbox 节点:
let redBox = SCNNode()
redBox.geometry = SCNBox(width: 0.5, height: 0.5, length: 0.5, chamferRadius: 0.1)
redBox.geometry?.firstMaterial?.diffuse.contents = UIColor.redColor()
redBox.position = SCNVector3Make(0, 1, -2)
redBox.physicsBody = SCNPhysicsBody.dynamicBody()
然后我运行下面的代码使节点旋转
let rotateAction = SCNAction.rotateByAngle(CGFloat(M_PI_2), aroundAxis: SCNVector3Make(0, 0, 1), duration: 0.15)
rotateAction.timingMode = .EaseInEaseOut
nodeCollection.runAction(rotateAction)
然后我将 nodeCollection 和 redBox 作为子节点添加到 SCNScene
但是正如您所看到的,当我在 nodeCollection 上执行旋转时,redBox 的物理特性不成立。 当红色盒子落在场景中时,它停止并停留在蓝色盒子上,物理原理起作用
我该如何解决这个问题,以便当蓝色框旋转时,它不会直接穿过红色框
尝试将蓝框的 physicsBody 类型更改为 kinematic
,静态物体不应该移动。