Unity实现震动反馈效果

发表于2019-01-09
评论0 8.8k浏览
手机的震动效果相信大家都不陌生,知道这个功能,但是有多少人了解这个功能是怎么实现出来的呢,又如何将这个功能结合到我们在做的项目中去呢,下面就给大家分享下在unity中如何去实现震动反馈效果。

一、Unity中提供了震动的接口:Handheld.Vibrate(); Unity提供的这个接口的震动时长是0.5s。不能缩短震动时长。

二、在Unity中要自定义震动时长的话,那就得在android工程和Xcode工程分别实现震动功能,再在unity中进行调用。

android工程震动:
///供unity调用的接口
public void setVibrator()
{
    Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
    ///调用android系统的震动接口,自定义时间为5毫秒
    vibrator.vibrate(5);
}

XCode工程震动:
.h文件
void setVibratorIOS();

.m文件
#import <UIKit/UIFeedbackGenerator.h>
void setVibratorIOS(){
    UIImpactFeedbackGenerator *feedBackGenertor = [[UIImpactFeedbackGenerator alloc]initWithStyle:UIImpactFeedbackStyleLight];
    [feedBackGenertor impactOccurred];
}

Unity端调用代码
#if UNITY_IOS
    [DllImport("__Internal")]
    public static extern void setVibratorIOS();
#endif
///unity调用各个平台的震动的代码
public void setVibrator()
{
#if UNITY_ANDROID
    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
    jo.Call("setVibrator");
#elif UNITY_IOS
    setVibratorIOS();
#endif
}

注:

1、上文写的android机震动5毫秒,但是在很多android真机上识别不到,最佳的震动时长,需要在android真机上测试。

2、android端的震动代码放在主线程中,如果游戏中需要反复的震动反馈(例如:每帧都需要震动),那游戏中就会掉帧

3、上文ios的震动效果只支持iPhone7以后的手机。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引