使用ARKit飞鲨

您可能听说过Sharknado,这是一部主题非常合理的电影-到处都是飞鲨。 在本文中,我们将尝试使用Xcode中的SceneKit编辑器来实现与ARKit类似的功能。 正如您将看到的,我们不需要大量代码即可完成从窗口传来的鲨鱼的效果,进行几次咬咬然后返回。

结果将类似于下面的视频。

实作

首先,创建一个名为ARAnimals的新的增强现实项目。

接下来,转到提供免费3D模型的网站TurboSquid.com,并选择这真棒的鲨鱼。 鲨鱼有几种格式,但是与Apple的SceneKit(我们用于在ARKit中渲染3D模型的版本)最兼容的是.dae格式或collada。 因此,将其解压缩,您将看到一个扩展名为.dae的文件,以及多个纹理图像。 将它们添加到Xcode项目中,选择.dae文件,将其重命名为sharks,然后在编辑器部分中按“转换为SceneKit场景文件格式”。 这会将collada文件转换为SceneKit文件。 导入后,您将看到以下结构。

在这里,我们不需要很多东西,例如图像平面和两个摄像头。 删除它们,创建一个父节点,然后将Armature和Parent_Sharkbody放在该父节点中,这将被称为shark。 产生的结构应类似于以下结构。

接下来,我们需要设置鲨鱼身体及其牙齿的纹理。 为此,选择Parent_Sharkbody节点,转到“材质”检查器,并将其“漫射”更改为图像Sharktexture002.png,该图像位于下载的3D模型的zip文件中。 这将使鲨鱼的身体有质感。 Parent_Sharkbody的子节点(称为Sharkjaw)包含鲨鱼的嘴巴。 同样,在“材质”检查器中,将“漫反射”更改为图像Sharkmouthtexture002.png。 这会给鲨鱼带来可怕的牙齿。

现在让我们设置鲨鱼的位置。 对于x和y,将0和z置于-5到-10之间。 这会使鲨鱼出现在您的面前。 由于鲨鱼已经在定向中,所以欧拉角钓鱼器的所有轴都应为0。 由于模型很大,因此将x,y和z的鲨鱼比例设置为0.5左右。

在运行应用程序之前,我们应该在ViewController中稍微修改Xcode生成的代码,以便加载场景。 这是在viewDidLoad方法中完成的,该方法将加载sharks.scn场景,而不是默认场景中的ship.scn。

现在,运行该应用程序,您应该会看到一条鲨鱼漂浮在您面前。

接下来,让鲨鱼来找我们攻击我们。 为此,我们将添加移动MoveBy动作,其中偏移量对于z轴为正。 由于鲨鱼已经处于负面位置,因此为了在我们面前看到它,正值会使其接近我们。 另外,当鲨鱼袭击我们时,我们会做出适当反应并让鲨鱼逃走。 为了做到这一点,我们将旋转鲨鱼并添加另一个MoveBy动作(现在为负值),这将产生鲨鱼要离开的效果。

可以像在“库”部分中添加任何其他元素,节点或粒子一样添加操作。

对于第一个移动动作,我们可以指定它在1秒钟后开始,持续5秒钟,并且其偏移仅在z轴上更改10米。

现在,我们需要使用RotateByEuler动作来旋转鲨鱼。

为了使鲨鱼转身,我们需要将其在y轴上旋转-180度。 可以在场景的第7秒完成此操作,此操作将持续一秒钟。

最后,我们需要采取相反的行动,将鲨鱼带回我们的面前,但现在又将其向后转。

运行该应用程序,您将看到鲨鱼降临。 到达后,等待一秒钟,旋转并离开。

为了使它更加有趣,请复制几次鲨鱼节点,然后更改x,y和z的值以及移动动作的持续时间和偏移量。 这将使场景更加恐怖,有许多鲨鱼向您袭来。 此外,当鲨鱼来到您的身上时,您可以添加一些粒子效果,例如可能意味着流血的红点(当然是鲨鱼的血液)。

如您所见,我们已经用最少的代码做到了这一点。 SceneKit编辑器非常强大,您无需编写代码即可完成许多有用的操作。 这个小项目的源代码可以在这里找到。