Veuillez suivre les étapes ci-dessous afin d’inclure ForceSeatMI dans votre projet.
  1. Créez un projet Unity 3D
  2. Dans le répertoire Assets de votre projet, créez le répertoire ForceSeatMI
  3. Copiez les fichiers suivants dans le répertoire ForceSeatMI (pour référence, vous pouvez consulter n’importe lequel de nos exemples 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 utilise une DLL qui est installée dans le cadre du logiciel ForceSeatPM. Assurez-vous que ForceSeatPM est installé sur votre ordinateur.

Application : contrôle de position

Exemples :
  • TableLogPos_Unity montre le positionnement en unités abstraites (logiques, pourcentages)
  • TablePhyPos_Unity montre le positionnement en unités du monde réel (cinématique inverse)
Pour les deux exemples, utilisez le profil ForceSeatPM intégré SDK – Positioning. L’application de positionnement nécessite l’utilisation de l’API ForceSeatMI brute. La routine d’opération typique se compose des étapes suivantes :
  1. Importez ForceSeatMI
    using MotionSystems;
  2. Créez une variable d’objet API dans votre classe :
    private  ForceSeatMI m_fsmi;
  3. Initialisez-la dans la méthode Start :
    m_fsmi  = new  ForceSeatMI();
  4. Si tout est chargé, appelez :
    if (m_fsmi.IsLoaded())
    {
      m_fsmi.BeginMotionControl();
    }
  5. Le SIM doit envoyer les données de positionnement à intervalles constants en utilisant l’une des fonctions suivantes :
    m_fsmi.SendTopTablePosLog(...);
    m_fsmi.SendTopTablePosPhy(...);
    m_fsmi.SendTopTableMatrixPhy(...);
  6. À la fin de la simulation, appelez :
    if (m_fsmi.IsLoaded())
    {
      m_fsmi.EndMotionControl();
      m_fsmi.Dispose();
    }
Position de l'éditeur Unity

Code

Le code ci-dessous provient de l’exemple TableLogPos_Unity.
// API FSMI
private  ForceSeatMI m_fsmi;
 
// Position en coordonnées logiques qui sera envoyée à la plateforme
private  FSMI_TopTablePositionLogical m_platformPosition  = new  FSMI_TopTablePositionLogical();
 
void  Start  ()
{
  // Charge la bibliothèque ForceSeatMI depuis le répertoire d'installation de ForceSeatPM
  // ForceSeatMI - DÉBUT
  m_fsmi  = new  ForceSeatMI();
 
  if (m_fsmi.IsLoaded())
  {
    // Trouve les composants de la plateforme
  m_shaft  =  GameObject.Find("Shaft");
  m_board  =  GameObject.Find("Board");
 
  SaveOriginPosition();
  SaveOriginRotation();
 
    // Prépare la structure de données en la nettoyant et en définissant la taille correcte
  m_platformPosition.mask = 0;
  m_platformPosition.structSize = (byte)Marshal.SizeOf(m_platformPosition);
 
  m_platformPosition.state =  FSMI_State.NO_PAUSE;
 
    // Définit les champs qui peuvent être modifiés par l'application de démonstration
  m_platformPosition.mask =  FSMI_POS_BIT.STATE |  FSMI_POS_BIT.POSITION;
 
  m_fsmi.BeginMotionControl();
 
  SendDataToPlatform();
    // ForceSeatMI - FIN
  }
  else
  {
  Debug.LogError("La bibliothèque ForceSeatMI n'a pas été trouvée ! Veuillez installer ForceSeatPM.");
  }
}
 
void  OnDestroy()
{
  // ForceSeatMI - DÉBUT
  if (m_fsmi.IsLoaded())
  {
  m_fsmi.EndMotionControl();
  m_fsmi.Dispose();
  }
  // ForceSeatMI - FIN
}
 
private void  SendDataToPlatform()
{
  // Convertit les paramètres en unités logiques
  // ForceSeatMI - DÉBUT
  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);
 
  // Envoie les données à la plateforme
  m_fsmi.SendTopTablePosLog(ref  m_platformPosition);
  // ForceSeatMI - FIN
}

Application : simulation de véhicule

Exemples : Telemetry_Veh_Unity (utilisez le profil ForceSeatPM intégré SDK – Vehicle Telemetry) Pour l’application de simulation de véhicule, l’interface d’aide ForceSeatMI_UnityVehicle peut être utilisée. La routine d’opération typique se compose des étapes suivantes :
  1. Créez une variable d’objet API dans votre classe :
    private  ForceSeatMI_UnityVehicle m_Api;
  2. Initialisez-la dans la méthode Start :
    m_Api  = new  ForceSeatMI_UnityVehicle();
  3. Appelez :
    m_Api.Begin();
  4. Le SIM doit envoyer les données de télémétrie à intervalles constants en utilisant la fonction suivante :
      m_Api.Tick(...);
  5. À la fin de la simulation, appelez :
    m_Api.End();
Éditeur Unity Véhicule

Code

Le code ci-dessous provient de l’exemple Telemetry_Veh_Unity.
private void  Start()
{
  m_Rigidbody  =  GetComponent();
 
  // ForceSeatMI - DÉBUT
  m_Api  = new  ForceSeatMI_UnityVehicle();
  m_Api.Begin();
  // ForceSeatMI - FIN
}
 
private void  OnDestroy()
{
  // ForceSeatMI - DÉBUT
  m_Api.End();
  // ForceSeatMI - FIN
}
 
private void  Move(float  steering,  float  accel,  float  footbrake,  float  handbrake)
{
  ...
 
  // ForceSeatMI - DÉBUT
  m_Api.Tick(m_Rigidbody, Time.deltaTime,  false,  0,  0, m_CurrentGearNumber);
  // ForceSeatMI - FIN
}

Application : simulation de vol

Exemples : Telemetry_Fly_Unity (utilisez le profil ForceSeatPM intégré SDK – Plane Telemetry) Pour l’application de simulation de vol, l’interface d’aide ForceSeatMi_UnityAeroplane peut être utilisée. La routine d’opération typique se compose des étapes suivantes :
  1. Créez une variable d’objet API dans votre classe :
    private  ForceSeatMi_UnityAeroplane m_Api;
  2. Initialisez-la dans la méthode Start :
    m_Api  = new  ForceSeatMi_UnityAeroplane();
  3. Appelez :
    m_Api.Begin();
  4. Le SIM doit envoyer les données de télémétrie à intervalles constants en utilisant la fonction suivante :
      m_Api.Tick(...);
  5. À la fin de la simulation, appelez :
    m_Api.End();
Éditeur Unity Vol

Code

Le code ci-dessous provient de l’exemple Telemetry_Fly_Unity.
private void  Start()
{
  m_Rigidbody  =  GetComponent();
  m_OriginalDrag  =  m_Rigidbody.drag;
  m_OriginalAngularDrag  =  m_Rigidbody.angularDrag;
 
  // ForceSeatMI - DÉBUT
  m_Api  = new  ForceSeatMi_UnityAeroplane();
  m_Api.Begin();
  // ForceSeatMI - FIN
}
 
private void  OnDestroy()
{
  // ForceSeatMI - DÉBUT
  m_Api.End();
  // ForceSeatMI - FIN
}
 
private void  FixedUpdate()
{
  ...
 
  // ForceSeatMI - DÉBUT
  m_Api.Tick(m_Rigidbody, Time.deltaTime,  false);
  // ForceSeatMI - FIN
}
Sign up to our newsletter
Always be the first to know about new products, updates and company news
  • Ce champ n’est utilisé qu’à des fins de validation et devrait rester inchangé.