Basé sur Android !

Dans Unity, la vibration s’utilise par dĂ©faut avec Handheld.Vibrate(), mais l’intensitĂ© et la durĂ©e de la vibration Ă©tant fixes, on utilise gĂ©nĂ©ralement la mĂ©thode suivante.

Ajouter le fichier Manifest

  1. Dans Edit/Project Settings/Player/Publishing Settings, cochez l’option Custom Main Manifest.
  2. Un fichier AndroidManifest.xml modifiable est créé dans le dossier Assets/Plugins/Android du projet.
  3. Ajoutez la ligne <uses-permission android:name="android.permission.VIBRATE" /> Ă  l’intĂ©rieur de la balise manifest du fichier.
<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <application>
        <!--Utilisé lorsque l'entrée de l'application est réglée sur Activity, sinon supprimer ce bloc activity-->
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:theme="@style/UnityThemeSelector">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
        <!--Utilisé lorsque l'entrée de l'application est réglée sur GameActivity, sinon supprimer ce bloc activity-->
        <activity android:name="com.unity3d.player.UnityPlayerGameActivity"
                  android:theme="@style/BaseUnityGameActivityTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
            <meta-data android:name="android.app.lib_name" android:value="game" />
        </activity>
    </application>
    <uses-permission android:name="android.permission.VIBRATE" />
</manifest>

Le fichier AndroidManifest.xml final ressemble Ă  ce qui prĂ©cĂšde. Les applications buildĂ©es Ă  partir de ce fichier demanderont la permission de vibration, et celle-ci pourra ĂȘtre activĂ©e si le joueur l’autorise.

Ajouter la classe Vibration

Ajoutez un fichier C# Ă  n’importe quel emplacement du projet, collez le code ci-dessous et enregistrez-le. Il est gĂ©nĂ©ralement placĂ© dans le dossier Assets/Scripts.

using System.Collections;
using UnityEngine;
 
public static class Vibration
{
#if UNITY_ANDROID && !UNITY_EDITOR
    public static AndroidJavaClass AndroidPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    public static AndroidJavaObject AndroidcurrentActivity = AndroidPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    public static AndroidJavaObject AndroidVibrator = AndroidcurrentActivity.Call<AndroidJavaObject>("getSystemService", "vibrator");
#endif
    public static void Vibrate()
    {
#if UNITY_ANDROID && !UNITY_EDITOR
        AndroidVibrator.Call("vibrate");
#else
        Handheld.Vibrate();
#endif
    }
 
    public static void Vibrate(long milliseconds)
    {
#if UNITY_ANDROID && !UNITY_EDITOR
        AndroidVibrator.Call("vibrate", milliseconds);
#else
        Handheld.Vibrate();
#endif
    }

    public static void Vibrate(long[] pattern, int repeat)
    { 
#if UNITY_ANDROID && !UNITY_EDITOR
        AndroidVibrator.Call("vibrate", pattern, repeat);
#else
        Handheld.Vibrate();
#endif
    }
 
    public static void Cancel()
    {
#if UNITY_ANDROID && !UNITY_EDITOR
            AndroidVibrator.Call("cancel");
#endif
    }
}

Cette classe Ă©tant statique, elle fonctionne correctement quel que soit l’endroit oĂč on l’écrit dans le projet. Elle reçoit la durĂ©e de vibration sous forme de paramĂštre long et appelle AndroidVibrator.Call(). Par exemple, on peut l’utiliser comme Vibration.Vibrate(long(1000));. Personnellement, j’ai trouvĂ© que long(10) donnait un bon rĂ©sultat.

Exemple d’utilisation

public void Vibrate()
{
    if (MainManager.ActivatedObject == gameObject)
        Vibration.Vibrate((long)10);
}

Je l’ai utilisĂ© ainsi dans un projet prĂ©cĂ©dent. Lorsque le joueur touche un objet spĂ©cifique, cet objet est activĂ© et enregistrĂ© dans ActivatedObject du MainManager. Cela a bien fonctionnĂ©, Ă  ma satisfaction.

Mis Ă  jour le 2025-07-28 !

public static void Vibrate()
{
    if (PlayerPrefs.GetInt("VibrationEnabled", 1) == 1)
    {
#if UNITY_ANDROID && !UNITY_EDITOR
        AndroidVibrator.Call("vibrate");
#else
        Handheld.Vibrate();
#endif
    }
}

Ou encore, on peut ajouter une simple ligne de code Ă  Vibration() comme ci-dessus pour que la vibration ne se dĂ©clenche que si elle est autorisĂ©e. AprĂšs l’avoir utilisĂ© moi-mĂȘme, il m’a semblĂ© que passer par une Ă©tape de vĂ©rification de condition Ă©tait meilleur, tant conceptuellement que pratiquement.