基于SceneKit的3D模型触碰事件

流程如下:

1.获取到手指在屏幕的位置
2.然后转换到SCNView上
3.然后返回与手指点击方向的所有3D物体

主要代码如下
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    // 获取到手势的对象
    UITouch *touch = [touches allObjects].firstObject;
    
    // 手势在SCNView中的位置
    CGPoint touchPoint = [touch locationInView:self.jpARSCNView];
    
    //该方法会返回一个SCNHitTestResult数组,这个数组中每个元素的node都包含了指定的点(CGPoint)
    NSArray *hitResults = [self.jpARSCNView hitTest:touchPoint options:nil];
    
    if (hitResults.count > 0) {
        
        SCNHitTestResult * hit = [hitResults firstObject];
        
        SCNNode *node = hit.node;

        if (node.geometry == self.jpBox) {
            NSLog(@"点击了箱子");
            [self removeBox];
            [self addBox];
            
        }
        
    }

}
设置物理仿真代码如下
SCNBox * box = [SCNBox boxWithWidth:0.18 height:0.18 length:0.18 chamferRadius:0];
        
        self.geometry = box;
        
        SCNPhysicsShape * shape = [SCNPhysicsShape shapeWithGeometry:box options:nil];
        
        self.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeDynamic shape:shape];
        
        [self.physicsBody setAffectedByGravity:NO];
        
        self.physicsBody.categoryBitMask = 1;
        self.physicsBody.contactTestBitMask = 2;

代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 16,523评论 4 61
  • 看一会儿综艺,眯一会儿觉,刷一会儿微信,没有主线的折腾,只是在陪伴你。陪伴,不只是看着你奋笔疾书的背影,更感知你山...
    绚烂的孤单阅读 244评论 0 0
  • 第七章 复用类 当创建一个子类的对象的时候,该对象包含一个父类的子对象 举例: 如果子类继承的父类只有含参构造器,...
    Cloverss阅读 242评论 0 0
  • 一年时间又长又短。我想认真地想想自己这一年做了什么,却发现说不出。是的,日子就是这样平淡无奇地就结束了,那些想说却...
    果二阅读 793评论 4 1
  • 译文:定义计算:结构和语法公式任何SMOCPro定义的计算都必须遵循规定的语法。例如:考虑一个计算用来计算两个输入...
    橡果阅读 761评论 0 0

友情链接更多精彩内容