[SceneKit专题]2.physics物理效果

96
作者 史前图腾
2017.04.02 23:04* 字数 546

说明

本系列文章是对<3D iOS Games by Tutorials>一书的学习记录和部分翻译,此书对应的代码地址:https://github.com/XanderXu/3D-iOS-Games-by-Tutorials-code
系列文章目录:http://www.jianshu.com/p/fd32aa0d896a

physics body物理形体

  • Static(静态的):形体不移动:当其他物体能够与该类型碰撞时,该类型自身不受任何力和碰撞的影响,该类型用于墙壁和大质量不可移动的岩石;
  • Dynamic(动态的):可以被力和碰撞影响,用于可移动的桌椅,杯子;
  • Kinematic(运动学的):类型于静态形体,不受力和碰撞影响.但你可以移动该类型,移动过程中与其他动态形体碰撞.用于移动的电梯或可以开关的门;

physics shapes物理形状

物理形状决定了物理引擎在处理碰撞时的形状检测.
为了让物理模拟器运行的更快,最好将物理形状设定为简单的方形,球形或其他系统提供的原始形状,大略匹配节点外观就行了

QQ20170402-223133@2x.png
QQ20170402-223133@2x.png

如果想要添加更多细节到物理形状,可以手动创建SCNPhysicsShape并传入,否则可使用nil

geometryNode.physicsBody = SCNPhysicsBody(type: .Dynamic, shape: nil)

Scene Kit中的scene默认打开了重力,当设定过动态形体后,物体就会受到重力影响下落

forces力

力使用3维向量SCNVector3表示,使用applyForce(_: atPosition: impluse:)方法来添加一个力,并指定位置.一个力可以同时影响线速度和角速度.
impluse脉冲状只作用一次,比如踢一个球,非脉冲状的则可以持续作用.
Position位置可以影响力的作用效果

QQ20170402-225158@2x.png
QQ20170402-225158@2x.png

torque力矩

力矩使用4维向量SCNVector4表示,使用applyTorque(_: impulse:)来添加一个力矩,力矩只影响角动量.
x-,y-,z-指定旋转轴,w-指定旋转角度也就是大小值
Scene Kit使用国际单位制,因此质量单位是kg千克,力的单位是N牛,脉冲单位是N-s牛秒,力矩单位是N-m牛米.

SceneKit