一、Unity中提供了震动的接口:Handheld.Vibrate(); Unity提供的这个接口的震动时长是0.5s。不能缩短震动时长。
二、在Unity中要自定义震动时长的话,那就得在Android工程和Xcode工程中分别实现震动功能,再在Unity中进行调用。
(1)Android工程的震动接口(供Unity调用):
public void Vibrate
{
Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
//调用Android系统的震动接口,自定义时间为5毫秒
vibrator.vibrate(5);
}
(2)Xcode工程的震动接口(供Unity调用):
.h文件
void Vibrate();
.m文件
#import <UIKit/UIFeedbackGenerator.h>
void Vibrate()
{
UIImpactFeedbackGenerator *feedBackGenertor = [[UIImpactFeedbackGenerator alloc]initWithStyle:UIImpactFeedbackStyleLight];
[feedBackGenertor impactOccurred];
}
(3)Unity调用接口代码
#if UNITY_IOS
[DllImport("__Internal")]
public static extern void Vibrate();
#endif
//Unity调用各个平台的震动的代码
public void Vibrate()
{
#if UNITY_ANDROID
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("Vibrate");
#elif UNITY_IOS
Vibrate();
#endif
}
注意事项:
1、上文写的Android机震动5毫秒,但是在很多Android真机上识别不到,最佳的震动时长,需要在Android真机上测试。
2、Android端的震动代码放在主线程中,如果游戏中需要反复的震动反馈(例如:每帧都需要震动),那游戏中就会掉帧。
3、上文IOS的震动效果只支持iPhone7以后的手机。
网友评论