Segui i passaggi riportati di seguito per includere ForceSeatMI nel tuo progetto.
  1. Crea un progetto Unity 3D
  2. All’interno della directory Assets del tuo progetto, crea la directory ForceSeatMI
  3. Copia i seguenti file nella directory ForceSeatMI (come riferimento puoi consultare uno qualsiasi dei nostri esempi Unity 3D)
    • ForceSeatMI.cs
    • ForceSeatMI_Common.cs
    • ForceSeatMI_Positioning.cs
    • ForceSeatMI_Status.cs
    • ForceSeatMI_TactileTranscuders.cs
    • ForceSeatMI_Telemetry.cs
    • ForceSeatMi_UnityAeroplane.cs
    • ForceSeatMi_UnityVehicle.cs
L’API ForceSeatMI utilizza una DLL che viene installata come parte del software ForceSeatPM. Assicurati di avere ForceSeatPM installato sul tuo computer.

Applicazione: controllo della posizione

Esempi:
  • TableLogPos_Unity mostra il posizionamento in unità astratte (logiche, percentuali)
  • TablePhyPos_Unity mostra il posizionamento in unità del mondo reale (Cinematica Inversa)
Per entrambi gli esempi, utilizza il profilo integrato di ForceSeatPM SDK – Positioning. L’applicazione di posizionamento richiede l’uso dell’API ForceSeatMI grezza. La routine operativa tipica consiste nei seguenti passaggi:
  1. Importa ForceSeatMI
    using MotionSystems;
  2. Crea una variabile oggetto API all’interno della tua classe:
    private  ForceSeatMI m_fsmi;
  3. Inizializzala nel metodo Start:
    m_fsmi  = new  ForceSeatMI();
  4. Se tutto è caricato, chiama:
    if (m_fsmi.IsLoaded())
    {
      m_fsmi.BeginMotionControl();
    }
  5. Il simulatore dovrebbe inviare i dati di posizionamento a intervalli costanti utilizzando una delle seguenti funzioni:
    m_fsmi.SendTopTablePosLog(...);
    m_fsmi.SendTopTablePosPhy(...);
    m_fsmi.SendTopTableMatrixPhy(...);
  6. Al termine della simulazione, chiama:
    if (m_fsmi.IsLoaded())
    {
      m_fsmi.EndMotionControl();
      m_fsmi.Dispose();
    }
Posizione Editor Unity

Codice

Il codice seguente proviene dall’esempio TableLogPos_Unity.
// API FSMI
private  ForceSeatMI m_fsmi;
 
// Posizione in coordinate logiche che verrà inviata alla piattaforma
private  FSMI_TopTablePositionLogical m_platformPosition  = new  FSMI_TopTablePositionLogical();
 
void  Start  ()
{
  // Carica la libreria ForceSeatMI dalla directory di installazione di ForceSeatPM
  // ForceSeatMI - INIZIO
  m_fsmi  = new  ForceSeatMI();
 
  if (m_fsmi.IsLoaded())
  {
    // Trova i componenti della piattaforma
  m_shaft  =  GameObject.Find("Shaft");
  m_board  =  GameObject.Find("Board");
 
  SaveOriginPosition();
  SaveOriginRotation();
 
    // Prepara la struttura dati svuotandola e impostando la dimensione corretta
  m_platformPosition.mask = 0;
  m_platformPosition.structSize = (byte)Marshal.SizeOf(m_platformPosition);
 
  m_platformPosition.state =  FSMI_State.NO_PAUSE;
 
    // Imposta i campi che possono essere modificati dall'applicazione demo
  m_platformPosition.mask =  FSMI_POS_BIT.STATE |  FSMI_POS_BIT.POSITION;
 
  m_fsmi.BeginMotionControl();
 
  SendDataToPlatform();
    // ForceSeatMI - FINE
  }
  else
  {
  Debug.LogError("Libreria ForceSeatMI non trovata! Installa ForceSeatPM.");
  }
}
 
void  OnDestroy()
{
  // ForceSeatMI - INIZIO
  if (m_fsmi.IsLoaded())
  {
  m_fsmi.EndMotionControl();
  m_fsmi.Dispose();
  }
  // ForceSeatMI - FINE
}
 
private void  SendDataToPlatform()
{
  // Converti i parametri in unità logiche
  // ForceSeatMI - INIZIO
  m_platformPosition.state =  FSMI_State.NO_PAUSE;
  m_platformPosition.roll = (short)Mathf.Clamp(m_roll  /  DRAWING_ROLL_MAX  *  PLATFORM_POSITION_LOGIC_MAX, PLATFORM_POSITION_LOGIC_MIN, PLATFORM_POSITION_LOGIC_MAX);
  m_platformPosition.pitch = (short)Mathf.Clamp(m_pitch  /  DRAWING_PITCH_MAX  *  PLATFORM_POSITION_LOGIC_MAX, PLATFORM_POSITION_LOGIC_MIN, PLATFORM_POSITION_LOGIC_MAX);
  m_platformPosition.heave = (short)Mathf.Clamp(m_heave  /  DRAWING_HEAVE_MAX  *  PLATFORM_POSITION_LOGIC_MAX, PLATFORM_POSITION_LOGIC_MIN, PLATFORM_POSITION_LOGIC_MAX);
 
  // Invia i dati alla piattaforma
  m_fsmi.SendTopTablePosLog(ref  m_platformPosition);
  // ForceSeatMI - FINE
}

Applicazione: simulazione di veicoli

Esempi: Telemetry_Veh_Unity (utilizza il profilo integrato di ForceSeatPM SDK – Vehicle Telemetry) Per l’applicazione di simulazione di veicoli è possibile utilizzare l’interfaccia helper ForceSeatMI_UnityVehicle. La routine operativa tipica consiste nei seguenti passaggi:
  1. Crea una variabile oggetto API all’interno della tua classe:
    private  ForceSeatMI_UnityVehicle m_Api;
  2. Inizializzala nel metodo Start:
    m_Api  = new  ForceSeatMI_UnityVehicle();
  3. Chiama:
    m_Api.Begin();
  4. Il simulatore dovrebbe inviare i dati di telemetria a intervalli costanti utilizzando la seguente funzione:
      m_Api.Tick(...);
  5. Al termine della simulazione, chiama:
    m_Api.End();
Veicolo Editor Unity

Codice

Il codice seguente proviene dall’esempio Telemetry_Veh_Unity.
private void  Start()
{
  m_Rigidbody  =  GetComponent();
 
  // ForceSeatMI - INIZIO
  m_Api  = new  ForceSeatMI_UnityVehicle();
  m_Api.Begin();
  // ForceSeatMI - FINE
}
 
private void  OnDestroy()
{
  // ForceSeatMI - INIZIO
  m_Api.End();
  // ForceSeatMI - FINE
}
 
private void  Move(float  steering,  float  accel,  float  footbrake,  float  handbrake)
{
  ...
 
  // ForceSeatMI - INIZIO
  m_Api.Tick(m_Rigidbody, Time.deltaTime,  false,  0,  0, m_CurrentGearNumber);
  // ForceSeatMI - FINE
}

Applicazione: simulazione di volo

Esempi: Telemetry_Fly_Unity (utilizza il profilo integrato di ForceSeatPM SDK – Plane Telemetry) Per l’applicazione di simulazione di volo è possibile utilizzare l’interfaccia helper ForceSeatMi_UnityAeroplane. La routine operativa tipica consiste nei seguenti passaggi:
  1. Crea una variabile oggetto API all’interno della tua classe:
    private  ForceSeatMi_UnityAeroplane m_Api;
  2. Inizializzala nel metodo Start:
    m_Api  = new  ForceSeatMi_UnityAeroplane();
  3. Chiama:
    m_Api.Begin();
  4. Il simulatore dovrebbe inviare i dati di telemetria a intervalli costanti utilizzando la seguente funzione:
      m_Api.Tick(...);
  5. Al termine della simulazione, chiama:
    m_Api.End();
Volo Editor Unity

Codice

Il codice seguente proviene dall’esempio Telemetry_Fly_Unity.
private void  Start()
{
  m_Rigidbody  =  GetComponent();
  m_OriginalDrag  =  m_Rigidbody.drag;
  m_OriginalAngularDrag  =  m_Rigidbody.angularDrag;
 
  // ForceSeatMI - INIZIO
  m_Api  = new  ForceSeatMI_UnityAeroplane();
  m_Api.Begin();
  // ForceSeatMI - FINE
}
 
private void  OnDestroy()
{
  // ForceSeatMI - INIZIO
  m_Api.End();
  // ForceSeatMI - FINE
}
 
private void  FixedUpdate()
{
  ...
 
  // ForceSeatMI - INIZIO
  m_Api.Tick(m_Rigidbody, Time.deltaTime,  false);
  // 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.