UXR2.0使用平面检测
在使用多模态交互之前,确保场景中已经加入RKCamera组件,并按照《空间构建》章节介绍完成了基础空间的构建。并确保已经了解如何使用Rokid 多模态交互。
注意:手势交互依赖于Max Pro眼镜。
1 构建标准6DoF 场景
按照6DoF空间章节中介绍的方式,构建一个标准的6DoF 场景。

并按照多模态交互章节中介绍的方式,构建多模态交互场景。

2 NativeInterface_PlaneTracking.cs
平面检测接口文档是NativeInterface_PlaneTracking.cs文件。其中:
///打开平面检测
public static void OpenPlaneTracker(PlaneDetectMode detectMode);
///关闭平面检测
public static void ClosePlaneTracker();
///设置平面检测模式
public static void SetPlaneDetectMode(PlaneDetectMode detectMode);
///获取当前平面检测模式
public static PlaneDetectMode GetPlaneDetectMode();
///
public static unsafe TrackableChanges<long> GetChanges(Allocator allocator);
///尝试获取有边界的平面
public static unsafe bool TryGetBoundedPlane(long plane, ref BoundedPlane boundedPlane)
public enum PlaneDetectMode
{
Horizontal = 1, //Only detect horizontal plane
Vertical = 2,//Only detect vertical plane
HorizontalAndVertical = 3 // Detect horizontal and vertical plane
}
public struct BoundedPlane
{
public long planeHandle;
public Vector2[] boundary;//局部坐标
public Vector3[] boundary3D;//世界坐标
public Pose pose;
public PlaneType planeType;
public override string ToString()
{
string boundaryStr = "\r\n";
string boundary3DStr = "\r\n";
for (int i = 0; i < boundary.Length; i++)
{
boundaryStr += $"({boundary[i].x},{boundary[i].y})\r\n";
boundary3DStr += $"({boundary3D[i].x},{boundary3D[i].y},{boundary3D[i].z})\r\n";
}
return $"planeId:{planeHandle} \r\nplaneType:{planeType} \r\npose:\r\n{pose.position.ToString("0.0000")}\r\n{pose.rotation.eulerAngles.ToString("0.0000")} \r\nboundary3D:{boundary3DStr}\r\nboundary:{boundaryStr} ";
}
public void release()
{
boundary = null;
boundary3D = null;
}
}
比较深入的开发者可以使用这些接口进行平面、锚点、交互的开发,以下章节是提供的快速开始使用的方法。
3 AR Plane Manager
AR Plane Manager是Rokid 为开发者提供的平面管理工具。
在场景中创建空物体,命名为PlaneLogic,并挂载ARPlaneManager。

ARPlaneManager需要传入一个可延展的PlanePrefab。(Log Text 和Plane Detect Mode 根据项目需求进行设置)
在Rokid UXR SDK Package中找到AR Default Plane,并将其拖入Hierarchy中。

并将该平面复制给ARPlaneManager。

4 Anchor Manager
在确定已经有RKInput 的情况下,开发者可以使用Anchor Manager 来管理空间锚点。
在PlaneLogic 上挂载AnchorManager 脚本。

这里要注意,Anchor Manager 需要一个Anchor Prefab 作为锚点预制体,在Rokid UXR SDK 包中有一个默认的锚点预制体–AR Default Locator。找到AR Default Locator,这里需要注意,我们要用的是预制体。并将其拖入到Hierarchy中。

把该预制体赋值给到Anchor Manager。

5 控制平面检测开关
在场景中创建PointableUI,设置两个开关,用来打开和关闭平面检测。

创建PlaneTest.cs 脚本:
using Rokid.UXR.Module; // 引入Rokid的UXR模块相关命名空间
using UnityEngine;
using UnityEngine.UI;
/**
* 类说明:PlaneTest 脚本用于控制平面追踪的开启与关闭功能。
* 通过UI按钮与ARPlaneManager交互,实现AR应用中平面追踪的用户界面控制。
*/
public class PlaneTest : MonoBehaviour
{
// 可序列化的私有字段,用于在Inspector面板中指定UI按钮
[SerializeField] private Button openPlaneTracker;
[SerializeField] private Button closePlaneTracker;
/**
* 方法说明:Start
* 在第一帧更新前调用,用于初始化组件和设置监听事件。
*/
void Start()
{
// 如果openPlaneTracker按钮被分配,则为其添加点击事件监听器,
// 点击时调用ARPlaneManager的OpenPlaneTracker方法以开启平面追踪。
if (openPlaneTracker)
{
openPlaneTracker.onClick.AddListener(() => { ARPlaneManager.Instance.OpenPlaneTracker(); });
}
// 同理,为closePlaneTracker按钮添加点击事件监听器,
// 点击时调用ARPlaneManager的ClosePlaneTracker方法以关闭平面追踪。
if (closePlaneTracker)
{
closePlaneTracker.onClick.AddListener(() => { ARPlaneManager.Instance.ClosePlaneTracker(); });
}
}
}
并将PlaneTest脚本挂载到PlaneLogic上。并将Open和Close赋值到脚本中。

6 打包应用
将场景打包。

将设备连接到WiFi-ADB 或者直接连接电脑。安装打包成的APK文件。

最后在实机中查看:
更多推荐
所有评论(0)