我再次编辑它,尽可能简单。我希望我的游戏能力(在虚幻引擎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.我正在调用函数AMyGameMode :: IsTouchConnected(); 然后它通过MotionController指针调用IMotionController :: IsControllerConnected。 3.然后由于OculusInput中的压力过大,Oculus函数被调用并返回我的主要目标。
现在出了什么问题:
MotionController指针似乎总是为nullptr。我不知道如何使它工作。
答案 0 :(得分:0)
所以我终于成功了,所以我想在这里发帖给所有搜索它的人。
首先,您要做的是添加到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;
}
最后在课堂上你要加上这个:
·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;
}
使用此代码,我可以成功检查我的触控器(在这种情况下是左侧)是否已连接:)希望我可以帮助任何人使用它!