BodyFrameReader.AcquireLatestFrame 总是 returns 空

BodyFrameReader.AcquireLatestFrame always returns null

我正在使用适用于 Unity (5.0) 的 Kinect (v2) 插件来制作 body 的动画。我正在使用下面的代码,但是 BodyFrameReader.AcquireLatestFrame() 总是 returns 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)。其中 returns nullptr.

如果你有一张图片然后什么都没有这意味着你还没有释放资源并且它不能覆盖它。 在更新结束时,你必须释放你使用的所有资源(我猜你的 reader 除外) 在 C++ 中释放指针很容易,但我不知道如何在 C# 中执行。 如果我是你,我会查看示例以查找它们释放资源的位置。

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

将代码复制粘贴到新项目时,必须重新启动Unity主进程(在进程中掉帧)。如果我只是关闭并重新启动 Unity,问题就会自行消失。