苹果ARKit开发入门系列-Unity ARKit Plugin简介
对iOS原生开发感兴趣的朋友当然会首选SceneKit或是Metal,但ARKit对第三方开发工具的支持显然也很受欢迎,颇为流行的Unity和Unreal引擎就在此列。
在这一部分内容中,我们将了解如何使用ARKit和Unity开发简单的AR应用。
当然,首先需要了解Unity ARKit Plugin这个插件。
开始前的准备
首先要准备的当然是各种开发工具和环境了,因为目前ARKit还没有转正,所以只能用测试版的开发和测试环境:
Xcode 9 beta 6
iOS 11 beta 9
Unity 5.6.2f1
需要注意的是,考虑到兼容性和稳定性问题,这里我们选择的是Unity 5.6.2f1版本,而非最新的Unity 2017.1或Unity 2017.2 beta。
打开Unity,创建一个新的Unity项目,将其命名为ARTest。
接下来当然是要下载Unity ARKit Plugin了。
有两种选择,一种是直接在Asset Store里面搜索Unity ARKit Plugin下载,链接是:
https://www.assetstore.unity3d.com/en/#!/content/92515
还有一种选择是从bitbucket上使用SourceTree cloned最新的版本,链接如下:
https://bitbucket.org/Unity-Technologies/unity-arkit-plugin
这里个人使用了第一种方式,也即从Asset Store上下载并导入Unity ARKit Plugin。
对Unity ARKit Plugin的简单介绍
1.什么是Unity ARKit Plugin
Unity ARKit Plugin中可以让我们在Unity项目中轻松使用几乎所有的ARKit SDK功能。这个插件向Unity开发者提供了ARKit SDK中的多个主要功能,如世界追踪,渲染相机的视频捕捉,平面检测及更新,特征点云提取,光线评估和hit 测试等等。
该插件是开源的,并满足MIT license。
2. ARKit Plugin中的示例场景
在Unity的Asset视图中可以看到,ARKit插件提供了6个基本的示例场景了,分别是UnityARBallz,UnityARKitScene,UnityAROcclusion,UnityARShadows,UnityParticlePainter和UnityARKitRemote。
大家可以自行在手机上编译测试这些示例场景。
其中最重要的示例场景当然是UnityARKitScene,其中展示了ARKit所有的基本特性。
3.ARKit Plugin中的重要文件
这里简单介绍一下插件中的几个非常重要的文件。
1)ARSessionNative.mm
路径:”/Assets/Plugins/iOS/UnityARKit/NativeInterface/ARSessionNative.mm”
简介:该文件是用于跟ARKit SDK实际交互的Objective-C代码。
2)UnityARSessionNativeInterface.cs
路径:”/Assets/Plugins/iOS/UnityARKit/NativeInterface/UnityARSessionNativeInterface.cs"
简介:该文件提供了到ARKit的脚本API,同时也提供了对于原生代码的解释说明。
其中包含了以下的API:
public void RunWithConfigAndOptions(ARKitWorldTackingSessionConfiguration config, UnityARSessionRunOption runOptions)
public void RunWithConfig(ARKitWorldTackingSessionConfiguration config)
public void Pause()
public List<ARHitTestResult> HitTest(ARPoint point, ARHitTestResultType types)
public ARTextureHandles GetARVideoTextureHandles()
public float GetARAmbientIntensity()
public int GetARTrackingQuality()
此外其中也包含了一些可以提供代理的事件:
public delegate void ARFrameUpdate(UnityARCamera camera)
public delegate void ARAnchorAdded(ARPlaneAnchor anchorData)
public delegate void ARAnchorUpdated(ARPlaneAnchor anchorData)
public delegate void ARAnchorRemoved(ARPlaneAnchor anchorData)
public delegate void ARSessionFailed(string error)
以及我们可以订阅的事件列表:
public static event ARFrameUpdate ARFrameUpdatedEvent;
public static event ARAnchorAdded ARAnchorAddedEvent;
public static event ARAnchorUpdated ARAnchorUpdatedEvent;
public static event ARAnchorRemoved ARAnchorRemovedEvent;
public static event ARAnchorAdded ARUserAnchorAddedEvent;
public static event ARAnchorUpdated ARUserAnchorUpdatedEvent;
public static event ARAnchorRemoved ARUserAnchorRemovedEvent;
public static event ARSessionCallback ARSessionInterruptedEvent;
public static event ARSessionCallback ARSessioninterruptionEndedEvent;
public static event ARSessionTrackingChanged ARSessionTrackingChangedEvent;
3)AR*.cs
路径:"/Assets/Plugins/iOS/UnityARKit/NativeInterface/AR*.cs"
简介:这些以AR开头的cs文件是和ARKit中所提供的数据结构相对应的API
4)UnityARAnchorManager.cs
路径:"/Assets/Plugins/iOS/UnityARKit/Utility/UnityARAnchorManager.cs"
简介:该文件用于管理ARKit中的anchor更新信息,并据此创建相对应的Unity游戏对象(查看GeneratePlanes.cs组件来了解如何使用)。
5)UnityARBuildPostprocessor.cs
路径:”/Assets/Plugins/iOS/UnityARKit/Editor/UnityARBuildPostprocessor.cs"
简介:该文件是编辑器脚本,用于在iOS编译时运行。
4.ARKit中的有用组件
1)UnityARCameraManager.cs
路径:"/Assets/Plugins/iOS/UnityARKit/UnityARCameraManager.cs"
简介:该组件应该被放置在场景的游戏对象上,代表想要通过ARKit来控制的摄像机。它会基于ARKit的更新来控制摄像机的位置和旋转角度,并提供投射矩阵。
该组件中还包含了用于初始化ARKit 进程的代码。
2)UnityARVideo.cs
路径:”/Assets/Plugins/iOS/UnityARKit/UnityARVideo.cs"
简介:该组件应该放置在摄像机上,以抓取用于渲染视频的纹理,并将其设置在用于backbuffer的材质上,同时还将设置用于完成blit的command buffer。关于什么是command buffer,请参考官方文档,这里就不再详细解释了(https://docs.unity3d.com/Manual/GraphicsCommandBuffers.html) 。
3)UnityARUserAnchorComponent.cs
路径:"/Assest/Plugins/iOS/UnityARKit/UnityARUserAnchorComponent.cs"
简介:该组件将基于其所依附的游戏对象的生命周期,从ARKit中添加和删除Anchor。
如何一步步设置Unity中的AR项目
在后续的实战示例中会具体讲解如何操作,这里先提醒大家,Unity ARKit Plugin中自带了一个TUTORIAL.txt文件,其中包含了详细的说明。
关于Unity ARKit Plugin的简单介绍到此结束,在后面的内容中,我们将具体介绍如何在项目中实际使用该插件。
未完待续