Unity ARKit的基本使用

Unity ARKit的基本使用

    • 资源下载
    • 使用
      • ARKit至少需要以下三个类
      • UnityARSessionNativeInterface
        • 接收ARKit检测到的特征点
        • 接收ARKit检测到的平面信息
      • 根据现实显示影子
      • 在Unity编辑器上进行调试
    • 原文链接
    • 最新

资源下载

Bitbucket: https://bitbucket.org/Unity-Technologies/unity-arkit-plugin

使用

ARKit至少需要以下三个类

  1. UnityEngine.XR.iOS.UnityARVideo:通过CommandBuffer将iOS设备的摄像头图像绘制到Unity的Camera中的类。将AddComponent添加到相机并使用它。请将YUVMaterial设置为ClearMaterial属性。
    此外,如果SkyBox等出现在相机上,相机的图像将被隐藏,因此您需要将相机的清除标志设置为仅适用于深度。
  2. UnityARCameraNearFar:在Unity镜头剪切面的近/远类适当设置。将它添加到主相机并使用它。
  3. UnityARCameraManager:除了使摄像机的运动与终端的运动同步以外,还可以设置多个项目的类别。将AddComponent添加到任意的GameObject中,使用相机的引用并使用它。

UnityARSessionNativeInterface

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

接收ARKit检测到的特征点

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

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

UnityARCamera具有pointCloudData属性,特征点的位置以Vector3的数组存储。
在Unity ARKit插件的示例中,相应的处理在名为PointCloudParticleExample的类中实现。

接收ARKit检测到的平面信息

接收ARKit检测到的平面信息UnityARSessionNativeInterface.ARAnchorAddedEventUnityARSessionNativeInterface.ARAnchorUpdatedEventUnityARSessionNativeInterface.ARAnchorRemovedEvent可以接收三个所谓的委托方法。

public void Start()
{
UnityARSessionNativeInterface.ARAnchorAddedEvent + = AddAnchor;
UnityARSessionNativeInterface.ARAnchorUpdatedEvent + = UpdateAnchor;
UnityARSessionNativeInterface.ARAnchorRemovedEvent + = RemoveAnchor;
}
public void AddAnchor(ARPlane Anchor arPlaneAnchor)
{
	Debug.Log();
}
public void 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);

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

UpdatePlaneWithAnchorTransform(arpag.gameobject,arPlaneAnchor);

在Unity ARKit插件的示例中,相应的处理在名为
UnityARAnchorManager的类中实现。
UnityARAnchorManager在,UnityARUtility已成为实施有地板到一个预制,如果是在一个单一的预制没问题,是顺利的利用。

根据现实显示影子

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

  1. UnityARCameraManagerEnableLightEstimation设置为true
  2. 在Unity DirectionalLight的创建,UnityARAmbientAddComponent的。
  3. 由于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信息。
有时视频和识别结果会不断跳过,延迟时间相当长,但我认为这对于需要时间构建的项目会很有用。

原文链接

https://www.jianshu.com/p/251b0893fa86

最新

现Unity已经将ARKit和ARCore整合,具体链接:https://docs.unity3d.com/Packages/[email protected]/manual/index.html#installing-ar-foundation

你可能感兴趣的:(IOS,unity,ar,增强现实,源码,技术开发,识别)