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.