本文章由cartzhang編寫,轉載請注明出處。?所有權利保留。?
文章鏈接:?http://blog.csdn.net/cartzhang/article/details/44748475
作者:cartzhang
說明:kinect使用的是一代版本,SDK為1.8版本
### 一、概述
根據上篇博客,可大致知道Kinect舒適區范圍。下面就借助Ue4平臺來表現一下。
?
建立工程,加載Kinect庫。當然,我并沒有直接使用Kinect庫,而是自己封裝了一個自己的庫。
使用方法與添加UE4的各種庫類似,具體可以UE4的wiki上自行搜索,當然自己也有尚未解決的問題。
### 二、BP代碼部分
在我的Character的頭文件上加入調用Kinect玩家位置的函數
~~~
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Gameplay)
bool BGetPostionSucess;
UFUNCTION(BlueprintCallable, Category = KINECTUE)
FVector4 GetPlayerPositon();
~~~
CPP中代碼如下:
~~~
FVector4 AU4UE4TestCharacter::GetPlayerPositon()
{
FVector4 VPosition = FVector::ZeroVector;
BGetPostionSucess = false;
UDKinect::UDKVector pPosition;
int iFlag = KinectGetUserPosition(USER_INDEX, pPosition);
if (iFlag == 0)
{
BGetPostionSucess = false;
//GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "can get player position for the moment");
}
else{
VPosition = FVector(pPosition.x, pPosition.y, pPosition.z);
BGetPostionSucess = true;
}
return VPosition;
}
~~~
?
這樣就基本搞定了代碼部分。
?
### 三、Blueprint的函數實現
?
首先是初始化舒服區的位置,在BP中寫一個函數即可。
根據之前博客范圍,我想把左右范圍控制在角度為60度,這樣做有就跟為90-60=?30度,這樣根據正切函數就可以得到舒適距離與左右范圍的為dist/tan60;因此在下圖中有個變量叫做根號三,就是約等于1.732。
我本有意畫個圖,奈何畫的比較爛,不貼了。
初始化圖:
> 
?
說明:MinZ為舒適區的最近距離,MaxZ為舒適區設置的最大距離。這個根據Kinect攝像頭的高度和角度來調節。
接下來就是畫線了:畫了紅綠兩種線段來表示區域。
> 
紅色交匯處為左上角點,綠色交匯點為右下角點。
Basic?position是kinect的位置,也可以叫做相對位置點。
然后就是玩家位置了,BP如下:
> ?
### 四、主BP調用
這些函數搞定以后,就是在關卡的BP中進行調用了。這個就簡單多了。
初始化調用:
> ?
位置實時判斷表示:
> ?
?
### 五、測試結果
? ? ? 若都寫完了,編譯也沒有錯誤,就Play來運行檢測一下。
? ?看你的Kinect是否可以找到玩家位置,我這里用來一個小木塊來代替了玩家,做了個小gif.

THE ?END!
---------------------------
若有問題,請隨時聯系!
非常感謝!
- 前言
- UE4在VS2013中各個編譯配置代表意義
- UE4的JSON讀寫方式<一>
- UE4.5.0的Kinect插件(Plugin)<一>
- UE4.5.0的Kinect插件(Plugin)---插件使用說明<二>
- UE4的JSON讀寫方式<二>
- 熱烈慶祝UE4完全免費Free---GitHub上源碼的關聯方法
- Kinect舒適區范圍--UE4 的Blueprint測試范例
- UE4制作插件的插件神器pluginCreator
- 美輪美奐宇宙星空制作神器Spacescape
- OCulus Rift 游戲開發六原則
- 給虛幻4添加內存跟蹤功能