7 API接口函数一览

7.1 Unity相关

7.1 Unity相关 请参考 UnityXR官方 提供的相关API,目前支持如下模块:XRDisplaySubsystemXRInputSubsystem 、XRNodeStateXRSettingsXRStats

7.2 手柄相关

PXR_input:手柄接口类。

_images/7.1.png

图7.1 Input脚本

IsControllerConnected

函数名:public static bool IsControllerConnected(Controller controller)

功能:获取手柄连接状态

参数

  • Controller controller:枚举值
public enum Controller
{
    LeftController,    // 左手柄
    RightController,   // 右手柄
}

返回值:bool值,true-已连接,false-未连接

调用方式:PXR_Input.IsControllerConnected(controller);

SetControllerVibration

函数名:public static void SetControllerVibration(float strength, int time, Controller controller)

功能:使指定手柄按照指定时长、指定强度进行震动。若要中途停止震动,再次调用该接口并传入strength=0。

参数

  • float strength:震动强度:0-1

    • int time:震动持续时间,0-65535毫秒
    • Controller controller: 枚举值
public enum Controller
{
    LeftController,    // 左手柄
    RightController,   // 右手柄
}

返回值:无

调用方式:PXR_Input.SetControllerVibration(strength, time, controller);

GetControllerPredictPosition

函数名:public static Vector3 GetControllerPredictPosition(Controller controller, double predictTime)

功能:获取预测的指定手柄在指定时间后的位置

参数

  • Controller controller:枚举值
public enum Controller
{
    LeftController,    // 左手柄
    RightController,   // 右手柄
}
  • double predictTime:预测时间(单位毫秒)

返回值:Vector3类型的位置数据

调用方式:PXR_Input.GetControllerPredictPosition(controller, predictTime);

GetControllerPredictRotation

函数名:public static Quaternion GetControllerPredictRotation(Controller controller, float predictTime)

功能:获取预测的指定手柄在指定时间后的位置旋转四元数

参数

  • Controller controller: 枚举值
public enum Controller
{
    LeftController,    // 左手柄
    RightController,   // 右手柄
}
  • double predictTime:预测时间(单位毫秒)

返回值:Quaternion类型的旋转角度数据

调用方式:PXR_Input.GetControllerPredictRotation(controller, predictTime);

SetControllerOriginOffset

函数名:public static void SetControllerOriginOffset(Controller controller, Vector3 offset)

功能:设置手柄显示位置相对于手柄真实位置的偏移值

参数

  • Controller controller:枚举值
public enum Controller
{
    LeftController,    // 左手柄
    RightController,   // 右手柄
}
  • Vector3 offset:位置偏移值(单位米)

返回值:无

调用方式:PXR_Input.SetControllerOriginOffset(controller, offset);

7.3 眼球追踪相关

由于只有Neo3 Pro Eye版本的头戴才具有眼球追踪功能,故本节只适用于Neo3 Pro Eye设备。

GetCombineEyeGazePoint

函数名:public static bool GetCombineEyeGazePoint(out Vector3 point)

功能:获取左右眼当前共同注视点的位置值

参数

  • out Vector3 point:接收获取到的注视点的坐标

返回值:bool值,true-获取成功,false-获取失败

调用方式: PXR_EyeTracking.GetCombineEyeGazePoint(out Vector3 vector);

GetCombineEyeGazeVector

函数名:public static bool GetCombineEyeGazeVector(out Vector3 vector)

功能:获取左右眼当前共同的注视方向(即从双眼的中间点到注视点的向量)

参数

  • out Vector3 vector:接收获取到的注视方向

返回值:bool值,true-获取成功,false-获取失败

调用方式:PXR_EyeTracking.GetCombineEyeGazeVector(out Vector3 vector);

GetLeftEyeGazeOpenness

函数名:public static bool GetLeftEyeGazeOpenness(out float openness)

功能:获取左眼当前的睁闭程度

参数

  • out float openness:0-完全闭眼,1-睁眼

返回值:bool值,true-获取成功,false-获取失败

调用方式:PXR_EyeTracking.GetLeftEyeGazeOpenness(out float openness);

GetRightEyeGazeOpenness

函数名:public static bool GetRightEyeGazeOpenness(out float openness)

功能:获取右眼当前的睁闭程度

参数

  • out float openness:0-完全闭眼,1-睁眼

返回值:bool值,true-获取成功,false-获取失败

调用方式:PXR_EyeTracking.GetRightEyeGazeOpenness(out float openness);

GetLeftEyePoseStatus

函数名:public static bool GetLeftEyePoseStatus(out uint status)

功能:获取当前左眼的数据是否可用

参数

  • out uint status:接收返回的int值,0-数据不可用,1-数据可用

返回值:bool值,true-获取成功,false-获取失败

调用方式:PXR_EyeTracking.GetLeftEyePoseStatus(out uint status);

GetRightEyePoseStatus

函数名:public static bool GetRightEyePoseStatus(out uint status)

功能:获取当前右眼的数据是否可用

参数

  • out uint status:接收返回的int值,0-数据不可用,1-数据可用

返回值:bool值,true-获取成功,false-获取失败

调用方式:PXR_EyeTracking.GetRightEyePoseStatus(out uint status);

GetCombinedEyePoseStatus

函数名:public static bool GetCombinedEyePoseStatus(out uint status)

功能:获取当前左右眼混合的数据是否可用

参数

  • out uint status:接收返回的int值,0-数据不可用,1-数据可用

返回值:bool值,true-获取成功,false-获取失败

调用方式:PXR_EyeTracking.GetCombinedEyePoseStatus(out uint status);

代码示例:

private enum pvrEyePoseStatus
{
    gazePointValid = (1 << 0),
    gazeVectorValid = (1 << 1),
    eyeOpennessValid = (1 << 2),
    eyePupilDilationValid = (1 << 3),
    eyePositionGuideValid = (1 << 4)
};

private void GetEyeTrackingGazeRay(ref EyeTrackingGazeRay gazeRay)
{
    PXR_EyeTracking.GetCombinedEyePoseStatus(out combinedStatus);
    PXR_EyeTracking.GetCombineEyeGazeVector(out combinedGazeVector);
    PXR_EyeTracking.GetCombineEyeGazePoint(out combinedGazePoint);
    gazeRay.isValid = (combinedStatus & (int)pvrEyePoseStatus.gazePointValid) != 0 && (combinedStatus & (int)pvrEyePoseStatus.gazeVectorValid) != 0;
    if (gazeRay.isValid)
    {
        gazeRay.direction = combinedGazeVector;
        gazeRay.origin = combinedGazePoint;
        gazeRay.origin = Matrix.MultiplyPoint(gazeRay.origin);
        gazeRay.direction = Matrix.MultiplyVector(gazeRay.direction);
    }
}

GetLeftEyePositionGuide

函数名:public static bool GetLeftEyePositionGuide(out Vector3 position)

功能:获取左眼当前的位置指引:以sensor的右上角位为原点(0,0)生成一个坐标系,其中左下角坐标为(1,1),获取到眼球在这个坐标系中的位置。

参数
  • out Vector3 position:接收获取到的位置

返回值:bool值,true-获取成功,false-获取失败

调用方式: PXR_EyeTracking.GetLeftEyePositionGuide(out Vector3 position);

GetRightEyePositionGuide

函数名:public static bool GetRightEyePositionGuide(out Vector3 position)

功能:获取右眼当前的位置指引:以sensor的右上角位为原点(0,0)生成一个坐标系,其中左下角坐标为(1,1),获取到眼球在这个坐标系中的位置。

参数

  • out Vector3 position:接收获取到的位置

返回值:bool值,true-获取成功,false-获取失败

调用方式:PXR_EyeTracking.GetRightEyePositionGuide(out Vector3 position);

GetFoveatedGazeDirection

函数名:public static bool GetFoveatedGazeDirection(out Vector3 direction)

功能:获取注视点渲染(FFR的中心点)的视线方向,有关FFR描述请参考相关章节

参数
  • out Vector3 direction:接收获取到的视线方向

返回值:bool值,true-获取成功,false-获取失败

调用方式:PXR_EyeTracking.GetFoveatedGazeDirection(out Vector3 direction);

7.4 注视点渲染FFR相关

PXR_FoveationRendering:注视点渲染接口类。

_images/7.2.png

图7.2 注视点渲染脚本

GetFoveationLevel

函数名:public static FoveationLevel GetFoveationLevel()

功能:获取当前的注视点渲染级别

参数:无

返回值:枚举值

public enum FoveationLevel
{
    None = -1,     // 关闭
    Low,
    Med,
    High,
    TopHigh
}

调用方式:PXR_FoveationRendering.GetFoveationLevel();

SetFoveationLevel

函数名:public static void SetFoveationLevel(FoveationLevel level)

功能:设置注视点渲染级别

参数

  • FoveationLevel level
public enum FoveationLevel
{
    None = -1,     // 关闭
    Low,
    Med,
    High,
    TopHigh
}

返回值:无

调用方式:PXR_FoveationRendering.SetFoveationLevel(level);

SetFoveationParameters

函数名:public static void SetFoveationParameters(float foveationGainX, float foveationGainY, float foveationArea, float foveationMinimum)

功能:设置当前注视点渲染参数

参数

  • float foveationGainX/Y:X/Y轴方向外围像素的缩减率,值越大缩减越多,范围1.0-10.0

    • float foveationArea:注视点周围不降分辨率的范围,值越大,中心清晰区域越大,范围0.0-4.0
    • float foveationMinimum:默认最小像素密度,实际像素密度将大于等于foveationMinimum,一般为1/32、1/16、1/8、1/4、1/2

返回值:无

调用方式:PXR_FoveationRendering.SetFoveationParameters(foveationGainX, foveationGainY, foveationArea, foveationMinimum);

7.5 安全区防护边界相关

PXR_Boundary:安全区接口类。

_images/7.3.1.png

图7.3 安全区脚本

GetEnabled

函数名:public static bool GetEnabled()

功能:获取当前安全区防护系统是否开启

参数:无

返回值:bool值,true-开启,false-关闭

调用方式:PXR_Boundary.GetEnabled();

GetConfigured

函数名:public static bool GetConfigured()

功能:获取当前安全区防护系统是否配置成功,配置后才可正常使用安全区的相关接口

参数:无

返回值:bool值,true-已配置成功,false-配置失败

调用方式:PXR_Boundary.GetConfigured();

SetVisible

函数名:public static void SetVisible(bool value)

功能:强制设置安全区防护边界是否可见(注意:安全区正常触发或用户通过系统设置安全区将会覆盖该接口的操作)

参数

  • bool value:true-可见,false-不可见

返回值:无

调用方式:PXR_Boundary.SetVisible(value);

GetVisible

函数名:public static bool GetVisible()

功能:获取安全区防护边界是否可见

参数:无

返回值:bool值,true-安全区可见,false-不可见

调用方式:PXR_Boundary.GetVisible();

TestNode

函数名:public static PxrBoundaryTriggerInfo TestNode(BoundaryTrackingNode node, BoundaryType boundaryType)

功能:返回追踪节点对指定边界类型的测试结果

参数

  • BoundaryTrackingNode node:追踪节点,枚举值
public enum BoundaryTrackingNode
{
    HandLeft,      // 左手柄
    HandRight,     // 右手柄
    Head           // 头戴
}
  • BoundaryType boundaryType:边界类型,枚举值
public enum BoundaryType
{
    OuterBoundary,    // 安全区(即原地快速安全区或自定义安全区)
    PlayArea          // 自定义安全区边界的最大内接矩形(原地快速安全区无此矩形)
}

返回值:PxrBoundaryTriggerInfo测试结果结构体

public struct PxrBoundaryTriggerInfo
{
    public bool IsTriggering;               // 是否触发边界
    public float ClosestDistance;           // 追踪节点与边界的最近距离
    public PxrVector3f ClosestPoint;        // 追踪节点与边界的最近点位置
    public PxrVector3f ClosestPointNormal;  // 最近点法线
    public bool valid;                      // true: 该结果有效,false:无效
}

调用方式:PXR_Boundary.TestNode(node, boundaryType);

TestPoint

函数名:public static PxrBoundaryTriggerInfo TestPoint(PxrVector3f point, BoundaryType boundaryType)

功能:返回指定的3D点坐标对指定的边界类型的测试结果

参数

  • PxrVector3f point:3D点坐标

    • BoundaryType boundaryType:边界类型,枚举值
public enum BoundaryType
{
    OuterBoundary,    // 安全区(即原地快速安全区或自定义安全区)
    PlayArea          // 自定义安全区边界的最大内接矩形(原地快速安全区无此矩形)
}

返回值:PxrBoundaryTriggerInfo 测试结果结构体

public struct PxrBoundaryTriggerInfo
{
public bool IsTriggering;               // 是否触发边界
public float ClosestDistance;           // 追踪节点与边界的最近距离
public PxrVector3f ClosestPoint;        // 追踪节点与边界的最近点位置
public PxrVector3f ClosestPointNormal;  // 最近点法线
public bool valid;                      // true: 该结果有效,false:无效
}

调用方式:PXR_Boundary.TestPoint(point, boundaryType);

GetGeometry

函数名:public static Vector3[] GetGeometry(BoundaryType boundaryType)

功能:返回安全区边界的点的集合

参数

  • BoundaryType boundaryType:边界类型,枚举值
public enum BoundaryType
{
    OuterBoundary,    // 安全区(即原地快速安全区或自定义安全区)
    PlayArea          // 自定义安全区边界的最大内接矩形(原地快速安全区无此矩形)
}

返回值:Vector3[]:该类型边界点的集合

调用方式:PXR_Boundary.GetGeometry(boundaryType);

GetDimensions

函数名:public static Vector3 GetDimensions(BoundaryType boundaryType)

功能:获取自定义安全边界PlayArea的尺寸

参数

  • BoundaryType boundaryType:边界类型,枚举值
public enum BoundaryType
{
    OuterBoundary,    // 安全区(即原地快速安全区或自定义安全区)
    PlayArea          // 自定义安全区边界的最大内接矩形(原地快速安全区无此矩形)
}

返回值:Vector3类型,x:PlayArea长边,y:恒为1,z:PlayArea短边。由于原地安全区无此矩形,所以结果为(0, 0, 0)

调用方式:PXR_Boundary.GetDimensions(boundaryType);

GetDialogState

函数名:public static int GetDialogState()

功能:获取Boundary对话框状态(即弹出对话框的原因)

参数:无

返回值:int类型

数值 状态 说明
-1 NothingDialog 定位追踪关闭时,无Dialog
0 GobackDialog 头戴离开安全区时显示,回到安全区内消失
1 ToofarDialog 头戴离开安全区超过了3米
2 LostDialog 预留UI,系统配置当6Dof丢失时不显示原因,只显示该UI
3 LostNoReason 6Dof丢失,但系统未上报原因
4 LostCamera 摄像头校准数据错误,引起6Dof丢失
5 LostHighLight 环境光过亮
6 LostLowLight 环境光过暗
7 LostLowFeatureCount 环境特征点少
8 LostReLocation 系统正在恢复定位追踪,此时系统处于6Dof丢失状态

调用方式:PXR_Boundary.GetDialogState();

7.6 SeeThrough Camera相关

EnableSeeThroughManual

函数名:public static void EnableSeeThroughManual(bool value)

功能:获取设备的相机画面并作为环境背景

参数

  • bool value:是否SeeThrough开启,true开启,false关闭

返回值:无

调用方式:PXR_Boundary.EnableSeeThroughManual(value);

调用前置条件

  • Camera 的clear flags 设置为solid color
  • Camera 的background 颜色alpha通道设置为0

PassThroughSystem

功能:获取设备的相机成像

调用方式:参考 8.9章 PassThrough

7.7 设备相关

注意: 在使用电量音量亮度等服务前请首先调用接口InitAudioDevice进行初始化。

InitAudioDevice

函数名:public static bool InitAudioDevice()

功能:初始化音量设备

参数:无

返回值:bool值,true-初始化成功,false-初始化失败

调用方式:PXR_System.InitAudioDevice();

StartAudioReceiver

函数名:public static bool StartAudioReceiver(string objName)

功能:开启音量服务

参数

  • string objName:开启音量服务的gameobject名字

返回值:bool值,true-开启服务成功,false-开启服务失败

调用方式:PXR_System.StartAudioReceiver(objName);

setAudio

函数名:public void setAudio(string s)

功能:音量发生变化时的回调。

参数

  • string s:当前音量

返回值:无

调用方式:可在此方法内直接增加逻辑或者使用delegate来调用

StopAudioReceiver

函数名:public static bool StopAudioReceiver()

功能:关闭音量服务

参数:无

返回值:bool值,true-关闭服务成功,false-关闭服务失败

调用方式:PXR_System.StopAudioReceiver();

StartBatteryReceiver

函数名:public static bool StartBatteryReceiver(string objName)

功能:开启电量服务

参数
  • string objName:开启电量的gameobject名字

返回值:bool值,true-开启服务成功,false-开启服务失败

调用方式:PXR_System.StartBatteryReceiver(objName);

setBattery

函数名:public void setBattery(string s)

功能:电量发生变化时的回调。

参数

  • string s:当前的电量(范围是0.00-1.00)

返回值:无

调用方式:可在此方法内直接增加逻辑或者使用delegate来调用

StopBatteryReceiver

函数名:public static bool StopBatteryReceiver()

功能:关闭电量服务

参数:无

返回值:bool值,true-关闭服务成功,false-关闭服务失败

调用方式:PXR_System.StopBatteryReceiver();

GetMaxVolumeNumber

函数名:public static int GetMaxVolumeNumber()

功能:获取最大音量值(需要初始化音量设备:InitAudioDevice)

参数:无

返回值:int类型,最大音量值

调用方式:PXR_System.GetMaxVolumeNumber();

GetCurrentVolumeNumber

函数名:public static int GetCurrentVolumeNumber()

功能:获取当前音量值(需要初始化音量设备:InitAudioDevice)

参数:无

返回值:int类型,当前音量值值(范围0-15)

调用方式:PXR_System.GetCurrentVolumeNumber()

VolumeUp

函数名:public static bool VolumeUp()

功能:提高音量(需要初始化音量设备:InitAudioDevice)

参数:无

返回值:bool值,true-提高音量成功,false-提高音量失败

调用方式:PXR_System.VolumeUp();

VolumeDown

函数名:public static bool VolumeDown()

功能:降低音量(需要初始化音量设备:InitAudioDevice)

参数:无

返回值:bool值,true-降低音量成功,false-降低音量失败

调用方式:PXR_System.VolumeDown();

SetVolumeNum

函数名:public static bool SetVolumeNum(int volume)

功能:设置音量为指定值(需要初始化音量设备:InitAudioDevice)

参数:int volume:设置的音量数值(范围0-15)

返回值

  • bool值,true-设置音量成功,false-设置音量失败

调用方式:PXR_System.SetVolumeNum(volume);

GetCommonBrightness

函数名:public static int GetCommonBrightness()

功能:获取当前设备亮度值

参数:无

返回值:int类型,当前亮度值(范围0-255)

调用方式:PXR_System.GetCommonBrightness();

SetCommonBrightness

函数名:public static bool SetCommonBrightness(int brightness)

功能:设置当前通用设备亮度值

参数

  • int brightness:亮度值(范围0-255)

返回值:bool值,true-设置亮度成功,false-设置亮度失败

调用方式:PXR_System.SetCommonBrightness(brightness);

GetPredictedDisplayTime

函数名:public static double GetPredictedDisplayTime()

功能:获取上屏的预测时间(从图像生成到上屏的延迟时间)

参数:无

返回值:double类型:时间,单位毫秒

调用方式:PXR_System.GetPredictedDisplayTime();

GetSensorStatus

函数名:public static int GetSensorStatus()

功能:获取6dof状态

参数:无

返回值:int类型:值为0/1/3,分别对应null(获取失败)/3dof/6dof

调用方式:PXR_System.GetSensorStatus()

7.8 系统相关

通过系统相关接口,开发者可以在Pico企业版设备上获取、设置部分系统配置。

支持设备:Neo 3 Pro系列。

使用本章节接口前,请进行System Service初始化。具体方法如下

初始化并绑定Service,其中objectName为接收回调的物体名称

private void Awake()
{
    PXR_System.InitSystemService(objectName);
    PXR_System.BindSystemService();
}

解除绑定Service

private void OnDestory()
{
    PXR_System.UnBindSystemService();
}

增加4个类型接收回调方法

private void BoolCallback(string value)
{
    if (PXR_Plugin.System.BoolCallback != null) PXR_Plugin.System.BoolCallback(bool.Parse(value));
    PXR_Plugin.System.BoolCallback = null;
}
private void IntCallback(string value)
{
    if (PXR_Plugin.System.IntCallback != null) PXR_Plugin.System.IntCallback(int.Parse(value));
    PXR_Plugin.System.IntCallback = null;
}
private void LongCallback(string value)
{
    if (PXR_Plugin.System.LongCallback != null) PXR_Plugin.System.LongCallback(int.Parse(value));
    PXR_Plugin.System.LongCallback = null;
}
private void StringCallback(string value)
{
    if (PXR_Plugin.System.StringCallback != null) PXR_Plugin.System.StringCallback(value);
    PXR_Plugin.System.StringCallback = null;
}

调用接口前需确保Service已绑定成功。关于Service绑定成功的回调,请将以下代码添加到初始化的脚本中,绑定Service成功后,此方法会被调用。

public void toBServiceBind(string s)
{
    Debug.Log("Bind success.");
}

普通接口

_images/7.4.png

图7.4 system脚本

StateGetDeviceInfo

函数名:public static string StateGetDeviceInfo(SystemInfoEnum type)

功能:获取设备信息

参数:SystemInfoEnum type:枚举值

public enum SystemInfoEnum
{
    ELECTRIC_QUANTITY,                     // 电量
    PUI_VERSION,                           // PUI版本号
    EQUIPMENT_MODEL,                       // 设备型号
    EQUIPMENT_SN,                          // 设备SN
    CUSTOMER_SN,                           // 客户SN
    INTERNAL_STORAGE_SPACE_OF_THE_DEVICE,  // 设备存储空间
    DEVICE_BLUETOOTH_STATUS,               // 蓝牙状态
    BLUETOOTH_NAME_CONNECTED,              // 蓝牙连接名称
    BLUETOOTH_MAC_ADDRESS,                 // 蓝牙Mac地址
    DEVICE_WIFI_STATUS,                    // WIFI连接状态
    WIFI_NAME_CONNECTED,                   // 已连接WIFI名称
    WLAN_MAC_ADDRESS,                      // WLAN的MAC地址
    DEVICE_IP,                             // 设备IP地址
    CHARGING_STATUS                        // 设备是否充电,充电返回2;未充电返回3
}

返回值:string类型,对应的设备信息

调用方式:PXR_System.StateGetDeviceInfo(SystemInfoEnum.PUI_VERSION);

ControlSetAutoConnectWIFI

函数名:public static void ControlSetAutoConnectWIFI(string ssid, string pwd, Action<bool> callback)

功能:连接指定WiFi并将其设置为自动连接。

参数

  • ssid:WiFi名称

    • pwd:WiFi密码
    • Action<bool> callback:是否连接成功的回调

返回值:无

调用方式:PXR_System.ControlSetAutoConnectWIFI(ssid, pwd, callback);

ControlClearAutoConnectWIFI

函数名:public static void ControlClearAutoConnectWIFI(Action<bool> callback)

功能:清除已记忆的可自动连接的WiFi

参数

  • Action<bool> callback:是否清除成功的回调

返回值:无

调用方式:PXR_System.ControlClearAutoConnectWIFI(callback);

PropertySetHomeKey

函数名:public static void PropertySetHomeKey(HomeEventEnum eventEnum, HomeFunctionEnum function, Action<bool> callback)

功能:自定义Home键功能。会影响系统定义的Home键功能,请开发者酌情使用

参数

  • HomeEventEnum eventEnum
public enum HomeEventEnum
{
    SINGLE_CLICK,    // 单击
    DOUBLE_CLICK     // 双击
}
  • HomeFunctionEnum function
public enum HomeFunctionEnum
{
    VALUE_HOME_GO_TO_SETTING = 0,    // 打开设置界面
    VALUE_HOME_RECENTER = 2,         // 校准
    VALUE_HOME_DISABLE = 4,          // 禁用HOME建
    VALUE_HOME_GO_TO_HOME = 5        // 打开Launcher
}
  • Action<bool> callback:设置是否成功的回调

返回值:无

调用方式:PXR_System.PropertySetHomeKey(eventEnum, function, callback);

PropertySetHomeKeyAll

函数名:public static void PropertySetHomeKeyAll(HomeEventEnum eventEnum, HomeFunctionEnum function, int timesetup, string pkg, string className, Action<bool> callback)

功能:自定义Home按键扩展功能

参数

  • HomeEventEnum eventEnum
public enum HomeEventEnum
{
    SINGLE_CLICK,    // 单击
    DOUBLE_CLICK     // 双击
}
  • HomeFunctionEnum function
public enum HomeFunctionEnum
{
    VALUE_HOME_GO_TO_SETTING = 0,    // 打开设置界面
    VALUE_HOME_RECENTER = 2,         // 校准
    VALUE_HOME_DISABLE = 4,          // 禁用HOME建
    VALUE_HOME_GO_TO_HOME = 5        // 打开Launcher
}
  • int timesetup:只有双击和长按事件有事件才设置按键间隔时间;短按传0即可
  • string pkg:传入null
  • string className:传入null
  • Action<bool> callback:是否设置成功的回调

返回值:无

调用方式:PXR_System.PropertySetHomeKeyAll(eventEnum,function, timesetup, pkg, className, callback);

PropertyDisablePowerKey

函数名:public static void PropertyDisablePowerKey(bool isSingleTap, bool enable,Action<int> callback)

功能:自定义Power按键功能

参数

  • bool isSingleTap:单击事件-true,长按事件-false

    • bool enable:按键使能状态
    • Action<int> callback:设置是否成功,0-成功,1-失败,11-电源键长按时间不能超过5秒

返回值:无

调用方式:PXR_System.PropertyDisablePowerKey(isSingleTap, enable,callback);

PropertySetScreenOffDelay

函数名:public static void PropertySetScreenOffDelay(ScreenOffDelayTimeEnum timeEnum, Action<int> callback)

功能:设置灭屏的超时时间,设备在未佩戴状态超过此时间后将灭屏

参数
  • ScreenOffDelayTimeEnum timeEnum:灭屏超时时间,不能大于系统休眠超时时间。
public enum ScreenOffDelayTimeEnum
{
    THREE = 3,              // 3秒
    TEN = 10,               // 10秒
    THIRTY = 30,            // 30秒
    SIXTY = 60,             // 60秒
    THREE_HUNDRED = 300,    // 5分钟
    SIX_HUNDRED = 600,      // 10分钟
    NEVER = -1              // 永不
}
  • Action<int> callback:是否设置成功的回调,0-成功,1-失败,10-此时间不能大于休眠时间

返回值:无

调用方式:PXR_System.PropertySetScreenOffDelay(timeEnum,callback);

PropertySetSleepDelay

函数名:public static void PropertySetSleepDelay(SleepDelayTimeEnum timeEnum)

功能:设置系统休眠的超时时间,设备在未佩戴状态超过此时间后将进入休眠状态

参数

  • SleepDelayTimeEnum timeEnum:系统休眠超时时间
public enum SleepDelayTimeEnum
{
    FIFTEEN = 15,                           // 15秒
    THIRTY = 30,                            // 30秒
    SIXTY = 60,                             // 1分钟
    THREE_HUNDRED = 300,                    // 5分钟
    SIX_HUNDRED = 600,                      // 10分钟
    ONE_THOUSAND_AND_EIGHT_HUNDRED = 1800,  // 30分钟
    NEVER = -1                              // 永不
}

返回值:无

调用方式:PXR_System.PropertySetSleepDelay(timeEnum);

SwitchSystemFunction

函数名:public static void SwitchSystemFunction(SystemFunctionSwitchEnum systemFunction, SwitchEnum switchEnum)

功能:常用系统开关设置,将指定systemFunction设置为开启或关闭

参数

  • SystemFunctionSwitchEnum systemFunction:功能类型,枚举值
public enum SystemFunctionSwitchEnum
{
    SFS_USB,                        // USB调试开关
    SFS_AUTOSLEEP,                  // 自动休眠开关
    SFS_SCREENON_CHARGING,          // 亮屏充电开关
    SFS_OTG_CHARGING,               // OTG充电开关
    SFS_RETURN_MENU_IN_2DMODE,      // 2D界面下返回图标显示开关
    SFS_COMBINATION_KEY,            // 组合键开关
    SFS_CALIBRATION_WITH_POWER_ON,  // 开机校准开关
    SFS_SYSTEM_UPDATE,              // 系统升级开关
    SFS_CAST_SERVICE,               // 手机投屏开关,行业解决方案开关打开时,该属性不生效
    SFS_EYE_PROTECTION,             // 护眼模式开关
    SFS_SECURITY_ZONE_PERMANENTLY,  // 6Dof安全区永久关闭开关
    SFS_Auto_Calibration,           // 自动校准开关
    SFS_USB_BOOT,                   // USB插入启动开关
    SFS_VOLUME_UI,                  // 音量全局UI提示开关
    SFS_CONTROLLER_UI,              // 手柄连接全局UI提示开关
    SFS_NAVGATION_SWITCH,           // 打开/关闭导航栏
    SFS_SHORTCUT_SHOW_RECORD_UI,    // 是否显示录屏按钮
    SFS_SHORTCUT_SHOW_FIT_UI,       // 是否显示Pico运动UI
    SFS_SHORTCUT_SHOW_CAST_UI,      // 是否显示投屏按钮
    SFS_SHORTCUT_SHOW_CAPTURE_UI,   // 是否显示截屏按钮
    SFS_STOP_MEM_INFO_SERVICE,      // 2D应用杀活开关
    SFS_USB_FORCE_HOST              // Neo3设备设置为host设备
}
  • SwitchEnum switchEnum:是否开启,枚举值
public enum SwitchEnum
{
    S_ON,    // 开启
    S_OFF    // 关闭
}

返回值:无

调用方式:PXR_System.SwitchSystemFunction(systemFunction, switchEnum);

SwitchSetUsbConfigurationOption

函数名:public static void SwitchSetUsbConfigurationOption(USBConfigModeEnum uSBConfigModeEnum)

功能:设置USB的配置模式(MTP模式或充电模式)

参数

  • USBConfigModeEnum uSBConfigModeEnum:USB配置模式,枚举值
public enum USBConfigModeEnum
{
    MTP,     // MTP模式
    CHARGE   // 充电模式
}

返回值:无

调用方式:PXR_System.SwitchSetUsbConfigurationOption(uSBConfigModeEnum);

AcquireWakeLock

函数名:public static void AcquireWakeLock()

功能:请求wakelock接口,使系统不会进入睡眠状态。仅支持G2 4K。

参数:无

返回值:无

调用方式:PXR_System.AcquireWakeLock();

ReleaseWakeLock

函数名:public static void ReleaseWakeLock()

功能:释放wakelock接口,使系统可以进入睡眠状态。仅支持G2 4K。

参数:无

返回值:无

调用方式:PXR_System. ReleaseWakeLock();

EnableEnterKey

函数名:public static void EnableEnterKey()

功能:启用头戴确认键

参数:无

返回值:无

调用方式:PXR_System.EnableEnterKey();

DisableEnterKey

函数名:public static void DisableEnterKey()

功能:禁用头戴确认键

参数:无

返回值:无

调用方式:PXR_System.DisableEnterKey();

EnableVolumeKey

函数名:public static void EnableVolumeKey()

功能:启用音量键

参数:无

返回值:无

调用方式:PXR_System.EnableVolumeKey();

DisableVolumeKey

函数名:public static void DisableVolumeKey()

功能:禁用音量键

参数:无

返回值:无

调用方式:PXR_System.DisableVolumeKey();

EnableBackKey

函数名:public static void EnableBackKey()

功能:启用头戴返回键

参数:无

返回值:无

调用方式:PXR_System.EnableBackKey();

DisableBackKey

函数名:public static void DisableBackKey()

功能:禁用头戴返回键

参数:无

返回值:无

调用方式:PXR_System.DisableBackKey();

WriteConfigFileToDataLocal

函数名:public static void WriteConfigFileToDataLocal(string path, string content, Action<bool> callback)

功能:向/data/local/tmp/目录下写配置文件

参数

  • string path:配置文件路径(需传入绝对路径的全名,如:/data/local/tmp/config.txt)

    • string content:配置文件内容
    • Action<bool> callback:是否成功写入的回调

返回值:无

调用方式:PXR_System.WriteConfigFileToDataLocal(path, content, callback);

ResetAllKeyToDefault

函数名:public static void ResetAllKeyToDefault(Action<bool> callback)

功能:恢复默认按键配置

参数:callback:是否成功恢复的回调

返回值:无

调用方式:PXR_System.ResetAllKeyToDefault(callback);

FreezeScreen

函数名:public static void FreezeScreen(bool freeze)

功能:把屏幕固定在正前方,屏幕随着头戴转动。仅支持G2 4K。

参数:freeze : true-冻结; false-解除冻结

返回值:无

调用方式:PXR_System.FreezeScreen(true);

OpenMiracast

函数名:public static void OpenMiracast()

功能:开启投屏功能

参数:无

返回值:无

调用方式:PXR_System.OpenMiracast();

IsMiracastOn

函数名:public static void IsMiracastOn()

功能:获取投屏开启状态

参数:无

返回值:bool值,true-开启,false-关闭

调用方式:PXR_System.IsMiracastOn();

CloseMiracast

函数名:public static void CloseMiracast()

功能:关闭投屏功能

参数:无

返回值:无

调用方式:PXR_System.CloseMiracast();

StartScan

函数名:public static void StartScan()

功能:开始扫描可投屏设备

参数:无

返回值:无

调用方式:PXR_System.StartScan();

StopScan

函数名:public static void StopScan()

功能:停止扫描可投屏设备

参数:无

返回值:无

调用方式:PXR_System.StopScan();

SetWDJsonCallback

函数名:public static void SetWDJsonCallback()

功能:设定扫描结果callback,返回json字符串,包含过去连接过设备和扫描出的设备。执行此接口后,StringCallBack才可以被回调到。

参数:无

返回值:无

调用方式:PXR_System.SetWDJsonCallback();

ConnectWifiDisplay

函数名:public static void ConnectWifiDisplay(string modelJson)

功能:投屏到指定设备

参数
  • string modelJson:Callback返回的WifiDisplayModel
{
    "deviceAddress": "e2:37:bf:76:33:c6",
    "deviceName": "\u5BA2\u5385\u7684\u5C0F\u7C73\u7535\u89C6",
    "isAvailable": "true",
    "canConnect": "true",
    "isRemembered": "false",
    "statusCode": "-1",
    "status": "",
    "description": ""
}

返回值:无

调用方式:PXR_System.ConnectWifiDisplay(modelJson);

DisConnectWifiDisplay

函数名:public static void DisConnectWifiDisplay()

功能:断开投屏

参数:无

返回值:无

调用方式:PXR_System.DisConnectWifiDisplay();

ForgetWifiDisplay

函数名:public static void ForgetWifiDisplay(string address)

功能:忘记已连接过设备

参数:string address:设备的MAC地址

返回值:无

调用方式:PXR_System.ForgetWifiDisplay(address);

RenameWifiDisplay

函数名:public static void RenameWifiDisplay (string address , string newName)

功能:修改已连接的投屏设备名称(显示在头戴中的名称)

参数

  • string address:设备的MAC地址

    • string newName:设备新名称

返回值:无

调用方式:PXR_System.RenameWifiDisplay (address,newName);

UpdateWifiDisplays

函数名:public static void UpdateWifiDisplays(Action<string> callback)

功能:手动更新可投屏的设备列表

参数

Action<string> callback:string-可投屏的设备列表

返回值:无

调用方式:PXR_System.UpdateWifiDisplays(callback);

GetConnectedWD

函数名:public static string GetConnectedWD()

功能:获取当前连接的设备信息

参数:无

返回值:string类型,当前连接的设备信息

调用方式:PXR_System.GetConnectedWD();

受保护接口

注意:调用以下接口需要在manifest里添加以下标签,添加此标签后无法上架Pico Store。

<meta-data android:name="pico_advance_interface" android:value="0"/>

ControlSetDeviceAction

函数名:public static void ControlSetDeviceAction(DeviceControlEnum deviceControl, Action<int> callback)

功能:控制设备关机、重启

参数

  • DeviceControlEnum deviceControl:枚举值
public enum DeviceControlEnum
{
    DEVICE_CONTROL_REBOOT,     // 重启
    DEVICE_CONTROL_SHUTDOWN    // 关机
}
  • Action<int> callback:回调接口,1-关机、重启失败,2-无权限执行此操作

返回值:无

调用方式:PXR_System.ControlSetDeviceAction(deviceControl,callback);

ControlAPPManager

函数名:public static void ControlAPPManager(PackageControlEnum packageControl, string path, Action<int> callback)

功能:应用控制静默安装,静默卸载

参数

  • PackageControlEnum packageControl
public enum PackageControlEnum
{
    PACKAGE_SILENCE_INSTALL,   // 静默安装
    PACKAGE_SILENCE_UNINSTALL  // 静默卸载
}
  • string path:静默安装的安装包路径/静默卸载的应用包名
  • Action<int> callback:回调接口, 0-成功,1-失败,2-无权限执行此操作

返回值:无

调用方式:PXR_System.ControlAPPManager(packageControl, “com.foo.bar”,callback);

ScreenOn

函数名:public static void ScreenOn()

功能:使设备亮屏

参数:无

返回值:无

调用方式:PXR_System.ScreenOn();

ScreenOff

函数名:public static void ScreenOff()

功能:使设备灭屏

参数:无

返回值:无

调用方式:PXR_System.ScreenOff();

KillAppsByPidOrPackageName

函数名:public static void KillAppsByPidOrPackageName(int[] pids, string[] packageNames)

功能:通过传入应用pid或应用包名方式杀死应用

参数

  • int[] pids:应用pid数组,不用时请传入空数组

    • string[] packageNames:应用包名数组,不用时请传入空数组

返回值:无

调用方式:PXR_System.KillAppsByPidOrPackageName(pids, packageNames);

KillBackgroundAppsWithWhiteList

函数名:public static void KillBackgroundAppsWithWhiteList(string[] packageNames)

功能:清除后台应用,传入的白名单不会被清除

参数

  • string[] packageNames:白名单应用包名数组

返回值:无

调用方式:PXR_System.KillBackgroundAppsWithWhiteList(packageNames);

7.9 成就系统相关

准备工作

开发者可以从管理中心进入到创建应用阶段,点击创建应用,然后进入相应平台完善应用的相关信息。

开发者在接入成就系统时,需要在开发者平台创建应用并获取相应字符串。

申请流程如下:

    1. 申请成为开发者
    1. 创建应用
  • 4.创建成就信息

点击 查看 进入应用详情页。如果您还没有任何应用,请先 创建应用

开发者在接入成就系统时,需要在开发者平台创建应用并获取 应用参数,对应流程如下:

平台服务 菜单找到并点击 成就

_images/7.9.1.1.png

图7.9.1 开发者平台

在成就页面可以看到您已创建的所有成就。如果您还没有任何成就,请点击 创建

按要求填写成就的信息。填入的API 名称(即API Name)必须代码中的保持一致。

  • 5.成就类型

(1). 简单类型:通过单个事件或目标完成来解锁,无成就进展

(2). 计数器类型:到达指定目标个数时解锁(e.g. 完成5个解锁,target=5)

(3). 位域类型:到达指定范围的指定目标个数时解锁(e.g. 完成指定7个目标中的3个解锁,Target=3,Bitfield Length=7)

    1. Platform Settings配置应用appid
_images/7.9.1.2.png

图7.9.2 Platform Settings面板

AndroidManifest配置详情请参考9.1.4章节

接口调用

使用注意事项

  1. 请先使用Pico账号登陆设备,再使用成就接口和功能

  2. 为了避免由于设备账号切换、退登导致的成就数据出现误差,请在应用Resume()中重新调用一次初始化,以确保应用获取正确的用户登陆信息。

  3. 开发调试阶段可以通过以下方式调试和测试

    • Logcat
    • 通过开发者平台-应用-成就信息页查看数据

Init

函数名:public static PXR_Request<PXR_AchievementUpdate> Init()

功能:初始化成就系统

参数:无

返回值:接口调用返回PXR_Request<PXR_AchievementUpdate>类型的消息

调用方式:PXR_ Achievement.Init();

GetAllDefinitions

函数名:public static PXR_Request<PXR_AchievementDefinitionList> GetAllDefinitions()

功能:获取所有成就定义信息

参数:无

返回值:接口调用结果PXR_Request<PXR_AchievementDefinitionList>

调用方式:PXR_ Achievement.GetAllDefinitions();

GetAllProgress

函数名:public static PXR_Request<PXR_AchievementProgressList> GetAllProgress()

功能:获取所有已修改成就进度信息

参数:无

返回值:接口调用结果PXR_Request<PXR_AchievementProgressList>

调用方式:PXR_ Achievement.GetAllProgress();

GetDefinitionsByName

函数名:public static PXR_Request<PXR_AchievementDefinitionList> GetDefinitionsByName(string[] names)

功能:根据name获取成就定义信息

参数

  • string[] names:要获取定义信息的成就apiname数组

返回值:接口调用结果PXR_Request<PXR_AchievementDefinitionList>

调用方式:PXR_ Achievement.GetDefinitionsByName(names);

GetProgressByName

函数名:public static PXR_Request<PXR_AchievementProgressList> GetProgressByName(string[] names)

功能:根据name获取成就的解锁进度信息

参数

  • string[] names:要获取定义信息的成就apiname数组

返回值:接口调用结果PXR_Request<PXR_AchievementProgressList>

调用方式:PXR_ Achievement.GetProgressByName(names);

AddCount

函数名:public static PXR_Request<PXR_AchievementUpdate> AddCount(string name, long count)

功能:增加计数成就的计数。

参数

  • string name:成就apiname

    • long count:增加数

返回值:接口调用结果PXR_Request<PXR_AchievementUpdate>

调用方式:PXR_ Achievement.AddCount(name, count);

AddFields

函数名:public static PXR_Request<PXR_AchievementUpdate> AddFields(string name, string fields)

功能:在bitfield类型的成就中解锁一点。一旦某个bit被解锁,就不会再被改变。

参数

  • string name:成就apiname

    • string fields:增加数

返回值:接口调用结果PXR_Request<PXR_AchievementUpdate>

调用方式:PXR_ Achievement.AddFields(name,bitfield);

Unlock

函数名:public static PXR_Request<PXR_AchievementUpdate> Unlock(string name)

功能:根据apiname解锁成就

参数

  • string name:成就apiname

返回值:接口调用结果PXR_Request<PXR_AchievementUpdate>

调用方式:PXR_ Achievement.Unlock(name);

GetNextAchievementDefinitionListPage

函数名:public static PXR_Request<PXR_AchievementDefinitionList> GetNextAchievementDefinitionListPage(PXR_AchievementDefinitionList list)

功能:获取所有成就定义信息时,若存在多页,获取下一页

参数

  • PXR_AchievementDefinitionList list:要获取成就的列表

返回值:接口调用结果PXR_Request<PXR_AchievementDefinitionList>

调用方式:PXR_ Achievement.GetNextAchievementDefinitionListPage(list);

GetNextAchievementProgressListPage

函数名:public static PXR_Request<PXR_AchievementProgressList> GetNextAchievementProgressListPage(PXR_AchievementProgressList list)

功能:获取所有已修改成就进度信息时,若存在多页,获取下一页

参数:无

返回值:接口调用结果

调用方式:PXR_ Achievement.GetNextAchievementProgressListPage(achievementProgressList);

7.10 大空间相关

使用场景:将一台头戴创建的安全区,导出给其它头戴使用。支持最大面积10m*10m。

使用流程:用户使用一台头戴创建好地图后,把地图导出、拷贝至其他设备中。其他设备可以共用这一套地图,处于统一坐标系中,且头戴不需要统一真实世界的某一个位置唤醒(头戴在真实世界中任一位置唤醒后,可以识别到地图,且虚拟场景中的位置与真实世界的位置一致,不会以头戴位置为坐标原点)。如下图:

_images/7.10.png

使用大空间功能时,需将PXR_LargeSpaceServes脚本挂载到XR Rig下。并调用以下接口:PXR_Plugin.System.UPxr_SetLargeSpaceEnable(true) 设置当前应用在大空间模式下运行。

注意:

  • 使用大空间相关接口需 初始化并绑定Service,具体操作方式请参考 7.8系统相关
  • 大空间功能需要设备系统软件版本为 c000_rf01_bv1.0.1_sv1.192_20211116_b346 及以上。系统软件版本号可以在设备内选项 设置 - 通用 处查看。
_images/7.10.1.png

图7.10.1 挂载PXR_LargeSpaceServes脚本

SetLargeSpaceEnable

函数名:public static void SetLargeSpaceEnable(bool value)

功能:设置当前应用是否支持大空间。

参数
  • bool value:true-支持,false-不支持

返回值:无

调用方式:PXR_System.SetLargeSpaceEnable(value);

SwitchLargeSpaceScene

函数名:public static void SwitchLargeSpaceScene(bool open, Action<bool> callback)

功能:开关大空间

参数

  • bool open:true-开启,false-关闭

    • Action<bool> callback:回调函数,true-成功,false-失败。

返回值:无。

调用方式:PXR_System.SwitchLargeSpaceScene(open, callback);

注意事项:在绘制安全区时,请多走动一段时间,确保获取到足够的特征点。

GetSwitchLargeSpaceStatus

函数名:public static void GetSwitchLargeSpaceStatus(Action<string> callback)

功能:获取当前大空间状态。

参数

  • Action<string> callback:回调函数,1-打开,0-关闭。

返回值:无。

调用方式:PXR_System.GetSwitchLargeSpaceStatus(Action);

SaveLargeSpaceMaps

函数名:public static bool SaveLargeSpaceMaps()

功能:保存大空间地图

参数:无

返回值:bool值,true-成功,false-失败

调用方式:PXR_System.SaveLargeSpaceMaps();

ExportMaps

函数名:public static void ExportMaps(Action<bool> callback)

功能:导出地图文件,导出的文件在内部储存/maps/export 路径下

参数
  • Action<bool> callback:回调函数,true-成功,false-失败

返回值:无

调用方式:PXR_System.ExportMaps(callback);

ImportMaps

函数名:public static void ImportMaps (Action<bool> callback)

功能:导入地图文件,需先将地图文件拷贝到内部存储/maps/文件夹中,再导入。

参数

  • Action<bool> callback:回调函数,true-成功,false-失败

返回值:无

调用方式:PXR_System.ImportMaps(callback);

GetPredictedMainSensorStateNew

函数名:public static int GetPredictedMainSensorStateNew(ref PxrSensorState2 sensorState, ref int sensorFrameIndex)

功能:获取固定坐标系下头戴设备的姿态数据。

参数
  • ref PxrSensorState2 sensorState
public struct PxrSensorState2
{
    public int status;                        // 0:pose/globalPose的数据不可用
                                              // 1: pose/globalPose只有姿态数据可用
                                              // 3:pose/globalPose位置和姿态数据都可用
    public PxrPosef pose;                     // 头戴的位置和姿态
    public PxrPosef globalPose;               // 头戴相对于Boundary的位置和姿态
    public PxrVector3f angularVelocity;       // 角速度
    public PxrVector3f linearVelocity;        // 线性角速度
    public PxrVector3f angularAcceleration;   // 角加速度
    public PxrVector3f linearAcceleration;    // 线性角加速度
    public UInt64 poseTimeStampNs;            // 取得上述数据的时间(纳秒)
}
  • ref int sensorFrameIndex:当前帧对应的Sensor数据的索引

返回值:int类型

返回值 说明
0 成功
-1 其他错误
-4 输入的指针不能为空
-5 Session未创建

调用方式 :PXR_System.GetPredictedMainSensorStateNew(ref sensorState, ref sensorFrameIndex);