BodyFrameReader.AcquireLatestFrame始终返回null

时间:2015-03-10 12:32:50

标签: c# unity3d kinect

我正在使用Unity(5.0)的Kinect(v2)插件来动画一个正文。我正在使用下面的代码,但BodyFrameReader.AcquireLatestFrame()始终返回null

private KinectSensor _sensor;
private BodyFrameReader _reader;

void Start()
{
    _sensor = KinectSensor.GetDefault();

    if (_sensor != null)
    {
        _reader = _sensor.BodyFrameSource.OpenReader();

        if (!_sensor.IsOpen)
        {
            _sensor.Open();
        }
    }
}

void Update()
{
    if (_reader != null)
    {
        var frame = _reader.AcquireLatestFrame(); //This always returns null

        if (frame == null)
        {
            Debug.Log("No frame available");
            return;
        }
    }
}

我做了一些调试,我可以看到我得到一帧,之后AcquireLatestFrame()总是为空。在BodyFrameReader.cs中,它调用本机方法Windows_Kinect_BodyFrameReader_AcquireLastestFrame(_pnative)。返回nullptr

2 个答案:

答案 0 :(得分:2)

如果您有一个图像,那么没有任何意味着您没有释放资源而且它无法覆盖它。 在更新结束时,您必须释放您使用的所有资源(我猜你的读者除外) 用C ++发布指针很容易,但我不知道怎么做c#。 如果我是你,我会查看样本以找到他们释放资源的位置。

答案 1 :(得分:1)

我现在怀疑出了什么问题。我第一次运行程序时,我可能忘了处理框架了。由于我在Unity中工作,因此在启动调试会话时不会启动任何新进程。因此,我怀疑Unity坚持这一框架。

将代码粘贴到新项目时,必须重新启动主Unity进程(在删除框架的过程中)。如果我只是关闭并重新启动Unity,问题本身就会消失。