糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > Unity手机震动 Unity -> ios 震动

Unity手机震动 Unity -> ios 震动

时间:2019-10-03 10:45:56

相关推荐

Unity手机震动 Unity -> ios 震动

说明

Unity 有自己的 接口 Handheld.Vibrate() 来实现手机的震动,这里来介绍下Unity调用ios原生震动。

下面有两种方法震动的实现,用来自己测试。建议使用方法一。

方法一

1.如何调用原生ios震动

iOSHapticInterface.m 调用原生ios震动

// This iOS haptic interface is a pretty straightforward implementation of UIKit's framework :// You can learn more about these methods at /documentation/uikit/animation_and_haptics// DO NOT remove this from your project, or iOS vibrations won't work anymore!#import <Foundation/Foundation.h>UISelectionFeedbackGenerator* SelectionFeedbackGenerator;UINotificationFeedbackGenerator* NotificationFeedbackGenerator;UIImpactFeedbackGenerator* LightImpactFeedbackGenerator;UIImpactFeedbackGenerator* MediumImpactFeedbackGenerator;UIImpactFeedbackGenerator* HeavyImpactFeedbackGenerator;// INIT METHOD ---------------------------------------------------------------------------void InstantiateFeedbackGenerators(){SelectionFeedbackGenerator = [[UISelectionFeedbackGenerator alloc] init];NotificationFeedbackGenerator = [[UINotificationFeedbackGenerator alloc] init];LightImpactFeedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleLight];MediumImpactFeedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleMedium];HeavyImpactFeedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleHeavy];}// RELEASE METHOD ---------------------------------------------------------------------------void ReleaseFeedbackGenerators (){SelectionFeedbackGenerator = nil;NotificationFeedbackGenerator = nil;LightImpactFeedbackGenerator = nil;MediumImpactFeedbackGenerator = nil;HeavyImpactFeedbackGenerator = nil;}// PREPARATION METHODS ----------------------------------------------------------------------void PrepareSelectionFeedbackGenerator(){[SelectionFeedbackGenerator prepare];}void PrepareNotificationFeedbackGenerator(){[NotificationFeedbackGenerator prepare];}void PrepareLightImpactFeedbackGenerator(){[LightImpactFeedbackGenerator prepare];}void PrepareMediumImpactFeedbackGenerator(){[MediumImpactFeedbackGenerator prepare];}void PrepareHeavyImpactFeedbackGenerator(){[HeavyImpactFeedbackGenerator prepare];}// FEEDBACK TRIGGER METHODS -------------------------------------------------------------------------void SelectionHaptic(){[SelectionFeedbackGenerator prepare];[SelectionFeedbackGenerator selectionChanged];}void SuccessHaptic(){[NotificationFeedbackGenerator prepare];[NotificationFeedbackGenerator notificationOccurred:UINotificationFeedbackTypeSuccess];}void WarningHaptic(){[NotificationFeedbackGenerator prepare];[NotificationFeedbackGenerator notificationOccurred:UINotificationFeedbackTypeWarning];}void FailureHaptic(){[NotificationFeedbackGenerator prepare];[NotificationFeedbackGenerator notificationOccurred:UINotificationFeedbackTypeError];}void LightImpactHaptic(){[LightImpactFeedbackGenerator prepare];[LightImpactFeedbackGenerator impactOccurred];}void MediumImpactHaptic(){[MediumImpactFeedbackGenerator prepare];[MediumImpactFeedbackGenerator impactOccurred];}void HeavyImpactHaptic(){[HeavyImpactFeedbackGenerator prepare];[HeavyImpactFeedbackGenerator impactOccurred];}

2.资源放置

将 iOSHapticInterface.m脚本放入到Unity工程目录Assets\Plugins\IOS下。

3.Unity中代码实现

Unity中调用ios原生震动,C#代码实现

a.新建C#脚本MMVibrationManager.cs

用来调用 ios 的震动代码

using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Runtime.InteropServices;#if UNITY_IOS using UnityEngine.iOS;#endif//namespace MoreMountains.NiceVibrations//{public enum HapticTypes { Selection, Success, Warning, Failure, LightImpact, MediumImpact, HeavyImpact }/// <summary>/// This class will allow you to trigger vibrations and haptic feedbacks on both iOS and Android, /// or on each specific platform independently./// /// For haptics patterns, it takes inspiration from the iOS guidelines : /// /ios/human-interface-guidelines/user-interaction/feedback/// Of course the iOS haptics are called directly as they are, and they're crudely reproduced on Android./// Feel free to tweak the patterns or create your own./// /// Here's a brief overview of the patterns :/// /// - selection : light/// - success : light / heavy/// - warning : heavy / medium/// - failure : medium / medium / heavy / light/// - light /// - medium /// - heavy /// /// </summary>public static class MMVibrationManager {// INTERFACE ---------------------------------------------------------------------------------------------------------public static long LightDuration = 20;public static long MediumDuration = 40;public static long HeavyDuration = 80;public static int LightAmplitude = 40;public static int MediumAmplitude = 120;public static int HeavyAmplitude = 255;private static int _sdkVersion = -1;private static long[] _successPattern = { 0, LightDuration, LightDuration, HeavyDuration};private static int[] _successPatternAmplitude = { 0, LightAmplitude, 0, HeavyAmplitude};private static long[] _warningPattern = { 0, HeavyDuration, LightDuration, MediumDuration};private static int[] _warningPatternAmplitude = { 0, HeavyAmplitude, 0, MediumAmplitude};private static long[] _failurePattern = { 0, MediumDuration, LightDuration, MediumDuration, LightDuration, HeavyDuration, LightDuration, LightDuration};private static int[] _failurePatternAmplitude = { 0, MediumAmplitude, 0, MediumAmplitude, 0, HeavyAmplitude, 0, LightAmplitude};/// <summary>/// Returns true if the current platform is Android, false otherwise./// </summary>public static bool Android(){#if UNITY_ANDROID && !UNITY_EDITORreturn true;#elsereturn false;#endif}/// <summary>/// Returns true if the current platform is iOS, false otherwise/// </summary>/// <returns><c>true</c>, if O was ied, <c>false</c> otherwise.</returns>public static bool iOS(){#if UNITY_IOS && !UNITY_EDITORreturn true;#elsereturn false;#endif}/// <summary>/// Triggers a simple vibration/// </summary>public static void Vibrate(){if (Android ()){AndroidVibrate (MediumDuration);} else if (iOS ()){iOSTriggerHaptics (HapticTypes.MediumImpact);} }/// <summary>/// Triggers a haptic feedback of the specified type/// </summary>/// <param name="type">Type.</param>public static void Haptic(HapticTypes type){if (Android ()){switch (type){case HapticTypes.Selection:AndroidVibrate (LightDuration, LightAmplitude);break;case HapticTypes.Success:AndroidVibrate(_successPattern, _successPatternAmplitude, -1);break;case HapticTypes.Warning:AndroidVibrate(_warningPattern, _warningPatternAmplitude, -1);break;case HapticTypes.Failure:AndroidVibrate(_failurePattern, _failurePatternAmplitude, -1);break;case HapticTypes.LightImpact:AndroidVibrate (LightDuration, LightAmplitude);break;case HapticTypes.MediumImpact:AndroidVibrate (MediumDuration, MediumAmplitude);break;case HapticTypes.HeavyImpact:AndroidVibrate (HeavyDuration, HeavyAmplitude);break;}} else if (iOS ()){iOSTriggerHaptics (type);} }// INTERFACE END ---------------------------------------------------------------------------------------------------------// Android ---------------------------------------------------------------------------------------------------------// Android Vibration reference can be found at :// /reference/android/os/Vibrator.html// And there starting v26, with support for amplitude :// /reference/android/os/VibrationEffect.html#if UNITY_ANDROID && !UNITY_EDITORprivate static AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");private static AndroidJavaObject CurrentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");private static AndroidJavaObject AndroidVibrator = CurrentActivity.Call<AndroidJavaObject>("getSystemService", "vibrator");private static AndroidJavaClass VibrationEffectClass;private static AndroidJavaObject VibrationEffect;private static int DefaultAmplitude;#elseprivate static AndroidJavaClass UnityPlayer;private static AndroidJavaObject CurrentActivity;private static AndroidJavaObject AndroidVibrator = null;private static AndroidJavaClass VibrationEffectClass = null;private static AndroidJavaObject VibrationEffect;private static int DefaultAmplitude;#endif/// <summary>/// Requests a default vibration on Android, for the specified duration, in milliseconds/// </summary>/// <param name="milliseconds">Milliseconds.</param>public static void AndroidVibrate(long milliseconds){if (!Android ()) { return; }AndroidVibrator.Call("vibrate", milliseconds);}/// <summary>/// Requests a vibration of the specified amplitude and duration. If amplitude is not supported by the device's SDK, a default vibration will be requested/// </summary>/// <param name="milliseconds">Milliseconds.</param>/// <param name="amplitude">Amplitude.</param>public static void AndroidVibrate(long milliseconds, int amplitude){if (!Android ()) { return; }// amplitude is only supported if ((AndroidSDKVersion() < 26)) { AndroidVibrate (milliseconds); }else{VibrationEffectClassInitialization ();VibrationEffect = VibrationEffectClass.CallStatic<AndroidJavaObject> ("createOneShot", new object[] { milliseconds,amplitude });AndroidVibrator.Call ("vibrate", VibrationEffect);}}// Requests a vibration on Android for the specified pattern and optional repeat// Straight out of the Android documentation :// Pass in an array of ints that are the durations for which to turn on or off the vibrator in milliseconds. // The first value indicates the number of milliseconds to wait before turning the vibrator on. // The next value indicates the number of milliseconds for which to keep the vibrator on before turning it off. // Subsequent values alternate between durations in milliseconds to turn the vibrator off or to turn the vibrator on.// repeat: the index into pattern at which to repeat, or -1 if you don't want to repeat.public static void AndroidVibrate(long[] pattern, int repeat){if (!Android ()) { return; }if ((AndroidSDKVersion () < 26)){ AndroidVibrator.Call ("vibrate", pattern, repeat);}else{VibrationEffectClassInitialization ();VibrationEffect = VibrationEffectClass.CallStatic<AndroidJavaObject> ("createWaveform", new object[] { pattern,repeat });AndroidVibrator.Call ("vibrate", VibrationEffect);}}/// <summary>/// Requests a vibration on Android for the specified pattern, amplitude and optional repeat/// </summary>/// <param name="pattern">Pattern.</param>/// <param name="amplitudes">Amplitudes.</param>/// <param name="repeat">Repeat.</param>public static void AndroidVibrate(long[] pattern, int[] amplitudes, int repeat ){if (!Android ()) { return; }if ((AndroidSDKVersion () < 26)){ AndroidVibrator.Call ("vibrate", pattern, repeat);}else{VibrationEffectClassInitialization ();VibrationEffect = VibrationEffectClass.CallStatic<AndroidJavaObject> ("createWaveform", new object[] { pattern,amplitudes, repeat });AndroidVibrator.Call ("vibrate", VibrationEffect);}}/// <summary>/// Stops all Android vibrations that may be active/// </summary>public static void AndroidCancelVibrations(){if (!Android ()) { return; }AndroidVibrator.Call("cancel");}/// <summary>/// Initializes the VibrationEffectClass if needed./// </summary>private static void VibrationEffectClassInitialization (){if (VibrationEffectClass == null) { VibrationEffectClass = new AndroidJavaClass ("android.os.VibrationEffect"); }}/// <summary>/// Returns the current Android SDK version as an int/// </summary>/// <returns>The SDK version.</returns>public static int AndroidSDKVersion() {if (_sdkVersion == -1){int apiLevel = int.Parse (SystemInfo.operatingSystem.Substring(SystemInfo.operatingSystem.IndexOf("-") + 1, 3));_sdkVersion = apiLevel;return apiLevel;}else{return _sdkVersion;}}// Android End ---------------------------------------------------------------------------------------------------------// iOS ----------------------------------------------------------------------------------------------------------------// The following will only work if the iOSHapticInterface.m file is in a Plugins folder in your project.// It's a pretty straightforward implementation of iOS's UIFeedbackGenerator's methods.// You can learn more about them there : /documentation/uikit/uifeedbackgenerator#if UNITY_IOS && !UNITY_EDITOR[DllImport ("__Internal")]private static extern void InstantiateFeedbackGenerators();[DllImport ("__Internal")]private static extern void ReleaseFeedbackGenerators();[DllImport ("__Internal")]private static extern void SelectionHaptic();[DllImport ("__Internal")]private static extern void SuccessHaptic();[DllImport ("__Internal")]private static extern void WarningHaptic();[DllImport ("__Internal")]private static extern void FailureHaptic();[DllImport ("__Internal")]private static extern void LightImpactHaptic();[DllImport ("__Internal")]private static extern void MediumImpactHaptic();[DllImport ("__Internal")]private static extern void HeavyImpactHaptic();#elseprivate static void InstantiateFeedbackGenerators() {}private static void ReleaseFeedbackGenerators() {}private static void SelectionHaptic() {}private static void SuccessHaptic() {}private static void WarningHaptic() {}private static void FailureHaptic() {}private static void LightImpactHaptic() {}private static void MediumImpactHaptic() {}private static void HeavyImpactHaptic() {}#endifprivate static bool iOSHapticsInitialized = false;/// <summary>/// Call this method to initialize the haptics. If you forget to do it, Nice Vibrations will do it for you the first time you/// call iOSTriggerHaptics. It's better if you do it though./// </summary>public static void iOSInitializeHaptics(){if (!iOS ()) { return; }InstantiateFeedbackGenerators ();iOSHapticsInitialized = true;}/// <summary>/// Releases the feedback generators, usually you'll want to call this at OnDisable(); or anytime you know you won't need /// vibrations anymore./// </summary>public static void iOSReleaseHaptics (){if (!iOS ()) { return; }ReleaseFeedbackGenerators ();}/// <summary>/// This methods tests the current device generation against a list of devices that don't support haptics, and returns true if haptics are supported, false otherwise./// </summary>/// <returns><c>true</c>, if supported was hapticsed, <c>false</c> otherwise.</returns>public static bool HapticsSupported(){bool hapticsSupported = false;#if UNITY_IOS DeviceGeneration generation = Device.generation;if ((generation == DeviceGeneration.iPhone3G)|| (generation == DeviceGeneration.iPhone3GS)|| (generation == DeviceGeneration.iPodTouch1Gen)|| (generation == DeviceGeneration.iPodTouch2Gen)|| (generation == DeviceGeneration.iPodTouch3Gen)|| (generation == DeviceGeneration.iPodTouch4Gen)|| (generation == DeviceGeneration.iPhone4)|| (generation == DeviceGeneration.iPhone4S)|| (generation == DeviceGeneration.iPhone5)|| (generation == DeviceGeneration.iPhone5C)|| (generation == DeviceGeneration.iPhone5S)|| (generation == DeviceGeneration.iPhone6)|| (generation == DeviceGeneration.iPhone6Plus)|| (generation == DeviceGeneration.iPhone6S)|| (generation == DeviceGeneration.iPhone6SPlus)){hapticsSupported = false;}else{hapticsSupported = true;}#endifreturn hapticsSupported;}/// <summary>/// iOS only : triggers a haptic feedback of the specified type/// </summary>/// <param name="type">Type.</param>public static void iOSTriggerHaptics(HapticTypes type){if (!iOS ()) { return; }if (!iOSHapticsInitialized){iOSInitializeHaptics ();}// this will trigger a standard vibration on all the iOS devices that don't support haptic feedbackif (HapticsSupported()){switch (type){case HapticTypes.Selection:SelectionHaptic ();break;case HapticTypes.Success:SuccessHaptic ();break;case HapticTypes.Warning:WarningHaptic ();break;case HapticTypes.Failure:FailureHaptic ();break;case HapticTypes.LightImpact:LightImpactHaptic ();break;case HapticTypes.MediumImpact:MediumImpactHaptic ();break;case HapticTypes.HeavyImpact:HeavyImpactHaptic ();break;}}else{#if UNITY_IOS Handheld.Vibrate();#endif}}/// <summary>/// Returns a string containing iOS SDK informations/// </summary>/// <returns>The OSSDK version.</returns>public static string iOSSDKVersion() {#if UNITY_IOS && !UNITY_EDITORreturn Device.systemVersion;#elsereturn null;#endif}// iOS End ----------------------------------------------------------------------------------------------------------------}//}

b.新建脚本NiceVibrationsDemoManager.cs

用来供其它C# 脚本调用。

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;//namespace MoreMountains.NiceVibrations//{public class NiceVibrationsDemoManager : MonoBehaviour{/// a text object in the demo scene in which debug information will be displayedpublic Text DebugTextBox;protected string _debugString;protected string _platformString;protected const string _CURRENTVERSION = "1.2";/// <summary>/// On Awake, we initialize our iOS haptics./// Of course, this only needs to be done when on iOS, or targeting iOS. /// A test will be done and this method will do nothing if running on anything else/// </summary>protected virtual void Awake(){MMVibrationManager.iOSInitializeHaptics();}/// <summary>/// On Start, we display our debug information/// </summary>protected virtual void Start(){DisplayInformation();}/// <summary>/// Displays the debug information (API version on Android, iOS sdk version, and error message otherwise)/// </summary>protected virtual void DisplayInformation(){if (MMVibrationManager.Android()){_platformString = "API version " + MMVibrationManager.AndroidSDKVersion().ToString();}else if (MMVibrationManager.iOS()){_platformString = "iOS " + MMVibrationManager.iOSSDKVersion();}else{_platformString = Application.platform + ", not supported by Nice Vibrations for now.";}DebugTextBox.text = "Platform : " + _platformString + "\n Nice Vibrations v" + _CURRENTVERSION;}/// <summary>/// On Disable, we release our iOS haptics (to save memory and avoid garbage)./// Of course, this only needs to be done when on iOS, or targeting iOS. /// A test will be done and this method will do nothing if running on anything else/// </summary>protected virtual void OnDisable(){MMVibrationManager.iOSReleaseHaptics();}/// <summary>/// The following methods are bound (via the inspector) to buttons in the demo scene, and will call the corresponding vibration methods/// </summary>/// <summary>/// Triggers the default Unity vibration, without any control over duration, pattern or amplitude/// </summary>public virtual void TriggerDefault(){#if UNITY_IOS || UNITY_ANDROIDHandheld.Vibrate();#endif}/// <summary>/// Triggers the default Vibrate method, which will result in a medium vibration on Android and a medium impact on iOS/// </summary>public virtual void TriggerVibrate(){MMVibrationManager.Vibrate();}/// <summary>/// Triggers the selection haptic feedback, a light vibration on Android, and a light impact on iOS/// </summary>public virtual void TriggerSelection(){MMVibrationManager.Haptic(HapticTypes.Selection);}/// <summary>/// Triggers the success haptic feedback, a light then heavy vibration on Android, and a success impact on iOS/// </summary>public virtual void TriggerSuccess(){MMVibrationManager.Haptic(HapticTypes.Success);}/// <summary>/// Triggers the warning haptic feedback, a heavy then medium vibration on Android, and a warning impact on iOS/// </summary>public virtual void TriggerWarning(){MMVibrationManager.Haptic(HapticTypes.Warning);}/// <summary>/// Triggers the failure haptic feedback, a medium / heavy / heavy / light vibration pattern on Android, and a failure impact on iOS/// </summary>public virtual void TriggerFailure(){MMVibrationManager.Haptic(HapticTypes.Failure);}/// <summary>/// Triggers a light impact on iOS and a short and light vibration on Android./// </summary>public virtual void TriggerLightImpact(){MMVibrationManager.Haptic(HapticTypes.LightImpact);}/// <summary>/// Triggers a medium impact on iOS and a medium and regular vibration on Android./// </summary>public virtual void TriggerMediumImpact(){MMVibrationManager.Haptic(HapticTypes.MediumImpact);}/// <summary>/// Triggers a heavy impact on iOS and a long and heavy vibration on Android./// </summary>public virtual void TriggerHeavyImpact(){MMVibrationManager.Haptic(HapticTypes.HeavyImpact);}}//}

c.Unity场景中测试

GameObjec2节点挂了脚本NiceVibrationsDemoManager.cs

标题:

方法二

1.如何调用原生ios震动

MultiHaptic.mm 调用 ios 原生震动

#import <AudioToolbox/AudioToolbox.h>extern "C" {void _hapticMedium(){NSLog(@"%s","----xcde _hapticMedium");UIImpactFeedbackGenerator *gen = [[UIImpactFeedbackGenerator alloc]initWithStyle:UIImpactFeedbackStyleMedium];[gen prepare];[gen impactOccurred];}void _hapticLight(){NSLog(@"%s","----xcde _hapticLight");UIImpactFeedbackGenerator *gen = [[UIImpactFeedbackGenerator alloc]initWithStyle:UIImpactFeedbackStyleLight];[gen prepare];[gen impactOccurred];}void _hapticHeavy(){NSLog(@"%s","----xcde _hapticHeavy");UIImpactFeedbackGenerator *gen = [[UIImpactFeedbackGenerator alloc]initWithStyle:UIImpactFeedbackStyleHeavy];[gen prepare];[gen impactOccurred];}void _hapticHeavy_x(){NSLog(@"%s","----xcde _hapticHeavy");UIImpactFeedbackGenerator *gen = [[UIImpactFeedbackGenerator alloc]initWithStyle:UIImpactFeedbackStyleHeavy];[gen impactOccurred];}void _vibrate_x(){NSLog(@"%s","----xcde _vibrate_x");AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);}void _vibrate_xx(){NSLog(@"%s","----xcde _vibrate_xx");AudioServicesPlaySystemSound(1519);}void _vibrate_xxx(){NSLog(@"%s","----xcde _vibrate_xxx");AudioServicesPlaySystemSound(1520);}void _vibrate_xxxx(){NSLog(@"%s","----xcde _vibrate_xxxx");AudioServicesPlaySystemSound(1521);}}

2.资源放置

将 MultiHaptic.mm脚本放入到Unity工程目录Assets\Plugins\IOS下。

3.Unity中代码实现

Unity中调用ios原生震动,C#代码实现

a.新建脚本MultHaptic.cs

C# 调用 ios 震动。

using UnityEngine;using System.Runtime.InteropServices;public class MultHaptic{[DllImport("__Internal")]static extern void _hapticMedium();[DllImport("__Internal")]static extern void _hapticLight();[DllImport("__Internal")]static extern void _hapticHeavy();//------------------------------------------------------------public static void HapticLight(){Debug.Log("--------- HapticLight");if (Application.platform == RuntimePlatform.IPhonePlayer){if (PlayerPrefs.GetInt("Taptic", 1) == 1){_hapticLight();}}//_hapticLight();}public static void HapticMedium(){Debug.Log("--------- HapticMedium");if (Application.platform == RuntimePlatform.IPhonePlayer){if (PlayerPrefs.GetInt("Taptic", 1) == 1){_hapticMedium();}}//_hapticMedium();}public static void HapticHeavy(){Debug.Log("--------- HapticHeavy");if (Application.platform == RuntimePlatform.IPhonePlayer){if (PlayerPrefs.GetInt("Taptic", 1) == 1){_hapticHeavy();}}//_hapticHeavy();}///------------------------------------------------------//------------------------------------------------------//------------------------------------------------------//https://zhangqiang./article/details/105746776?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-6.baidujs&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-6.baidujs/// <summary>/// /// </summary>[DllImport("__Internal")]static extern void _vibrate_x();[DllImport("__Internal")]static extern void _vibrate_xx();[DllImport("__Internal")]static extern void _vibrate_xxx();[DllImport("__Internal")]static extern void _vibrate_xxxx();public static void HapticLight_x(){Debug.Log("--------- HapticLight_x");_vibrate_x();}public static void HapticLight_xx(){Debug.Log("--------- HapticLight_xx");_vibrate_xx();}public static void HapticLight_xxx(){Debug.Log("--------- HapticLight_xxx");_vibrate_xxx();}public static void HapticLight_xxxx(){Debug.Log("--------- HapticLight_xxxx");_vibrate_xxxx();}}

b.新建C#脚本CellphoneVibrate.cs

用来供其它C# 脚本调用。

using UnityEngine;using System.Collections;/// <summary>/// 手机摇一摇功能/// .2.22/// </summary>public class CellphoneVibrate : MonoBehaviour{private void Awake(){}#region 摇一摇手机震动void Update(){CheckVibrate();}[SerializeField]protected float m_checkValue = 0.8f;private Vector3 m_detalAcceleration;private Vector3 m_oldAcceleration;private Vector3 m_newAcceleration;/// <summary>/// 手机摇一摇功能/// </summary>private void CheckVibrate(){m_newAcceleration = Input.acceleration;m_detalAcceleration = m_newAcceleration - m_oldAcceleration;m_oldAcceleration = m_newAcceleration;if (m_detalAcceleration.x > m_checkValue ||m_detalAcceleration.y > m_checkValue ||m_detalAcceleration.z > m_checkValue){HandheldVibrate();}}public void HandheldVibrate(){Debug.LogError("--- 调用震动借口 HandheldVibrate");#if UNITY_ANDROID/// 手机震动//Handheld.Vibrate();#elif UNITY_IOS//UNITY_IPHONE不推荐使用。请改用UNITY_IOS。Debug.LogError("手机震动,是不是这个接口,没测试过");/// 手机震动,是不是这个接口,没测试过//Handheld.Vibrate();/// 同样是震动,但是这个接口已经过时的,不要用了iPhoneUtils.Vibrate();#endif}#endregion// ------------------------------------------------------------------------------// ------------------------------------------------------------------------------#region 调用 Android/ios 震动的方法public void Vibrate(int milliseconds){Debug.Log(string.Format("---- platform = {0}", Application.platform));switch (Application.platform){case RuntimePlatform.Android:CallAndroidVibrate(milliseconds);break;case RuntimePlatform.IPhonePlayer://MultHaptic.HapticLight();MultHaptic.HapticLight_x();break;}}public void VibrateShort(){Debug.Log(string.Format("---- platform = {0}", Application.platform));switch (Application.platform){case RuntimePlatform.Android:CallAndroidVibrateShort();break;case RuntimePlatform.IPhonePlayer://MultHaptic.HapticMedium();MultHaptic.HapticLight_xx();break;}}public void VibrateLong(){Debug.Log(string.Format("---- platform = {0}", Application.platform));switch (Application.platform){case RuntimePlatform.Android:CallAndroidVibrateLong();break;case RuntimePlatform.IPhonePlayer://MultHaptic.HapticHeavy();MultHaptic.HapticLight_xxx();break;}}public void VibrateCancel(){Debug.Log(string.Format("---- platform = {0}", Application.platform));switch (Application.platform){case RuntimePlatform.Android:CallAndroidCancelVibrate();break;case RuntimePlatform.IPhonePlayer://MultHaptic.HapticHeavy();MultHaptic.HapticLight_xxxx();break;}}#endregion#region 调用 Android 震动private string className = "Tools";protected void CallAndroidVibrate(int milliseconds){//AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");//AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");var javaTools = new AndroidJavaClass(className);javaTools.CallStatic("CVibrate", milliseconds);}protected void CallAndroidVibrateShort(){var javaTools = new AndroidJavaClass(className);javaTools.CallStatic("CVibrateShort");}protected void CallAndroidVibrateLong(){var javaTools = new AndroidJavaClass(className);javaTools.CallStatic("CVibrateLong");}protected void CallAndroidCancelVibrate(){var javaTools = new AndroidJavaClass(className);javaTools.CallStatic("CCancelVibrate");}#endregion// ------------------------------------------------------------------------------}

c.Unity场景中测试

GameObject 挂了脚本CellphoneVibrate

标题

相关测试代码下载地址:

/download/ZFSR05255134/15417292?spm=1001..3001.5501

里面包含了 Unity 调用 IOS/Andorid 原生震动的工程。

如果觉得《Unity手机震动 Unity -> ios 震动》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。