基于ARkit和SceneKit检测相机位置和设置2个物体碰撞的事件

physics body物理形体

physics shapes物理形状

获取相机中心

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的代理事件不同 它还要多设置categoryBitMask、contactTestBitMask属性的id 用于标志2个物体是否会发生碰撞
代理设置

<SCNPhysicsContactDelegate>

_jpARSCNView.scene.physicsWorld.contactDelegate = self;

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

// 这里是自己独立开一条线程出来
— (void)physicsWorld:(SCNPhysicsWorld *)world didBeginContact:(SCNPhysicsContact *)contact ;

代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容