
258
|
第
8
章
然后创建一个身体,并将形状提供给它:
let critterPhysicsBody =
SCNPhysicsBody(type: SCNPhysicsBodyType.dynamic,
shape: critterPhysicsShape)
最后,将身体添加到节点。当节点拥有了身体之后,它就会受到碰撞和重力等外力
的作用:
critterNode?.physicsBody = critterPhysicsBody
讨论
当我们创建一个物理形状时,我们需要一个几何对象,
Scene Kit
用这个几何对象
来生成形状。不同的几何对象产生不同的形状。注意
Scene Kit
会为了优化物理引
擎的计算性能而对物体的碰撞形状进行简化。因此碰撞形状和我们在屏幕上看到的
几何形状略有不同。
当我们创建
body
时,可以指定它是静态、动态还是运动学的。动态的身体受重力
的影响,并且能够在场景中移动。静态的物体位置是固定的,并且当有物体和它发
生碰撞时,它不会受碰撞的影响。运动学物体介于两者之间:它不受物理体和碰撞
的影响,但它能够移动(同时节点的位置能够改变)并且在运动时会导致碰撞发生。
8.14
反射
问题
我们想在场景中创建一个反射地板。
解决方案
我们可以使用
SCNFloor
对象:
let floor = SCNFloor()
let floorNode = SCNNode(geometry: floor)
floorNode.position = SCNVector3(x: 0, y: -5, ...