Accorder la permission de vibration dans un projet Unity mobile
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
- Dans
Edit/Project Settings/Player/Publishing Settings, cochez l’optionCustom Main Manifest. - Un fichier
AndroidManifest.xmlmodifiable est créé dans le dossierAssets/Plugins/Androiddu projet. - Ajoutez la ligne
<uses-permission android:name="android.permission.VIBRATE" />à l’intérieur de la balisemanifestdu 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.