本文章由cartzhang编写,转载请注明出处。 所有权利保留。
文章链接: http://blog.csdn.net/cartzhang/article/details/44939887
作者:cartzhang
通过Kinect控制小玩偶来玩Unreal游戏,左右手抬起可左右移动;右手举过头顶,可跳起;还可以发射蜗牛子弹来攻击小鱼。使用UE4的2D效果来实现。
先睹为快,萌萌哒的小小主角:
头文件:
UFUNCTION(BlueprintCallable, Category = KINECTUE) void HandState(const int32 HandType); UFUNCTION(BlueprintCallable, Category = KINECTUE) void StartCheckHandsPushDriveHand(); UFUNCTION(BlueprintImplementableEvent, meta = (FriendlyName = "Right Hand Push")) virtual void RightHandPush(); UFUNCTION(BlueprintImplementableEvent, meta = (FriendlyName = "Left Hand Push")) virtual void LeftHandPush(); UFUNCTION(BlueprintImplementableEvent, meta = (FriendlyName = "Left Hand Move")) virtual void LeftHandMoveLeft(); UFUNCTION(BlueprintImplementableEvent, meta = (FriendlyName = "Right Hand Move")) virtual void RightHandMoveRight(); void RightHandOverHeadForJump();
实现文件,cpp文件:
void ATwoDPaperCharacter::HandState(const int32 HandType) { int iFlag = UDKinectHandsReachOutGesture(0, HandType); if (GEngine && iFlag == 1) { const float fMoveSpeed = 1.0f; switch (HandType) { case 1: LeftHandMoveLeft(); break; case 2: RightHandMoveRight(); break; default: break; } } } void ATwoDPaperCharacter::StartCheckHandsPushDriveHand() { int iRightFlag = UDKinectRightHandPushGesture(USER_INDEX); if (iRightFlag == 1) { RightHandPush(); } int iLeftFlag = UDKinectLeftHandPushGesture(USER_INDEX); if (iLeftFlag == 1) { LeftHandPush(); } } void ATwoDPaperCharacter::RightHandOverHeadForJump() { int iRightHandOverHeadFlag = UDKinectRightHandOverHeadGesture(0); if (GEngine && iRightHandOverHeadFlag == 1) { FString TmpString = "Right Hand Over Head now..."; //GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TmpString); Jump(); } }
其中逻辑控制,只展示部分。因为太多了,各个函数也复杂。
下图为受到攻击的Blueprint。
下面为控制的BP。
发射蜗牛导弹的射击Blueprint。
主要包括,左右移动,跳起,左边发射攻击,右边发射子弹攻击,被小鱼咬到的受伤级别。
从上面两张图,可看到小潜水员受到小鱼的攻击而变化了颜色。
其中,根据受伤程度不同,共有6种颜色变换。
小小潜水员在向左右发射蜗牛导弹,来攻击小鱼。
视频已经上传到Youku.
地址如下:http://v.youku.com/v_show/id_XOTI4NjUyMzIw.html