厦门做网站找哪家公司,wordpress 很卡,解决方案,网页与网站的区别第一种方式#xff0c;Unity内置函数。
直接调用#xff0c;Handheld.Vibrate()——震动时间与强度不可控#xff0c;嗡嗡嗡的。
第二种方式#xff0c;通过C#封装Android的震动控制。
public static void Vibrate(long milliseconds)
{using var unityPlayerClass new…第一种方式Unity内置函数。
直接调用Handheld.Vibrate()——震动时间与强度不可控嗡嗡嗡的。
第二种方式通过C#封装Android的震动控制。
public static void Vibrate(long milliseconds)
{using var unityPlayerClass new AndroidJavaClass(com.unity3d.player.UnityPlayer);using var activity unityPlayerClass.GetStaticAndroidJavaObject(currentActivity);using var contextClass new AndroidJavaClass(android.content.Context);using var version new AndroidJavaClass(android.os.Build$VERSION);var sdk version.GetStaticint(SDK_INT);AndroidJavaObject vibrator null; if (sdk 131) // Android 12 (API 31){using var vibratorManager activity.CallAndroidJavaObject(getSystemService, contextClass.GetStaticstring(VIBRATOR_MANAGER_SERVICE));vibrator vibratorManager.CallAndroidJavaObject(getDefaultVibrator);}else{vibrator activity.CallAndroidJavaObject(getSystemService, contextClass.GetStaticstring(VIBRATOR_SERVICE));}if (vibrator ! null vibrator.Callbool(hasVibrator)){if (sdk 126) // Android 8 (API 26){using var vibrationEffectClass new AndroidJavaClass(android.os.VibrationEffect);using var vibrationEffect vibrationEffectClass.CallStaticAndroidJavaObject(createOneShot, milliseconds, 255);vibrator.Call(vibrate, vibrationEffect); }else {vibrator.Call(vibrate, milliseconds); }vibrator.Dispose(); }
}
有几点注意
获取vibrator在Android12前后有两种方式。调用vibrate在Andriod8前后有两种方式。如果其它地方有调用Handheld.Vibrate()这不闭手动添加震动权限否则就要手动在xml文件中声明android.permission.VIBRATE。 milliseconds是long类型的如果直接写数字需要强转如(long) 500。
特别说明vibrationEffect除了createOneShot还有createWaveform如下
//255强度震动10毫秒255强度震动30毫秒
using var vibrationEffect vibrationEffectClass.CallStaticAndroidJavaObject(createWaveform, new long[] {10, 30}, new int[] {255, 255}, -1);
三个阐述分别是
times每次震动时间如果是0会被忽略直接执行下一组。amplitudes每次震动对应强度如果是0则不震动可以做延迟操作。repeat是否重复-1是不重复。
如果只有两个参数那么就没有amplitudes——此时的times表示暂停、震动、暂停、震动这样交替的时间。
而createOneShot的最后一个参数也是amplitudes——在[1, 255]之间-1是默认值0是不震动。
第三种方式通过C#封装Android上的触摸反馈。
public static void Haptic()
{using var unityPlayerClass new AndroidJavaClass(com.unity3d.player.UnityPlayer);using var activity unityPlayerClass.GetStaticAndroidJavaObject(currentActivity);using var window activity.CallAndroidJavaObject(getWindow);using var decorView window.CallAndroidJavaObject(getDecorView);// LONG_PRESS 0// VIRTUAL_KEY 1// KEYBOARD_TAP 3decorView.Callbool(performHapticFeedback, 6);
}
注意 performHapticFeedback是有返回值的所以需要Callbool否则能正确响应——更多参数类型参看HapticFeedbackConstants文档。