我如何检测堵塞 in/out Oculus 触摸控制器?
How Can i detect plugging in/out Oculus touch controllers?
我正在重新编辑它,以使其尽可能简单。我想在我的游戏(unreal engine 4 中制作)中检测是否插入了 Oculus 触摸控制器。您可以在下面找到我到目前为止所做的事情。
首先我到目前为止做了什么:
在OculusInput.cpp
bool FOculusInput::IsControllerConnected(int32 ControllerIndex) const
{
for (const FOculusTouchControllerPair& ControllerPair : ControllerPairs)
{
if (ControllerPair.UnrealControllerIndex == ControllerIndex)
{
const FOculusTouchControllerState& ControllerState = ControllerPair.ControllerStates[(int32)EControllerHand::Left];
if (ControllerState.bIsConnected)
{
return true;
}
return false;
}
return false;
}
return false;
}
然后我在 IMotionController.h 中添加了这个:
virtual bool IsControllerConnected(int32 ControllerIndex)const
{
return false;
}
最后在 MyGameMode 中我添加了这个:
UFUNCTION(BlueprintCallable, Category = "Controller")
bool IsTouchConnected(int32 ControllerIndex);
TSharedPtr<IMotionController> MotionController;
并在 .cpp 中
bool AMyGameMode::IsTouchConnected(int32 ControllerIndex)
{
if (!MotionController.IsValid())
{
MotionController.Get(); //this doesn't work
}
if (MotionController.IsValid())
{
return MotionController->IsControllerConnected(ControllerIndex);
}
return false;
}
它应该是这样工作的:
1.I正在调用函数AMyGameMode::IsTouchConnected();
2.Then 它通过 MotionController 指针调用 IMotionController::IsControllerConnected。
3.Then 由于在 OculusInput 中被覆盖,Oculus 函数被调用并且 returns 我的主要目标。
现在有什么问题:
MotionController 指针似乎总是 nullptr。我不知道如何让它工作。
所以我终于做到了,所以我想 post 在这里供任何搜索它的人使用。
首先你要做的是添加到 IMotionController 新功能:
virtual bool IsControllerConnected(int32 ControllerIndex)const
{
return false;
}
然后你去 OculusInput 添加这个:
.h
virtual bool IsControllerConnected(int32 ControllerIndex)const override;
.cpp
bool FOculusInput::IsControllerConnected(int32 ControllerIndex) const
{
for (const FOculusTouchControllerPair& ControllerPair : ControllerPairs)
{
if (ControllerPair.UnrealControllerIndex == ControllerIndex)
{
const FOculusTouchControllerState& ControllerState = ControllerPair.ControllerStates[(int32)EControllerHand::Left];
if (ControllerState.bIsConnected)
{
return true;
}
return false;
}
return false;
}
return false;
}
最后在您的 class 中添加:
.h
#include "MotionControllerComponent.h"
UFUNCTION(BlueprintCallable, Category = "Controller")
bool IsTouchConnected(int32 ControllerIndex);
TSharedPtr<class UMotionControllerComponent> MCComponent;
.cpp
bool YourClass::IsTouchConnected(int32 ControllerIndex)
{
TArray<IMotionController*> controllers = IModularFeatures::Get().GetModularFeatureImplementations<IMotionController>(IMotionController::GetModularFeatureName());
for (IMotionController* MotionController : controllers)
{
return MotionController->IsControllerConnected(ControllerIndex);
}
return false;
}
使用此代码,我可以成功检查我的触摸控制器(在本例中为左侧)是否已连接 :) 希望我可以帮助任何人!
我正在重新编辑它,以使其尽可能简单。我想在我的游戏(unreal engine 4 中制作)中检测是否插入了 Oculus 触摸控制器。您可以在下面找到我到目前为止所做的事情。
首先我到目前为止做了什么: 在OculusInput.cpp
bool FOculusInput::IsControllerConnected(int32 ControllerIndex) const
{
for (const FOculusTouchControllerPair& ControllerPair : ControllerPairs)
{
if (ControllerPair.UnrealControllerIndex == ControllerIndex)
{
const FOculusTouchControllerState& ControllerState = ControllerPair.ControllerStates[(int32)EControllerHand::Left];
if (ControllerState.bIsConnected)
{
return true;
}
return false;
}
return false;
}
return false;
}
然后我在 IMotionController.h 中添加了这个:
virtual bool IsControllerConnected(int32 ControllerIndex)const
{
return false;
}
最后在 MyGameMode 中我添加了这个:
UFUNCTION(BlueprintCallable, Category = "Controller")
bool IsTouchConnected(int32 ControllerIndex);
TSharedPtr<IMotionController> MotionController;
并在 .cpp 中
bool AMyGameMode::IsTouchConnected(int32 ControllerIndex)
{
if (!MotionController.IsValid())
{
MotionController.Get(); //this doesn't work
}
if (MotionController.IsValid())
{
return MotionController->IsControllerConnected(ControllerIndex);
}
return false;
}
它应该是这样工作的: 1.I正在调用函数AMyGameMode::IsTouchConnected(); 2.Then 它通过 MotionController 指针调用 IMotionController::IsControllerConnected。 3.Then 由于在 OculusInput 中被覆盖,Oculus 函数被调用并且 returns 我的主要目标。
现在有什么问题:
MotionController 指针似乎总是 nullptr。我不知道如何让它工作。
所以我终于做到了,所以我想 post 在这里供任何搜索它的人使用。
首先你要做的是添加到 IMotionController 新功能:
virtual bool IsControllerConnected(int32 ControllerIndex)const
{
return false;
}
然后你去 OculusInput 添加这个:
.h
virtual bool IsControllerConnected(int32 ControllerIndex)const override;
.cpp
bool FOculusInput::IsControllerConnected(int32 ControllerIndex) const
{
for (const FOculusTouchControllerPair& ControllerPair : ControllerPairs)
{
if (ControllerPair.UnrealControllerIndex == ControllerIndex)
{
const FOculusTouchControllerState& ControllerState = ControllerPair.ControllerStates[(int32)EControllerHand::Left];
if (ControllerState.bIsConnected)
{
return true;
}
return false;
}
return false;
}
return false;
}
最后在您的 class 中添加:
.h
#include "MotionControllerComponent.h"
UFUNCTION(BlueprintCallable, Category = "Controller")
bool IsTouchConnected(int32 ControllerIndex);
TSharedPtr<class UMotionControllerComponent> MCComponent;
.cpp
bool YourClass::IsTouchConnected(int32 ControllerIndex)
{
TArray<IMotionController*> controllers = IModularFeatures::Get().GetModularFeatureImplementations<IMotionController>(IMotionController::GetModularFeatureName());
for (IMotionController* MotionController : controllers)
{
return MotionController->IsControllerConnected(ControllerIndex);
}
return false;
}
使用此代码,我可以成功检查我的触摸控制器(在本例中为左侧)是否已连接 :) 希望我可以帮助任何人!