EasyAR sdk与英特尔Realsense sdk问题
本文关键字:sdk 问题 Realsense EasyAR 英特尔 | 更新日期: 2023-09-27 18:13:40
我同时使用英特尔realsense sdk和EasyAR sdk在我的项目中得到这个错误。我的想法是增强一个3D对象和移动它使用英特尔实感相机手势跟踪。请帮助。
NullReferenceException:对象引用未设置为对象的实例UnityEditor.DockArea.OnGUI () (at C:/buildslave/unity/build/Editor/Mono/GUI/DockArea.cs:272) PXCMSenseManager: pxcmsensemaner_init (IntPtr, IntPtr) PXCMSenseManager:Init(Handler) PXCMSenseManager:Init() EasyAR. realityplanebehaviour:Start() (at Assets/EasyAR/Scripts/RealityPlaneBehaviour.cs:51)**
我正在使用两个sdk提供的示例代码。将它们合并为一个项目。我成功地增强了3D对象,但不能通过手势跟踪移动3D对象。
这是我使用的代码:
using UnityEngine;
using System.Collections;
namespace EasyAR
{
public class RealityPlaneBehaviour : RealityPlaneBaseBehaviour
{
public GameObject Paddle1;
public GameObject Paddle2;
private PXCMSenseManager _pxcmSenseManager;
private PXCMHandModule _pxcmHandModule;
private PXCMHandData handData;
private pxcmStatus status;
// Use this for initialization
private void Start()
{
_pxcmSenseManager = PXCMSenseManager.CreateInstance();
if (_pxcmSenseManager == null)
{
Debug.LogError("SenseManager Initialization Failed");
}
else
{
//pxcmStatus pxcmResult = _pxcmSenseManager.EnableHand();
pxcmStatus pxcmResult = _pxcmSenseManager.EnableHand();
if (pxcmResult != pxcmStatus.PXCM_STATUS_NO_ERROR)
{
Debug.LogError("EnableHand: " + pxcmResult);
}
else
{
Debug.LogError("Reached Here:1 " + pxcmResult);
_pxcmHandModule = _pxcmSenseManager.QueryHand();
Debug.LogError("Reached Here:1 " + _pxcmHandModule.ToString());
handData = _pxcmHandModule.CreateOutput();
Debug.LogError("Reached Here:1 " + handData.ToString());
if(_pxcmHandModule == null)
{
Debug.LogError("PxcmHandModule is null during Setup");
return;
}
_pxcmSenseManager.Init();
PXCMHandConfiguration configuration = _pxcmHandModule.CreateActiveConfiguration();
configuration.EnableAllGestures();
configuration.ApplyChanges();
configuration.Dispose();
}
}
}
// Update is called once per frame
private void Update()
{
if (_pxcmSenseManager == null)
{
Debug.LogError("PxcmSenseManager is null");
return;
}
_pxcmSenseManager.AcquireFrame(false, 0);
status = _pxcmSenseManager.AcquireFrame(true);
if (status != pxcmStatus.PXCM_STATUS_NO_ERROR)
return;
_pxcmHandModule = _pxcmSenseManager.QueryHand();
if(_pxcmHandModule == null)
{
Debug.LogError("PxcmHandModule is null");
return;
}
PXCMHandData handData = _pxcmHandModule.CreateOutput();
handData.Update();
MoveBall(handData, PXCMHandData.AccessOrderType.ACCESS_ORDER_LEFT_HANDS, Paddle1);
MoveBall(handData, PXCMHandData.AccessOrderType.ACCESS_ORDER_RIGHT_HANDS, Paddle2);
_pxcmSenseManager.ReleaseFrame();
}
private void MoveBall(PXCMHandData handData, PXCMHandData.AccessOrderType accessOrderType, GameObject gameObject)
{
// Get first hand data (index 0),
PXCMHandData.IHand pxcmHandData;
if (handData.QueryHandData(accessOrderType, 0, out pxcmHandData) == pxcmStatus.PXCM_STATUS_NO_ERROR)
{
PXCMHandData.JointData jointData;
if (pxcmHandData.QueryTrackedJoint(PXCMHandData.JointType.JOINT_CENTER, out jointData) ==
pxcmStatus.PXCM_STATUS_NO_ERROR)
{
gameObject.GetComponent<Rigidbody>().velocity = new Vector3(-9, jointData.positionWorld.y*100f, 0);
}
}
}
private void OnDisable()
{
_pxcmHandModule.Dispose();
_pxcmSenseManager.Dispose();
}
}
}
这是一个读/写问题,因为当安装Realsense SDK时,它被安装在一个受保护的目录(C:/Program Files
)中,您通常没有权限写入。
重新安装Realsense SDK,但这次将安装目录更改为C:/RealsenseSDK
。权限问题应该消失,你不会再得到对象引用异常。