[Unity] Comment faire vibrer un smartphone iOS ou Android

L'article te plaît ?
  •  
  • 6
  •  
  •  
  •  
  •  
  •  
    6
    Partages

Voici comment faire vibrer ou gérer une vibration sur un téléphone Android ou iOS avec Unity.

On a tendance à oublier que le smartphone peut aussi vibrer.

Dans les jeux, la vibration peut être utilisée pour accentuer des effets, donner une information supplémentaire ou bien pour alerter le joueur qui joue sans son.

Unity permet d’utiliser la vibration sur tous les smartphones, mais pas les tablettes. Tout simplement parce que les tablettes ne sont pas équipées de vibreurs.

  • Sur iOS la vibration est fixée à 300 millisecondes (il me semble), ni plus ni moins.
  • En revanche sur Android il est possible de créer des séquences et de régler le temps de vibration.
Ringing Phone Call GIF by Cartoon Hangover - Find & Share on GIPHY

Cette ligne de code fait vibrer les téléphones iOS et Android pendant 300 millisecondes seulement. Mais impossible de régler le temps de vibration.

Handheld.Vibrate ();

En revanche, le script suivant permet de lancer et gérer des vibrations personnalisées sur Android. Pas besoin de plugins natifs en Objective-C ou en Java. Dans Unity, Java est géré grâce au JNI. Le JNI est le Android Java Native Interface, avec du code C# Unity peut interfacer avec du script natif Java. Ce JNI est très pratique lorsque l’on ne veut pas se lancer dans le développement de plugins natifs.

EDIT : J’ai codé un plugin natif amélioré pour iOS et Android à télécharger sur github.

using UnityEngine;
using System.Collections;

#if UNITY_ANDROID && !UNITY_EDITOR
public class Vibration
{


#if UNITY_ANDROID && !UNITY_EDITOR
  
  public static AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  public static AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
  public static AndroidJavaObject vibrator = currentActivity.Call<AndroidJavaObject>("getSystemService", "vibrator");
  

#else
  public static AndroidJavaClass unityPlayer;
  public static AndroidJavaObject currentActivity;
  public static AndroidJavaObject vibrator;
#endif

  public static void Vibrate ()
  {
    if ( isAndroid () )
      vibrator.Call ( "vibrate" );
    else
      Handheld.Vibrate ();
  }


  public static void Vibrate ( long milliseconds )
  {
    if ( isAndroid () )
      vibrator.Call ( "vibrate", milliseconds );
    else
      Handheld.Vibrate ();
  }

  public static void Vibrate ( long [] pattern, int repeat )
  {
    if ( isAndroid () )
      vibrator.Call ( "vibrate", pattern, repeat );
    else
      Handheld.Vibrate ();
  }

  public static bool HasVibrator ()
  {
    return isAndroid ();
  }

  public static void Cancel ()
  {
    if ( isAndroid () )
      vibrator.Call ( "cancel" );
  }

  private static bool isAndroid ()
  {

#if UNITY_ANDROID && !UNITY_EDITOR
    return true;

#else
    return false;
#endif
  }
}
#endif

Pour une vibration simple :

Vibration.Vibrate();

Pour stopper la vibration en cours sur Android. Sur iOS, il n’est pas possible de stopper une vibration.

Vibration.Cancel()

Pour une vibration de 200 millisecondes. Sur iOS, une vibration sera toujours de 300 millisecondes.

Vibration.Vibrate(200);

Pour une séquence de vibrations (pause de 0ms, vibration de 1000ms, pause de 1000ms, vibration de 1000ms, pause de 1000ms, etc.). Sur iOS, une seule vibration de 300 millisecondes sera lancée. La séquence est répétée indéfiniment et doit être stoppée avec la méthode Cancel().

long [] pattern = { 0, 1000, 1000, 1000, 1000 };
Vibration.Vibrate ( pattern, 0 );

Si vous utilisez ce script, n’hésitez pas à mettre un petit commentaire. Je suis ouvert à toutes propositions d’améliorations également.

[Unity] Comment faire vibrer un smartphone iOS ou Android
Votez pour cet article

L'article te plaît ?
  •  
  • 6
  •  
  •  
  •  
  •  
  •  
    6
    Partages

Benoit

J'adore amuser les gens avec mes jeux depuis mon plus jeune age. Je suis développeur professionnel de jeux vidéo depuis 2006, créateur de jeux vidéo indépendants, formateur dans les écoles de jeux vidéo mais aussi game designer et développeur en Freelance.

Vous aimerez aussi...

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.