初学者为Unity3D构建简单的Kinect V2插件时遇到的问题 [英] Problems for a beginner in building a simple Kinect V2 plugin for Unity3D
问题描述
您好,
$
我需要在Unity3D项目中进行面部轮换,所以,我正在尝试构建一个简单的Unity插件,但是我我是初学者,我需要帮助!
$
我创建了一个本机C ++,它构建了一个dll文件,我应该将它包装在Unity的C#包装中。  ;
$
在C ++代码中,我有这段代码片段(取自Kinect SDK):
Hello,
I need face rotation in my Unity3D project, so, I'm trying to build a simple unity plugin, but I'm a beginner in that and I need help!
I have created a native C++ that builds a dll file that I should wrap in a C# wrapper to Unity.
In that C++ code, I have this code snippet (taken from Kinect SDK):
#if _MSC_VER // this is defined when compiling with Visual Studio
#define EXPORT_API __declspec(dllexport) // Visual Studio needs annotating exported functions with this
#else
#define EXPORT_API // XCode does not need annotating exported functions, so define is empty
#endif
#include "stdafx.h"
#include "resource.h"
#include <iostream>
extern "C"
{
HRESULT EXPORT_API InitializeDefaultSensor()
{
IKinectSensor* m_pKinectSensor;
IFaceFrameSource* m_pFaceFrameSources[BODY_COUNT];
IFaceFrameReader* m_pFaceFrameReaders[BODY_COUNT];
IColorFrameReader* m_pColorFrameReader;
IBodyFrameReader* m_pBodyFrameReader;
static const DWORD c_FaceFrameFeatures =
FaceFrameFeatures::FaceFrameFeatures_BoundingBoxInColorSpace
| FaceFrameFeatures::FaceFrameFeatures_PointsInColorSpace
| FaceFrameFeatures::FaceFrameFeatures_RotationOrientation
| FaceFrameFeatures::FaceFrameFeatures_Happy
| FaceFrameFeatures::FaceFrameFeatures_RightEyeClosed
| FaceFrameFeatures::FaceFrameFeatures_LeftEyeClosed
| FaceFrameFeatures::FaceFrameFeatures_MouthOpen
| FaceFrameFeatures::FaceFrameFeatures_MouthMoved
| FaceFrameFeatures::FaceFrameFeatures_LookingAway
| FaceFrameFeatures::FaceFrameFeatures_Glasses
| FaceFrameFeatures::FaceFrameFeatures_FaceEngagement;
HRESULT hr;
hr = GetDefaultKinectSensor(&m_pKinectSensor);
if (FAILED(hr))
{
return hr;
}
if (m_pKinectSensor)
{
// Initialize Kinect and get color, body and face readers
IColorFrameSource* pColorFrameSource = nullptr;
IBodyFrameSource* pBodyFrameSource = nullptr;
hr = m_pKinectSensor->Open();
if (SUCCEEDED(hr))
{
std::cout << "sensor opened" << std::endl;
hr = m_pKinectSensor->get_ColorFrameSource(&pColorFrameSource);
}
if (SUCCEEDED(hr))
{
std::cout << "color frame source got" << std::endl;
hr = pColorFrameSource->OpenReader(&m_pColorFrameReader);
}
if (SUCCEEDED(hr))
{
std::cout << "color frame source reader opened" << std::endl;
hr = m_pKinectSensor->get_BodyFrameSource(&pBodyFrameSource);
}
if (SUCCEEDED(hr))
{
std::cout << "body frame source got" << std::endl;
hr = pBodyFrameSource->OpenReader(&m_pBodyFrameReader);
}
if (SUCCEEDED(hr))
{
std::cout << "body frame source reader opened" << std::endl;
// create a face frame source + reader to track each body in the fov
for (int i = 0; i < BODY_COUNT; i++)
{
if (SUCCEEDED(hr))
{
// create the face frame source by specifying the required face frame features
// the next statement return failed HRESULT if you wrap it as unity plugin, but it works if in a console windows app!
hr = CreateFaceFrameSource(m_pKinectSensor, 0, c_FaceFrameFeatures, &m_pFaceFrameSources[i]);
}
if (SUCCEEDED(hr))
{
// open the corresponding reader
hr = m_pFaceFrameSources[i]->OpenReader(&m_pFaceFrameReaders[i]);
}
}
}
SafeRelease(pColorFrameSource);
SafeRelease(pBodyFrameSource);
}
if (!m_pKinectSensor || FAILED(hr))
{
// SetStatusMessage(L"No ready Kinect found!", 10000, true);
return E_FAIL;
}
return hr;
}
}
问题是:这一行上面的代码:
The problem is: this line of code from above:
hr = CreateFaceFrameSource(m_pKinectSensor, 0, c_FaceFrameFeatures, &m_pFaceFrameSources[i]);
返回FAILED(hr),但奇怪的是,如果你构建作为Console应用程序的解决方案,它的工作原理!
returns FAILED(hr), but the strange thing is that if you build the solution as a Console application, it works!
也许我不擅长构建插件,但我真的需要帮助。
maybe I'm not good at building a plugin, but I really need help.
谢谢..
推荐答案
您可能遇到来自.Net api的编组问题。您是否传递了有效的跟踪用户ID?
You may have an issue with marshalling from the .Net api. Are you passing in a valid tracked user id?
这篇关于初学者为Unity3D构建简单的Kinect V2插件时遇到的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!