我正在使用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
。
答案 0 :(得分:2)
如果您有一个图像,那么没有任何意味着您没有释放资源而且它无法覆盖它。 在更新结束时,您必须释放您使用的所有资源(我猜你的读者除外) 用C ++发布指针很容易,但我不知道怎么做c#。 如果我是你,我会查看样本以找到他们释放资源的位置。
答案 1 :(得分:1)
我现在怀疑出了什么问题。我第一次运行程序时,我可能忘了处理框架了。由于我在Unity中工作,因此在启动调试会话时不会启动任何新进程。因此,我怀疑Unity坚持这一框架。
将代码粘贴到新项目时,必须重新启动主Unity进程(在删除框架的过程中)。如果我只是关闭并重新启动Unity,问题本身就会消失。