2017-08-30 84 views
1

我正在編輯它,使其儘可能簡單。我希望在我的遊戲中有能力(用虛幻引擎4製作)來檢測Oculus Touch控制器是否插入。下面你可以找到我到目前爲止所做的。如何檢測插入/插入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(); 2.然後通過MotionController指針調用IMotionController :: IsControllerConnected。 3.然後由於在OculusInput中過度訓練,Oculus函數被調用並返回我的主要目標。

什麼現在是錯誤的:

MotionController指針似乎永遠是nullptr。我不知道如何使它工作。

+0

請[編輯]您的問題,以顯示[你到目前爲止的代碼](http://whathaveyoutried.com)。你至少應該包括一個你遇到問題的代碼大綱(但最好是[mcve]),然後我們可以嘗試幫助解決具體問題。你還應該閱讀[問]。 –

+0

我評論因爲我已經在這個問題上取得了一些進展,我認爲:) –

+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; 
} 

有了這個代碼,我可以成功地檢查我的觸摸控制器(在這種情況下左)被連接與否:)希望我能幫助任何人與它!