我在我的项目中同时使用英特尔realsense和EasyAR sdk时出现了这个错误。我的想法是增加一个三维物体,并使用英特尔realsense相机,手势跟踪移动它。请帮帮忙。
对象引用未设置为对象的实例( C:/buildslave/unity/build/Editor/Mono/GUI/DockArea.cs:272) PXCMSenseManager:PXCMSenseManager_Init(IntPtr,IntPtr) PXCMSenseManager:Init(Handler) PXCMSenseManager:Init() EasyAR.RealityPlaneBehaviour:Start() (at Assets/EasyAR/Scripts/RealityPlaneBehaviour.cs:51)** )
我正在使用两个SDKS提供的示例代码。把它们合并到一个项目中。我成功地增强了三维物体,但无法通过手势跟踪移动三维物体。
这是我正在使用的代码:
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();
}
}
}发布于 2016-10-18 03:07:56
这是一个读/写问题,因为在安装Realsense SDK时,它安装在一个受保护的目录(C:/Program Files)中,您通常没有写入权限。
重新安装Realsense,但这一次,将安装目录更改为C:/RealsenseSDK。权限问题应该消失了,您将不再获得对象引用异常。
https://stackoverflow.com/questions/40098661
复制相似问题