Gli esempi presentati in questo documento e nel plugin sono stati realizzati in Unreal Engine 4.14, 4.15, 4.18 e 4.20+. Potrebbero non funzionare correttamente con versioni diverse di Unreal Engine.

Integrazione del plugin

Segui i passaggi indicati di seguito per includere il plugin ForceSeatMI nel tuo progetto.
  1. Crea un progetto C++ Unreal Engine
  2. All’interno della directory principale del tuo progetto, crea la directory Plugins
  3. Copia la cartella del plugin ForceSeatMI nella directory Plugins
  4. Avvia l’editor di Unreal Engine
  5. Aggiungi la dipendenza del plugin ForceSeatMI al tuo progetto all’interno di YourProject.Build.cs
    PublicDependencyModuleNames.AddRange(new string[] { "Core",  "CoreUObject",  "Engine",  "InputCore",  "ForceSeatMI" });
  6. Utenti UE 4.15+: ForceSeatMI_VehicleTelemetry richiede PhysXVehicles, quindi assicurati che questo modulo sia aggiunto al tuo progetto
  7. Dopo che tutto è stato compilato e generato, puoi iniziare a usare ForceSeatMI nella tua applicazione!
Il plugin ForceSeatMI utilizza una DLL installata come parte del software ForceSeatPM. Assicurati di avere ForceSeatPM installato sul tuo computer.

Applicazione: posizionamento della tavola superiore

Esempi:
  • TableLogPos_Unreal mostra il posizionamento in unità astratte (logiche, percentuali)
  • TablePhyPos_Unreal mostra il posizionamento in unità del mondo reale (Cinematica Inversa)
Per entrambi gli esempi, usa il profilo predefinito di ForceSeatPM SDK – Positioning. L’applicazione di posizionamento richiede l’uso dell’API ForceSeatMI grezza. La routine operativa tipica consiste nei seguenti passaggi:
  1. Crea una variabile membro puntatore all’interno della tua classe che punterà a un’istanza di IForceSeatMI_API:
    IForceSeatMI_API*  m_api;
  2. Inizializzala nel costruttore della classe:
    m_api(&IForceSeatMI::Get().GetAPI())
  3. All’avvio della simulazione chiama (ad es. nel metodo BeginPlay() della tua implementazione di APawn):
    m_api->BeginMotionControl();
  4. Il simulatore dovrebbe inviare i dati di posizionamento a intervalli costanti utilizzando una delle seguenti funzioni:
    m_api->SendTopTablePosLog(...);
    m_api->SendTopTablePosPhy(...);
    m_api->SendTopTableMatrixPhy(...);
  5. Al termine della simulazione chiama:
    m_api->EndMotionControl();
Pos Unreal Editor

Codice

Il codice seguente proviene dall’esempio TableLogPos_Unreal.
ATableLogPos_UnrealPawn::ATableLogPos_UnrealPawn()
  :  CurrentDrawingHeave(0)
  , CurrentDrawingPitch(0)
  , CurrentDrawingRoll(0)
{
  // ... codice UE4 generato rimosso per maggiore chiarezza
 
  // ForceSeatMI - INIZIO
  memset(&PlatformPosition,  0,  sizeof(PlatformPosition));
  PlatformPosition.structSize = sizeof(PlatformPosition);
 
  // Il programma demo è in grado di fornire pausa, posizione e limite di velocità
  PlatformPosition.maxSpeed =  PLATFORM_MAX_SPEED;
  PlatformPosition.mask     =  FSMI_POS_BIT_STATE  |  FSMI_POS_BIT_POSITION  |  FSMI_POS_BIT_MAX_SPEED;
  // ForceSeatMI - FINE
}
 
void  ATableLogPos_UnrealPawn::Tick(float  DeltaTime)
{
  Super::Tick(DeltaTime);
 
  // ... codice UE4 generato rimosso per maggiore chiarezza
 
  // ForceSeatMI - INIZIO
  SendCoordinatesToPlatform();
  // ForceSeatMI - FINE
}
 
void  ATableLogPos_UnrealPawn::BeginPlay()
{
  Super::BeginPlay();
 
  // ForceSeatMI - INIZIO
  if (FSMI_True  ==  IForceSeatMI::Get().GetAPI().BeginMotionControl())
  {
  SendCoordinatesToPlatform();
  }
  // ForceSeatMI - FINE
 
  // ... codice UE4 generato rimosso per maggiore chiarezza
}
 
void  ATableLogPos_UnrealPawn::EndPlay(const  EEndPlayReason::Type  EndPlayReason)
{
  Super::EndPlay(EndPlayReason);
 
  // ForceSeatMI - INIZIO
  IForceSeatMI::Get().GetAPI().EndMotionControl();
  // ForceSeatMI - FINE
}
 
void  ATableLogPos_UnrealPawn::SendCoordinatesToPlatform()
{
  // ForceSeatMI - INIZIO
  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 - FINE
}

Applicazione: simulazione di veicoli

Esempi: Telemetry_Veh_Unreal (usa il profilo predefinito di ForceSeatPM SDK – Vehicle Telemetry) Per l’applicazione di simulazione di veicoli, è possibile utilizzare l’interfaccia helper IForceSeatMI_VehicleTelemetry. IForceSeatMI_VehicleTelemetry richiede PhysXVehicles ed estrae automaticamente tutti i dati necessari dagli oggetti APawn e UWheeledVehicleMovementComponent. La routine operativa tipica consiste nei seguenti passaggi:
  1. Crea una variabile membro puntatore all’interno della tua classe che punterà a un’istanza di IForceSeatMI_VehicleTelemetry:
    IForceSeatMI_VehicleTelemetry*  m_veh;
  2. Inizializzala nel costruttore della classe:
    m_veh(&IForceSeatMI::Get().GetVehicleTelemetry())
  3. All’avvio della simulazione chiama (ad es. nel metodo BeginPlay() della tua implementazione di APawn):
    m_veh->Begin();();
  4. Il simulatore dovrebbe inviare i dati di telemetria a intervalli costanti utilizzando la seguente funzione:
    m_veh->Tick(...);
  5. Al termine della simulazione chiama:
    m_veh->End();
Veicolo Unreal Editor

Codice

Il codice seguente proviene dall’esempio Telemetry_Veh_Unreal.
void  ATelemetry_Veh_UnrealPawn::Tick(float  Delta)
{
  Super::Tick(Delta);
 
  // ... codice UE4 generato rimosso per maggiore chiarezza
 
  // ForceSeatMI - INIZIO
  IForceSeatMI::Get().GetVehicleTelemetry().Tick(*this,  *GetVehicleMovement(), Delta,  false/* nessuna pausa */);
  // ForceSeatMI - FINE
}
 
void  ATelemetry_Veh_UnrealPawn::BeginPlay()
{
  Super::BeginPlay();
 
  // ForceSeatMI - INIZIO
  IForceSeatMI::Get().GetVehicleTelemetry().Begin();
  // ForceSeatMI - FINE
}

Applicazione: simulazione di volo

Esempi: Telemetry_Fly_Unreal (usa il profilo predefinito di ForceSeatPM SDK – Plane Telemetry) Per la simulazione di volo, è possibile utilizzare un’interfaccia helper IForceSeatMI_API grezza o IForceSeatMI_PlaneTelemetry. IForceSeatMI_PlaneTelemetry estrae automaticamente tutti i dati necessari dall’oggetto APawn e calcola quindi le informazioni mancanti come le accelerazioni. La routine operativa tipica consiste nei seguenti passaggi:
  1. Crea una variabile membro puntatore all’interno della tua classe che punterà a un’istanza di IForceSeatMI_PlaneTelemetry:
    IForceSeatMI_PlaneTelemetry*  m_fly;
  2. Inizializzala nel costruttore della classe:
    m_fly(&IForceSeatMI::Get().GetPlaneTelemetry())
  3. All’avvio della simulazione chiama (ad es. nel metodo BeginPlay() della tua implementazione di APawn):
    m_fly->Begin();();
  4. Il simulatore dovrebbe inviare i dati di telemetria a intervalli costanti utilizzando la seguente funzione:
    m_fly->Tick(...);
  5. Al termine della simulazione chiama:
    m_fly->End();
Volo Unreal Editor

Codice

Il codice seguente proviene dall’esempio Telemetry_Fly_Unreal.
void  ATelemetry_Fly_UnrealPawn::Tick(float  DeltaSeconds)
{
  // ... codice UE4 generato rimosso per maggiore chiarezza
 
  /  Chiama qualsiasi implementazione Tick della  classe  genitore
  Super::Tick(DeltaSeconds);
 
  // ForceSeatMI - INIZIO
  IForceSeatMI::Get().GetPlaneTelemetry().Tick(*this, DeltaSeconds,  false/* nessuna pausa */);
  // ForceSeatMI - FINE
}
 
void  ATelemetry_Fly_UnrealPawn::BeginPlay()
{
  Super::BeginPlay();
 
  // ForceSeatMI - INIZIO
  IForceSeatMI::Get().GetPlaneTelemetry().Begin();
  // ForceSeatMI - FINE
}
Sign up to our newsletter
Always be the first to know about new products, updates and company news
  • Questo campo serve per la convalida e dovrebbe essere lasciato inalterato.