Unity ARKit的基本使用

首先去官网下载插件: https://www.assetstore.unity3d.com/en/#!/content/92515
或者这个网站【更新比官网快】 https://bitbucket.org/Unity-Technologies/unity-arkit-plugin

ARKit至少需要以下三个类别。

UnityEngine.XR.iOS.UnityARVideo
通过CommandBuffer将iOS设备的摄像头图像绘制到Unity的Camera中的类。将AddComponent添加到相机并使用它。请将YUVMaterial设置为 ClearMaterial属性。
此外,如果SkyBox等出现在相机上,相机的图像将被隐藏,因此您需要将相机的清除标志设置为仅适用于深度。

UnityARCameraNearFar
在Unity镜头剪切面的近/远类适当设置。将它添加到主相机并使用它。

UnityARCameraManager
除了使摄像机的运动与终端的运动同步以外,还可以设置多个项目的类别。将AddComponent添加到任意的GameObject中,使用相机的引用并使用它。


12.png

在这种状态下,如果在执行过程中检查MainCamera的位置和Debug.Log等位置,可以看到MainCamera的位置与摄像机的
运动同步移动。

UnityARSessionNativeInterface

UnityARSessionNativeInterface也是一个重要的类。
顾名思义,它有一个与本地ARKit桥接的作用,
可以接收后面描述的检测结果的获取作为这个类的代表。

接收ARKit检测到的特征点:

可以使用名为
UnityARSessionNativeInterface.ARFrameUpdatedEvent的
委托方法接收ARKit检测到的特征点的更新。

public void Start()
{
UnityARSessionNativeInterface.ARFrameUpdatedEvent + = ARFrameUpdated;
}
public void ARFrameUpdated(UnityAR Camera camera)
{
向量3 [] pointCloud = camera.pointCloudData;
}

UnityARCamera具有pointCloudData属性,
特征点的位置以Vector3的数组存储。

在Unity ARKit插件的示例中,相应的处理在名为
PointCloudParticleExample的类中实现。

接收ARKit检测到的平面信息

ARKit的检测平面信息是
YuenuaitiyARSessionNativeInterface.ARAnchorAddedEvent
YuenuaitiyARSessionNativeInterface.ARAnchorUpdatedEvent
YuenuaitiyARSessionNativeInterface.ARAnchorRemovedEvent
可以接收三个所谓的委托方法。

public void Start()
{
UnityARSessionNativeInterface.ARAnchorAddedEvent + = AddAnchor;
UnityARSessionNativeInterface.ARAnchorUpdatedEvent + = UpdateAnchor;
UnityARSessionNativeInterface.ARAnchorRemovedEvent + = RemoveAnchor;
}
public void AddAnchor(ARPlane Anchor arPlaneAnchor)
{
Debug.Log();
}
公共无效RemoveAnchor(ARPlane锚arPlaneAnchor)
{
Debug.Log();
}
public void UpdateAnchor(ARPlaneAnchor arPlaneAnchor)
{
Debug.Log();
}

平面信息存储在ARPlane Anchor结构中。

为了实现计划信息游戏物体,
在存储必要的信息,ARPlaneAnchorGameObject使用,
受到游戏物体和如下ARPlaneAnchor它有一套。

targetGameObject.name = arPlaneAnchor.identifier;
ARPlaneAnchorGameObject arpag = new ARPlaneAnchorGameObject();
arpag.planeAnchor = arPlaneAnchor;
arpag.gameObject = UpdatePlaneWithAnchorTransform(targetGameObject,arPlaneAnchor);

另外,由于ARPlaneAnchor与 PointCloud 不同,它的连续性
如下更新。

UpdatePlaneWithAnchorTransform(arpag.gameobject,arPlaneAnchor);

在Unity ARKit插件的示例中,相应的处理在名为
UnityARAnchorManager的类中实现。

UnityARAnchorManager在,UnityARUtility已成为实施有地板到一个预制,如果是在一个单一的预制没问题,是顺利的利用。

根据现实显示影子

为了显示阴影,需要以下三个步骤。

将UnityARCameraManager的EnableLightEstimation设置为true
在统一DirectionalLight的创建,UnityARAmbient到AddComponent的
由于shadowPlaneMaterial是作为仅显示阴影的素材准备的,请将其设置为floor等。

在Unity编辑器上进行调试

在Unity ARKit插件中有一个名为UnityARKitRemote的场景文件。
通过在iPhone真机上移动场景,您可以像Unity Remote一样在Unity Editor上操作ARKit。

程序如下。

1 ARKitRemoteConnection装配式放置在现场的
2统一编辑器中的运行运行
在3 iOS的终端UnityARKitRemote打开的场景的含有应用程序
4统一控制台的,连接的播放机,诸如从该选择的“iPhone”
“开始在5统一游戏窗口远程ARKit会话“按钮出现,所以点击

借助此功能,您可以使用Unity Editor在iOS设备上接收相机信息和ARKit信息。
有时视频和识别结果会不断跳过,延迟时间相当长,但我认为这对于需要时间构建的项目会很有用。

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

推荐阅读更多精彩内容

  • 可以看随时查Unity-ARKit-Plugin的项目进展:https://bitbucket.org/Unity...
    黑亚当阅读 4,956评论 2 16
  • 111. [动画系统]如何将其他类型的动画转换成关键帧动画? 动画->点缓存->关键帧 112. [动画]Unit...
    胤醚貔貅阅读 13,170评论 3 89
  • 好久没失眠了,脑海里的情景一遍一遍的重演,湖边,湖边木栈道,安静的湖面,带着咸味的清香,水烟的晚霞,翠柳,青石板...
    我就是林夕阅读 204评论 0 0
  • 惠普成为2006至2007年最抢眼的公司之一。它不仅超过了戴尔,重上PC首席,而且还超过了IBM历史性地成为...
    尾巴妖阅读 169评论 0 0
  • 1. 2007年发生了两件大事: 陈浩掉井里了。 陈浩谈恋爱了。 2. 苏安琳对陈浩死缠烂打了两个月后的某一天,陈...
    天蝎三儿阅读 380评论 4 3