我们现在做一个简单的案例,所谓星球家族联盟,我们这里通过切换空间中球型体改变不同的星球图片,把这一家子聚到一起碰个面.
我已经找了星球图片,当然你的图片越多,你的星球联盟家族越富有.
把这几张图片拖入到您的项目中.
首先呢,我们先创建星球家族数组,把这个星球放到一起
let plantFamily = ["地球.png","木星.png","金星.png","火星.png"]
同时,需要定义,我们的索引值,下面手势code中会使用到
index = 1
同创建立方体一样,创建我们的球型模型
我们继续,创建场景
let scene = SCNScene()
接下来,创建几个模型
let sphere = SCNSphere(radius:0.1)
创建渲染器
let material = SCNMaterial()
给我的球型模型加上衣服
material.diffuse.contents = UIImage(named:"地球.png")
sphere.materials = [material]
好了,
接下来我们继续创建球型节点
let sphereNode = SCNNode(geometry:sphere)
我们设置球型节点的位置
sphereNode.postition = SCNVector3(0,0,-0.5)
就在您的正前方50公分处
我们在把节点添加到根节点上面
scene.rootNode.addChildNode(sphereNode)
把场景添加到视图上
sceneView.scene = scene
到这里呢,我们已经完成了一半了,花费几分钟,很快就把地球给创建好了,运行一下看看,我们的成果,还蛮不错吧.
接下来,我们要完成另一半的任务了
就是进行星球切换交互呢?
我们就简单制作吧
我们就在视图增加一个手势吧
讲到手势,大家开发很长时间了,使用手势都不会太陌生的.
ok,我们来创建注册手势!
let tapGes = UITapGestureRecognizer(target:self,action:#selector(tapped))
把手势添加到场景视图
self.sceneView.addGestureRecognizer(tapGes)
然后,创建我们的tapped方法
@objc func tapped(regcognizer:UIGestureRecognizer){
}
我们所有的切换功能要在tapped方法中实现了哦,
我们先获取场景视图吧.
let sceneV = regcognizer.view as! ARSCNView
获取单击位置的CGPoint点
let touchuLoaction = regcognizer.location(in: sceneV)
我们在获取点击结果
let hitRes = scneneView.hitTest(touchLoaction,options:[:])
我们获取了hitRes结果后,我们首先要判断hitRes是否为空
if !hitResults.isEmpty{
}
如果不为空,才是我们接下来要做的,所以我们判断不是空数组的话,我们继续我们的code.
当我们的索引值与数组的个数相同的时候呢,首先我们判断,让它的索引值为0
if index == self. plantFamily.count{
index =0
}
我们在判断星球家族数组的第一项是否存在呢,
guard let hitRes = hitRes.first else{
return
}
获取节点
let node = hitRes.node
我们获取到节点后,我们就可以进行图片切换交互了
node.geometry?.firstMaterial?.diffuse.contents = UIImage(named: plantFamily[index])
我们的索引值+1
index += 1
ok,到这里,大功告成!!.
我们任务完成了.
是不是挺惊喜的,
一番努力后,
自己是不是对ARkit,
又有了进一层的了解.