SceneKit 物理碰撞

前言

SceneKit使用SCNPhysicsWorld來管理這種物理模擬饲鄙,讓物體的碰撞、連接圆雁、掉落等具有真實感忍级。
SCNPhysicsBody:想要一個SCNNode參與到物理模擬中,只需要給node.physicsBody賦值一個合適的值,SCNPhysicsBody有三種類型

  • dynamic: 動態(tài)的物體伪朽,受力的影響(applyForce)轴咱。
  • static: 靜態(tài)的物體,不受力的影響,且不能移動驱负。適合場景中地面嗦玖、墻體等。
  • kinematic: 不受碰撞跃脊、力影響宇挫,在空間變換中,會對dynamic的物體產(chǎn)生力的影響酪术。
實踐
 override func viewDidLoad() {
        super.viewDidLoad() 
        let sceneView = SCNView(frame: view.bounds)
        sceneView.backgroundColor = UIColor.black
        sceneView.scene = SCNScene()
        sceneView.allowsCameraControl = true
        sceneView.showsStatistics = true
        //設(shè)置運動速度
        sceneView.scene?.physicsWorld.speed = 5
        view.addSubview(sceneView)
    
        //添加照相機(jī)
        let cameraNode = SCNNode()
        cameraNode.camera = SCNCamera()
        cameraNode.position = SCNVector3(0, 10, 20)
        // 因為要顯示地板 多以要傾斜一點角度(繞X軸旋轉(zhuǎn)器瘪,繞哪個軸旋轉(zhuǎn)哪個軸的值就為1)
        cameraNode.rotation = SCNVector4(1, 0, 0, -Double.pi * 0.1)
        cameraNode.camera?.automaticallyAdjustsZRange = true
        sceneView.scene?.rootNode.addChildNode(cameraNode)
        //添加地板
        let floorNode = SCNNode()
        let floor = SCNFloor()
        floor.firstMaterial?.diffuse.contents = "floor.jpg"
        floorNode.geometry = floor
        // 如果沒有這一行代碼翠储,柱狀物體會直接下沉到不見為止
        floorNode.physicsBody = SCNPhysicsBody.static()
        sceneView.scene?.rootNode.addChildNode(floorNode)
        
        // 添加動態(tài)事物
        for _ in 0..<10 {
            let box = SCNBox(width: 0.5, height: 3, length: 1, chamferRadius: 0)
            box.firstMaterial?.diffuse.contents = "1.PNG"
            let node = SCNNode(geometry: box)
            node.physicsBody = SCNPhysicsBody.dynamic()
            node.position = SCNVector3(Float(arc4random_uniform(5)) - 2, 1.5, Float(arc4random_uniform(5)))
            sceneView.scene?.rootNode.addChildNode(node)
        }
        // 繼續(xù)添加動態(tài)事物
        for _ in 0..<5 {
            let node = SCNNode()
            let sphere = SCNSphere(radius: 1)
            sphere.firstMaterial?.diffuse.contents = "sun.jpg"
            node.geometry = sphere
            node.physicsBody = SCNPhysicsBody.dynamic()
            node.position = SCNVector3(Float(arc4random_uniform(5)) - 2, 10, Float(arc4random_uniform(5)))
            sceneView.scene?.rootNode.addChildNode(node)
        }
}
  • 效果圖


    碰撞.gif
碰撞.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市橡疼,隨后出現(xiàn)的幾起案子援所,更是在濱河造成了極大的恐慌,老刑警劉巖欣除,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件住拭,死亡現(xiàn)場離奇詭異,居然都是意外死亡历帚,警方通過查閱死者的電腦和手機(jī)滔岳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挽牢,“玉大人谱煤,你說我怎么就攤上這事∏莅危” “怎么了刘离?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長睹栖。 經(jīng)常有香客問我硫惕,道長,這世上最難降的妖魔是什么磨淌? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任疲憋,我火速辦了婚禮凿渊,結(jié)果婚禮上梁只,老公的妹妹穿的比我還像新娘。我一直安慰自己埃脏,他們只是感情好搪锣,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著彩掐,像睡著了一般构舟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堵幽,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天狗超,我揣著相機(jī)與錄音,去河邊找鬼朴下。 笑死努咐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的殴胧。 我是一名探鬼主播渗稍,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼佩迟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了竿屹?” 一聲冷哼從身側(cè)響起报强,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拱燃,沒想到半個月后秉溉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡碗誉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年坚嗜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诗充。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡苍蔬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝴蜓,到底是詐尸還是另有隱情碟绑,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布茎匠,位于F島的核電站格仲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扰才,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一撑教、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侮东,春花似錦、人聲如沸豹芯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铁蹈。三九已至宽闲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間握牧,已是汗流浹背容诬。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留沿腰,地道東北人览徒。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像矫俺,于是被迫代替她去往敵國和親吱殉。 傳聞我的和親對象是個殘疾皇子掸冤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容