Unity跨平台技术分享Unity

Unity ARKit的基本使用

2017-11-13  本文已影响327人  光明程辉

首先去官网下载插件: 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信息。
有时视频和识别结果会不断跳过,延迟时间相当长,但我认为这对于需要时间构建的项目会很有用。

上一篇下一篇

猜你喜欢

热点阅读