2017-08-30 5 views
1

私はできるだけシンプルにするために、もう一度編集しています。私はOculusのタッチコントローラーが接続されているかどうかを検出するために私のゲームで(非現実のエンジン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で、この追加しました:MyGameModeで最後に

virtual bool IsControllerConnected(int32 ControllerIndex)const 
    { 
     return false; 
    } 

を私が追加しましたこの:

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])を含める必要があります。次に、特定の問題を解決することができます。 [ask]も読んでください。 –

+0

私はこの問題でいくつかの進歩を遂げたのでコメントしています:) –

+0

私が書いた** minimal **と** complete **という言葉を誤解していると思います。 –

答えて

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

を(この場合は左)私のタッチコントローラがある場合、私は首尾よく確認することができます接続されているかどうか:)私はそれを誰かを助けることができると思う!

関連する問題