本ドキュメントおよびプラグインで提示されている例は、Unreal Engine 4.14、4.15、4.18、および4.20以降で作成されています。異なるバージョンのUnreal Engineでは正しく動作しない可能性があります。

プラグインの統合

ForceSeatMIプラグインをプロジェクトに組み込むには、以下の手順に従ってください。
  1. C++ Unreal Engineプロジェクトを作成
  2. プロジェクトのルートディレクトリ内にPluginsディレクトリを作成
  3. ForceSeatMIプラグインフォルダをPluginsディレクトリにコピー
  4. Unreal Engineエディタを起動
  5. YourProject.Build.cs内のプロジェクトにForceSeatMIプラグインの依存関係を追加
    PublicDependencyModuleNames.AddRange(new string[] { "Core",  "CoreUObject",  "Engine",  "InputCore",  "ForceSeatMI" });
  6. UE 4.15以降のユーザー:ForceSeatMI_VehicleTelemetryにはPhysXVehiclesが必要ですので、このモジュールがプロジェクトに追加されていることを確認してください
  7. すべてがビルドおよびコンパイルされた後、アプリケーションでForceSeatMIの使用を開始できます。
ForceSeatMIプラグインは、ForceSeatPMソフトウェアの一部としてインストールされるDLLを使用します。コンピュータにForceSeatPMがインストールされていることを確認してください。

アプリケーション:トップテーブルの位置決め

例:
  • TableLogPos_Unrealは抽象的(論理的、パーセント)単位での位置決めを示します
  • TablePhyPos_Unrealは実世界の単位(逆運動学)での位置決めを示します
両方の例では、ForceSeatPMの組み込みプロファイルSDK – Positioningを使用してください。 位置決めアプリケーションには、生のForceSeatMI APIの使用が必要です。典型的な操作ルーチンは以下の手順で構成されます:
  1. IForceSeatMI_APIのインスタンスを指すポインタメンバ変数をクラス内に作成:
    IForceSeatMI_API*  m_api;
  2. クラスコンストラクタで初期化:
    m_api(&IForceSeatMI::Get().GetAPI())
  3. シミュレーション開始時に呼び出し(例:APawn実装のBeginPlay()メソッド内):
    m_api->BeginMotionControl();
  4. SIMは、以下のいずれかの関数を使用して、一定間隔で位置決めデータを送信する必要があります:
    m_api->SendTopTablePosLog(...);
    m_api->SendTopTablePosPhy(...);
    m_api->SendTopTableMatrixPhy(...);
  5. シミュレーション終了時に呼び出し:
    m_api->EndMotionControl();
Unreal Editor Pos

コード

以下のコードはTableLogPos_Unrealの例から引用しています。
ATableLogPos_UnrealPawn::ATableLogPos_UnrealPawn()
  :  CurrentDrawingHeave(0)
  , CurrentDrawingPitch(0)
  , CurrentDrawingRoll(0)
{
  // ... 明確化のため生成されたUE4コードを削除
 
  // ForceSeatMI - 開始
  memset(&PlatformPosition,  0,  sizeof(PlatformPosition));
  PlatformPosition.structSize = sizeof(PlatformPosition);
 
  // デモプログラムは一時停止、位置、速度制限を提供可能
  PlatformPosition.maxSpeed =  PLATFORM_MAX_SPEED;
  PlatformPosition.mask     =  FSMI_POS_BIT_STATE  |  FSMI_POS_BIT_POSITION  |  FSMI_POS_BIT_MAX_SPEED;
  // ForceSeatMI - 終了
}
 
void  ATableLogPos_UnrealPawn::Tick(float  DeltaTime)
{
  Super::Tick(DeltaTime);
 
  // ... 明確化のため生成されたUE4コードを削除
 
  // ForceSeatMI - 開始
  SendCoordinatesToPlatform();
  // ForceSeatMI - 終了
}
 
void  ATableLogPos_UnrealPawn::BeginPlay()
{
  Super::BeginPlay();
 
  // ForceSeatMI - 開始
  if (FSMI_True  ==  IForceSeatMI::Get().GetAPI().BeginMotionControl())
  {
  SendCoordinatesToPlatform();
  }
  // ForceSeatMI - 終了
 
  // ... 明確化のため生成されたUE4コードを削除
}
 
void  ATableLogPos_UnrealPawn::EndPlay(const  EEndPlayReason::Type  EndPlayReason)
{
  Super::EndPlay(EndPlayReason);
 
  // ForceSeatMI - 開始
  IForceSeatMI::Get().GetAPI().EndMotionControl();
  // ForceSeatMI - 終了
}
 
void  ATableLogPos_UnrealPawn::SendCoordinatesToPlatform()
{
  // ForceSeatMI - 開始
  PlatformPosition.state =  FSMI_STATE_NO_PAUSE;
  PlatformPosition.roll = static_cast(FMath::Clamp(CurrentDrawingRoll  /  DRAWING_ROLL_MAX  *  PLATFORM_POSITION_LOGIC_MAX, PLATFORM_POSITION_LOGIC_MIN, PLATFORM_POSITION_LOGIC_MAX));
  PlatformPosition.pitch = static_cast(FMath::Clamp(CurrentDrawingPitch  /  DRAWING_PITCH_MAX  *  PLATFORM_POSITION_LOGIC_MAX, PLATFORM_POSITION_LOGIC_MIN, PLATFORM_POSITION_LOGIC_MAX));
  PlatformPosition.heave = static_cast(FMath::Clamp(CurrentDrawingHeave  /  DRAWING_HEAVE_MAX  *  PLATFORM_POSITION_LOGIC_MAX, PLATFORM_POSITION_LOGIC_MIN, PLATFORM_POSITION_LOGIC_MAX));
 
  IForceSeatMI::Get().GetAPI().SendTopTablePosLog(&PlatformPosition);
  // ForceSeatMI - 終了
}

アプリケーション:車両シミュレーション

例: Telemetry_Veh_Unreal(ForceSeatPMの組み込みプロファイルSDK – Vehicle Telemetryを使用) 車両シミュレーションアプリケーションには、IForceSeatMI_VehicleTelemetryヘルパーインターフェースを使用できます。IForceSeatMI_VehicleTelemetryには PhysXVehiclesが必要で、APawnおよびUWheeledVehicleMovementComponentオブジェクトから必要なすべてのデータを自動的に抽出します。 典型的な操作ルーチンは以下の手順で構成されます:
  1. IForceSeatMI_VehicleTelemetryのインスタンスを指すポインタメンバ変数をクラス内に作成:
    IForceSeatMI_VehicleTelemetry*  m_veh;
  2. クラスコンストラクタで初期化:
    m_veh(&IForceSeatMI::Get().GetVehicleTelemetry())
  3. シミュレーション開始時に呼び出し(例:APawn実装のBeginPlay()メソッド内):
    m_veh->Begin();();
  4. SIMは、以下の関数を使用して、一定間隔でテレメトリデータを送信する必要があります:
    m_veh->Tick(...);
  5. シミュレーション終了時に呼び出し:
    m_veh->End();
Unreal Editor Veh

コード

以下のコードはTelemetry_Veh_Unrealの例から引用しています。
void  ATelemetry_Veh_UnrealPawn::Tick(float  Delta)
{
  Super::Tick(Delta);
 
  // ... 明確化のため生成されたUE4コードを削除
 
  // ForceSeatMI - 開始
  IForceSeatMI::Get().GetVehicleTelemetry().Tick(*this,  *GetVehicleMovement(), Delta,  false/* 一時停止なし */);
  // ForceSeatMI - 終了
}
 
void  ATelemetry_Veh_UnrealPawn::BeginPlay()
{
  Super::BeginPlay();
 
  // ForceSeatMI - 開始
  IForceSeatMI::Get().GetVehicleTelemetry().Begin();
  // ForceSeatMI - 終了
}

アプリケーション:フライトシミュレーション

例: Telemetry_Fly_Unreal(ForceSeatPMの組み込みプロファイルSDK – Plane Telemetryを使用) フライトシミュレーションには、生のIForceSeatMI_APIまたはIForceSeatMI_PlaneTelemetryヘルパーインターフェースを使用できます。IForceSeatMI_PlaneTelemetryは、APawnオブジェクトから 必要なすべてのデータを自動的に抽出し、加速度などの不足している情報を計算します。 典型的な操作ルーチンは以下の手順で構成されます:
  1. IForceSeatMI_PlaneTelemetryのインスタンスを指すポインタメンバ変数をクラス内に作成:
    IForceSeatMI_PlaneTelemetry*  m_fly;
  2. クラスコンストラクタで初期化:
    m_fly(&IForceSeatMI::Get().GetPlaneTelemetry())
  3. シミュレーション開始時に呼び出し(例:APawn実装のBeginPlay()メソッド内):
    m_fly->Begin();();
  4. SIMは、以下の関数を使用して、一定間隔でテレメトリデータを送信する必要があります:
    m_fly->Tick(...);
  5. シミュレーション終了時に呼び出し:
    m_fly->End();
Unreal Editor Fly

コード

以下のコードはTelemetry_Fly_Unrealの例から引用しています。
void  ATelemetry_Fly_UnrealPawn::Tick(float  DeltaSeconds)
{
  // ... 明確化のため生成されたUE4コードを削除
 
  /class  Tick実装を呼び出し
  Super::Tick(DeltaSeconds);
 
  // ForceSeatMI - 開始
  IForceSeatMI::Get().GetPlaneTelemetry().Tick(*this, DeltaSeconds,  false/* 一時停止なし */);
  // ForceSeatMI - 終了
}
 
void  ATelemetry_Fly_UnrealPawn::BeginPlay()
{
  Super::BeginPlay();
 
  // ForceSeatMI - 開始
  IForceSeatMI::Get().GetPlaneTelemetry().Begin();
  // ForceSeatMI - 終了
}
Sign up to our newsletter
Always be the first to know about new products, updates and company news
  • このフィールドは入力チェック用です。変更しないでください。