【Unity】Unity中调用手机的震动功能 包括安卓和IOS

直接上代码

csharp 复制代码
#if UNITY_IOS
    [DllImport("__Internal")]
    private static extern void EX_C_CallVibrateE(int eID);
#endif   

    public static void CallVibrate(int eID)
    {
#if UNITY_EDITOR

#elif UNITY_ANDROID
        long miSec = 30;
        if(eID == 1520)
        {
            miSec = 60;
        }
        //通过报名获取java class
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //获取当前的activity
        var activity = jc.GetStatic<AndroidJavaObject>("currentActivity");
        var service = new AndroidJavaClass("android.app.Service");
        var s = service.GetStatic<string>("VIBRATOR_SERVICE");
        var vib = activity.Call<AndroidJavaObject>("getSystemService", s);
        vib.Call("vibrate", miSec);

#elif UNITY_IOS
        EX_C_CallVibrateE(eID);
#endif
    }

这是我的方法 对应到ios平台和安卓平台 其中eID = 1520表示长震动,为1519为短震动

在打包发布安卓平台时,需要申请一下安卓的震动权限,其他不需设置

申请方法:在Android的打包文件的AndroidManifest中添加
<uses-permission android:name="android.permission.VIBRATE" /> 即可

在打包发布Ios平台时,需要在Assets\Plugins\IOS目录下添加一个.m文件,供c#代码调用

代码如下,可根据自身需求删除不必要的方法

csharp 复制代码
#import <Foundation/Foundation.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AudioToolbox/AudioToolbox.h>
#include <sys/param.h>
#include <sys/mount.h>
#ifdef __cplusplus
extern "C"
{
#endif
bool CanOpenURL(char* name)
{
    NSURL *appURL = [NSURL URLWithString:[NSString stringWithUTF8String:name]];
    if ([[UIApplication sharedApplication] canOpenURL:appURL])
    {
        return YES;
    }
    else
    {
        return NO;
    }
}

void GotoAppSetting()
{
    NSURL *settingURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    if([[UIApplication sharedApplication] canOpenURL:settingURL])
    {
        [[UIApplication sharedApplication] openURL:settingURL];
    }
}
long getFreeSpace() {
	NSDictionary *systemAttributes = [[NSFileManager defaultManager] fileSystemAttributesAtPath:NSHomeDirectory()];
    NSString *diskTotalSize = [systemAttributes objectForKey:@"NSFileSystemSize"];
    NSLog(@"totalspace:%@ B", diskTotalSize);
    NSLog(@"totalspace:%.2f GB", [diskTotalSize floatValue]/1024/1024/1024);
    NSString *diskFreeSize = [systemAttributes objectForKey:@"NSFileSystemFreeSize"];
    NSLog(@"freespace:%@ B", diskFreeSize);
    NSLog(@"freespace:%.2f GB", [diskFreeSize floatValue]/1024/1024/1024);
    return [diskFreeSize longLongValue]/(1024 *1024);
  }
    
bool canAttPopup()
{
    if (@available(iOS 14, *))
    {
        return [ATTrackingManager trackingAuthorizationStatus] == ATTrackingManagerAuthorizationStatusNotDetermined;
    }
    return false;
}
    
void EX_C_ATTAuthorize()
{
    if (@available(iOS 14.0, *)){
      [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
          NSLog(@"ATTrackingManagerStatus: %d", (int)status);
          if(ATTrackingManagerAuthorizationStatusAuthorized == status)
          {
              //[FBAdSettings setAdvertiserTrackingEnabled:YES];
          }
          UnitySendMessage("GameManager", "OnATTAuthStatus", [[NSString stringWithFormat:@"%d", (int)status] UTF8String]);
      }];
    }
}
    
int EX_C_UserInterfaceStyle()
{
    if (@available(iOS 14.0, *))
    {
        return (int)[[[UIScreen mainScreen] traitCollection] userInterfaceStyle];
    }
        
    return 0;
}
    
    void EX_C_CallVibrateE(int eID)
    {
        AudioServicesPlaySystemSound(eID);
    }
    
#ifdef __cplusplus
}
#endif
相关推荐
lauo8 分钟前
互动影游的Token经济革命:ibbot手机如何成为AI互动娱乐的生产节点
人工智能·智能手机·娱乐
winlife_11 分钟前
全程用 AI 做一款商业级手游 · EP0 立项:能做到吗、怎么做、边界在哪
人工智能·unity·ai编程·游戏开发·商业化·mcp·funplay
nnsix15 分钟前
Unity Texture2D的 Read/Write 选项
unity·游戏引擎
wulechun20 分钟前
深入解析微博数据挖掘与社会情绪分析实战项目:基于Python全栈技术构建舆情监控与情感计算系统的完整指南
智能手机
南山有乔木7891 小时前
怎么把音频ncm/kgg/m4a格式转换成mp3?手机App和电脑软件都能用的教程
智能手机·音视频
qq36219670512 小时前
APK文件签名校验教程:验证APK真伪的完整方法
android·智能手机
winlife_15 小时前
全程用 AI 做一款商业级手游 · EP1 地基:先搭框架层,不急着写玩法
unity·ai编程·游戏架构·mcp·框架设计·funplay
小贺儿开发16 小时前
Unity VideoPlayer 播放控制器
unity·编辑器·播放器·视频·工具·videoplayer·互动
wulechun17 小时前
TensorFlow中文社区官方文档项目深度解析:从入门到精通的深度学习实战指南与核心概念详解
智能手机