Swift SceneKit 3D游戏工具包: 常用屬性

一 類及节点類型

SCNView // SceneKit 的3D视图
SCNSceneRenderer
SCNScene // 场景
SCNNode // 节点
SCNLight // 灯光
SCNLightTypeAmbient // 环境光
SCNLightTypeOmni // 点光
SCNLightTypeDirectional // 平行光
SNCLightTypeSpot // 聚焦光
SCNCamera // 摄像机
SCNMaterial // 材質
SCNAudioSource // 声音
SCNAction // 动作： 主要改变节点動畫
SCNTransaction // 改变节点屬性的事件
SCNGeometry // 内置3维几何体
SCNText // 文字
SCNShape // 二维平面: 可以拉伸成三维
SCNFloor // 地面
SCNBox // 六面体
SCNCapsule // 圆角圆柱
SCNCone // 圆锥
SCNCylinder// 圆柱
SCNPlane // 平面
SCNPyramid // 锥体
SCNSphere // 面球体
SCNGeosphere// 真球体
SCNTorus // 圆角圆环
SCNTube // 圆环
SCNParticleSystem // 粒子系统
SCNPhysicsField // 物理场
SCNPhysicsBody // 物理体
SCNPhysicsShape // 物理边界(用于碰撞检测) SCNGeometry類型

二 scnView视图屬性

scnView.showsStatistics = true // 1.显示统计数据
scnView.allowsCameraControl = true // 2.打開相机控制
scnView.autoenablesDefaultLighting = true // 3.自动启用默认光源
scnView.backgroundColor = UIColor.black // 背景色
scnView.antialiasingMode = SCNAntialiasingMode.multisampling4X // 抗锯齿

三 SCNScene场景屬性

scene.background.contents = ["right.jpg", "left.jpg", "top.jpg", "bottom.jpg", "front.jpg", "back.jpg"] // 天空盒子
stageScene.physicsWorld.contactDelegate = self // 物理世界反馈主体
scene.rootNode.childNode(withName: "floor", recursively: false) // 查找场景节点
scene.rootNode.addChildNode(节点名) // 添加节点
scene.removeFromParentNode // 移除所有节点

四 SCNNode节点屬性

node.removeFromParentNode() // 刪除节点
node.position = SCNVector3(x: 0, y: 10, z: 10) // 位置
node.physicsBody = PhysicsBody() // 物理体

五 PhysicsBody物理体

// Static(静态的):不可动, 不受力和碰撞影响;
// Dynamic(动态的):可以被力和碰撞影响;
// Kinematic(运动学的):可以移动, 不受力和碰撞影响;
let newPhysicsBody = SCNPhysicsBody(
//物理類型: .static/.dynamic/.kinematic
?type: .dynamic,
?// 物理形状
? ? ?shape: SCNPhysicsShape(geometry: SCNCylinder(radius: 半径[對应scn模型里], height: 高度[對应scn模型里]), options: nil )
)

newPhysicsBody.mass = 1 // 重量
newPhysicsBody.restitution = 0.5 // 反弹系数
coinPhysicsBody.isAffectedByGravity = true // 重力
elasticity // 弹力：設置物体发生碰撞时的弹力，比如当物体碰撞时弹开的高度、角度的大小，物体的韧性等。
friction // 摩擦力：設置物体滑动时的摩擦力。
density // 密度：設置物体密度，密度越大加速度越大。
resistance // 阻力：設置物体滑动时的阻力，與`friction`不同的是，它只作用于线性滑动时。
angularResistance // 角度阻力:物体进行旋转运动时的阻力設置。
allowsRotation // 允许旋转: 该屬性并不是模拟现实中的一些行爲屬性，它是物体是否可以旋转的开关屬性。
// 碰撞联系
newPhysicsBody.categoryBitMask = 2 // 類别掩码，唯一，只能爲2的次幂
newPhysicsBody.collisionBitMask = 6 // 碰撞掩码，可以跟那些物体进行碰撞(所有類别掩码相加)
newPhysicsBody.contactTestBitMask = 6 // 可以跟哪些物体进行碰撞检测

六 力

1. forces 三向力: 推力 /左转 /右转

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

2. torque 力矩

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

七 加速器

CoreMotion