基于ARkit和SceneKit檢測相機(jī)位置和設(shè)置2個(gè)物體碰撞的事件

physics body物理形體

physics shapes物理形狀

獲取相機(jī)中心

ARFrame * frame = self.jpARSCNView.session.currentFrame;

SCNMatrix4 mat = SCNMatrix4FromMat4(frame.camera.transform);
        
SCNVector3 dir = SCNVector3Make(-1* mat.m31, -1* mat.m32 , -1* mat.m33);
        
SCNVector3 pos = SCNVector3Make(mat.m41,mat.m42 ,mat.m43);

bulletsNode.position = pos;

SCNVector3 bulletDirection = dir;

[bulletsNode.physicsBody applyForce:bulletDirection impulse:YES];

[self.jpARSCNView.scene.rootNode addChildNode:bulletsNode];

檢測碰撞事件

和以往iOS的代理事件不同 它還要多設(shè)置categoryBitMask、contactTestBitMask屬性的id 用于標(biāo)志2個(gè)物體是否會(huì)發(fā)生碰撞
代理設(shè)置

<SCNPhysicsContactDelegate>

_jpARSCNView.scene.physicsWorld.contactDelegate = self;

self.physicsBody.categoryBitMask = 2;
self.physicsBody.contactTestBitMask = 1;

// 這里是自己獨(dú)立開一條線程出來
— (void)physicsWorld:(SCNPhysicsWorld *)world didBeginContact:(SCNPhysicsContact *)contact ;

代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容