De voorbeelden in dit document en de plugin zijn gemaakt in Unreal Engine 4.14, 4.15, 4.18 en 4.20+. Ze werken mogelijk niet correct met andere versies van de Unreal Engine.

Plugin-integratie

Volg de onderstaande stappen om de ForceSeatMI-plugin in je project op te nemen.
  1. Maak een C++ Unreal Engine-project aan
  2. Maak in de hoofdmap van je project een map genaamd Plugins aan
  3. Kopieer de ForceSeatMI plugin-map naar de Plugins-map
  4. Start de Unreal Engine editor
  5. Voeg de ForceSeatMI plugin-dependency toe aan je project in YourProject.Build.cs
    PublicDependencyModuleNames.AddRange(new string[] { "Core",  "CoreUObject",  "Engine",  "InputCore",  "ForceSeatMI" });
  6. UE 4.15+ gebruikers: ForceSeatMI_VehicleTelemetry vereist PhysXVehicles, dus zorg ervoor dat deze module aan je project is toegevoegd
  7. Zodra alles is gebouwd en gecompileerd, kun je ForceSeatMI in je applicatie gaan gebruiken!
De ForceSeatMI-plugin maakt gebruik van een DLL die wordt geïnstalleerd als onderdeel van de ForceSeatPM-software. Zorg ervoor dat ForceSeatPM op je computer is geïnstalleerd.

Applicatie: positionering bovenplaat

Voorbeelden:
  • TableLogPos_Unreal toont positionering in abstracte (logische, percentages) eenheden
  • TablePhyPos_Unreal toont positionering in fysieke eenheden (Inverse Kinematics)
Gebruik voor beide voorbeelden het ingebouwde ForceSeatPM-profiel SDK – Positioning. De positioneringsapplicatie vereist het gebruik van de ruwe ForceSeatMI API. Een typische routine bestaat uit de volgende stappen:
  1. Maak een pointer-lidvariabele aan in je class die naar een instantie van IForceSeatMI_API verwijst:
    IForceSeatMI_API*  m_api;
  2. Initialiseer deze in de class constructor:
    m_api(&IForceSeatMI::Get().GetAPI())
  3. Roep dit aan wanneer de simulatie start (bijv. in de BeginPlay() methode van je APawn implementatie):
    m_api->BeginMotionControl();
  4. De simulator moet positioneringsgegevens in constante intervallen verzenden met een van de volgende functies:
    m_api->SendTopTablePosLog(...);
    m_api->SendTopTablePosPhy(...);
    m_api->SendTopTableMatrixPhy(...);
  5. Roep aan het einde van de simulatie aan:
    m_api->EndMotionControl();
Unreal Editor Pos

Code

De onderstaande code is afkomstig uit het TableLogPos_Unreal voorbeeld.
ATableLogPos_UnrealPawn::ATableLogPos_UnrealPawn()
  :  CurrentDrawingHeave(0)
  , CurrentDrawingPitch(0)
  , CurrentDrawingRoll(0)
{
  // ... gegenereerde UE4-code verwijderd voor de duidelijkheid
 
  // ForceSeatMI - BEGIN
  memset(&PlatformPosition,  0,  sizeof(PlatformPosition));
  PlatformPosition.structSize = sizeof(PlatformPosition);
 
  // Het demoprogramma kan pauze, positie en snelheidslimiet bieden
  PlatformPosition.maxSpeed =  PLATFORM_MAX_SPEED;
  PlatformPosition.mask     =  FSMI_POS_BIT_STATE  |  FSMI_POS_BIT_POSITION  |  FSMI_POS_BIT_MAX_SPEED;
  // ForceSeatMI - END
}
 
void  ATableLogPos_UnrealPawn::Tick(float  DeltaTime)
{
  Super::Tick(DeltaTime);
 
  // ... gegenereerde UE4-code verwijderd voor de duidelijkheid
 
  // ForceSeatMI - BEGIN
  SendCoordinatesToPlatform();
  // ForceSeatMI - END
}
 
void  ATableLogPos_UnrealPawn::BeginPlay()
{
  Super::BeginPlay();
 
  // ForceSeatMI - BEGIN
  if (FSMI_True  ==  IForceSeatMI::Get().GetAPI().BeginMotionControl())
  {
  SendCoordinatesToPlatform();
  }
  // ForceSeatMI - END
 
  // ... gegenereerde UE4-code verwijderd voor de duidelijkheid
}
 
void  ATableLogPos_UnrealPawn::EndPlay(const  EEndPlayReason::Type  EndPlayReason)
{
  Super::EndPlay(EndPlayReason);
 
  // ForceSeatMI - BEGIN
  IForceSeatMI::Get().GetAPI().EndMotionControl();
  // ForceSeatMI - END
}
 
void  ATableLogPos_UnrealPawn::SendCoordinatesToPlatform()
{
  // ForceSeatMI - BEGIN
  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 - END
}

Applicatie: voertuigsimulatie

Voorbeelden: Telemetry_Veh_Unreal (gebruik het ingebouwde ForceSeatPM-profiel SDK – Vehicle Telemetry) Voor voertuigsimulatie-applicaties kan de IForceSeatMI_VehicleTelemetry helper-interface worden gebruikt. IForceSeatMI_VehicleTelemetry vereist PhysXVehicles en extraheert automatisch alle benodigde gegevens uit APawn- en UWheeledVehicleMovementComponent-objecten. Een typische routine bestaat uit de volgende stappen:
  1. Maak een pointer-lidvariabele aan in je class die naar een instantie van IForceSeatMI_VehicleTelemetry verwijst:
    IForceSeatMI_VehicleTelemetry*  m_veh;
  2. Initialiseer deze in de class constructor:
    m_veh(&IForceSeatMI::Get().GetVehicleTelemetry())
  3. Roep dit aan wanneer de simulatie start (bijv. in de BeginPlay() methode van je APawn implementatie):
    m_veh->Begin();();
  4. De simulator moet telemetriegegevens in constante intervallen verzenden met de volgende functie:
    m_veh->Tick(...);
  5. Roep aan het einde van de simulatie aan:
    m_veh->End();
Unreal Editor Veh

Code

De onderstaande code is afkomstig uit het Telemetry_Veh_Unreal voorbeeld.
void  ATelemetry_Veh_UnrealPawn::Tick(float  Delta)
{
  Super::Tick(Delta);
 
  // ... gegenereerde UE4-code verwijderd voor de duidelijkheid
 
  // ForceSeatMI - BEGIN
  IForceSeatMI::Get().GetVehicleTelemetry().Tick(*this,  *GetVehicleMovement(), Delta,  false/* geen pauze */);
  // ForceSeatMI - END
}
 
void  ATelemetry_Veh_UnrealPawn::BeginPlay()
{
  Super::BeginPlay();
 
  // ForceSeatMI - BEGIN
  IForceSeatMI::Get().GetVehicleTelemetry().Begin();
  // ForceSeatMI - END
}

Applicatie: vluchtsimulatie

Voorbeelden: Telemetry_Fly_Unreal (gebruik het ingebouwde ForceSeatPM-profiel SDK – Plane Telemetry) Voor vluchtsimulatie kan een ruwe IForceSeatMI_API of de IForceSeatMI_PlaneTelemetry helper-interface worden gebruikt. IForceSeatMI_PlaneTelemetry extraheert automatisch alle benodigde gegevens uit het APawn-object en berekent vervolgens ontbrekende informatie zoals versnellingen. Een typische routine bestaat uit de volgende stappen:
  1. Maak een pointer-lidvariabele aan in je class die naar een instantie van IForceSeatMI_PlaneTelemetry verwijst:
    IForceSeatMI_PlaneTelemetry*  m_fly;
  2. Initialiseer deze in de class constructor:
    m_fly(&IForceSeatMI::Get().GetPlaneTelemetry())
  3. Roep dit aan wanneer de simulatie start (bijv. in de BeginPlay() methode van je APawn implementatie):
    m_fly->Begin();();
  4. De simulator moet telemetriegegevens in constante intervallen verzenden met de volgende functie:
    m_fly->Tick(...);
  5. Roep aan het einde van de simulatie aan:
    m_fly->End();
Unreal Editor Fly

Code

De onderstaande code is afkomstig uit het Telemetry_Fly_Unreal voorbeeld.
void  ATelemetry_Fly_UnrealPawn::Tick(float  DeltaSeconds)
{
  // ... gegenereerde UE4-code verwijderd voor de duidelijkheid
 
  /  Roep een willekeurige parent  class  Tick-implementatie aan
  Super::Tick(DeltaSeconds);
 
  // ForceSeatMI - BEGIN
  IForceSeatMI::Get().GetPlaneTelemetry().Tick(*this, DeltaSeconds,  false/* geen pauze */);
  // ForceSeatMI - END
}
 
void  ATelemetry_Fly_UnrealPawn::BeginPlay()
{
  Super::BeginPlay();
 
  // ForceSeatMI - BEGIN
  IForceSeatMI::Get().GetPlaneTelemetry().Begin();
  // ForceSeatMI - END
}
Sign up to our newsletter
Always be the first to know about new products, updates and company news
  • Dit veld is bedoeld voor validatiedoeleinden en moet niet worden gewijzigd.