
上からバサバサーっと紙吹雪を落とすiPhoneアプリのサンプルコードを描いてみます。
import UIKit
import SceneKit
class ViewController: UIViewController, SCNSceneRendererDelegate {
weak var sceneView : SCNView?
var start = false
override func viewDidLoad() {
super.viewDidLoad()
setupScene()
createCamera()
}
func setupScene() {
let sv = SCNView(frame:view.bounds)
sv.scene = SCNScene()
sv.backgroundColor = UIColor(white: 0.2, alpha: 1)
sv.delegate = self
sv.autoenablesDefaultLighting = true
self.view.addSubview(sv)
self.sceneView = sv
}
func createCamera() {
let camera = SCNNode()
camera.camera = SCNCamera()
camera.position = SCNVector3(x: 0, y: 0, z: 40)
self.sceneView?.scene?.rootNode.addChildNode(camera)
}
func renderer(aRenderer: SCNSceneRenderer, updateAtTime time: NSTimeInterval) {
if !self.start { return }
let papaer = SCNBox(width: 1, height: 1.618, length: 0.01, chamferRadius: 0)
let hue = CGFloat(arc4random() % 20) / 20.0
papaer.firstMaterial?.diffuse.contents = UIColor(hue: hue, saturation: 0.4, brightness: 1, alpha: 1)
let paperNode = SCNNode(geometry: papaer)
let x = 10 – Float(arc4random() % 20)
let z = 5 – Float(arc4random() % 10)
paperNode.position = SCNVector3(x: x, y: 20, z: z);
paperNode.physicsBody = SCNPhysicsBody.dynamicBody()
let w = Float(arc4random() % 100)
paperNode.physicsBody?.applyTorque(SCNVector4Make(0.1, 1, 0, w), impulse: false)
self.sceneView?.scene?.rootNode.addChildNode(paperNode)
paperNode.runAction(SCNAction.waitForDuration(3.0), completionHandler: { () -> Void in
paperNode.removeFromParentNode()
})
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
self.start = true
self.sceneView?.playing = true
}
}