说明

Unity 有自己的 接口 Handheld.Vibrate() 来实现手机的震动,但是不能控制震动时长。
现在来介绍Unity 调用 Android 系统的震动接口实现手机震动效果。基本思路:将Android的震动功能封装到一个工具类中,将此工具类打打包成一个.jar文件供Unity使用。这样就不用每建立一个新的Unity工程再去写一个Android的插件了。只要Unity工程引用了这个.jar插件,再在代码里调用.jar的震动接口就可以了。

Android 工程的实现

1.创建一个新的空的工程。

2.在这个工程中创建一个Android Library。

(这里用来实现震动,并将此Module打包成.jar)。

3.配置AndoridMainifest.xml,必须要有权限

<uses-permission android:name="android.permission.VIBRATE" />
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.idadi.commonlibrary" ><uses-permission android:name="android.permission.VIBRATE" />
</manifest>

4.在此Module引用Unity的Class.jar库.

如何引用参考:https://blog.csdn.net/SGamble/article/details/101376652

5.在Module中实现震动功能

VibratorTool.java脚本

package com.tools.common;import android.app.Activity;
import android.app.Service;
import android.os.Vibrator;
import android.widget.Toast;import com.unity3d.player.UnityPlayer;public class VibratorTool {public static Vibrator s_vibrator;public static Activity s_curActivity;/*** 设置震动参数,这个函数在写Android测试工程时使用,Unity项目不用调用此函数。*/public static void SetVibrateParam(Activity curActivity) {s_curActivity = curActivity;if (curActivity != null) {s_vibrator = (Vibrator) curActivity.getSystemService(Service.VIBRATOR_SERVICE);}ToastTool.SetToastParam(curActivity);}protected static void GetVibrateParam() {if (s_curActivity == null) {s_curActivity = UnityPlayer.currentActivity;}if (s_vibrator == null) {s_vibrator = (Vibrator) s_curActivity.getSystemService(Service.VIBRATOR_SERVICE);}}/*** 手机震动*/public static void CVibrate(int milliseconds) {ToastTool.ShowToast("手机震动");GetVibrateParam();s_vibrator.vibrate(milliseconds);}/*** 手机震动 ----短震动*/public static void CVibrateShort() {ToastTool.ShowToast("手机震动 ----短震动");GetVibrateParam();s_vibrator.vibrate(new long[]{100, 10, 100, 1000}, -1);}/*** 手机震动 ----长震动*/public static void CVibrateLong() {ToastTool.ShowToast("手机震动 ----长震动");GetVibrateParam();s_vibrator.vibrate(new long[]{100, 100, 100, 1000}, 0);}/*** 震动取消*/public static void CCancelVibrate() {ToastTool.ShowToast("手机震动 ----震动取消");GetVibrateParam();s_vibrator.cancel();}
}

辅助的脚本 ToastTool.java

package com.tools.common;import android.app.Activity;
//import android.app.Service;
//import android.os.Vibrator;
import android.widget.Toast;import com.unity3d.player.UnityPlayer;public class ToastTool {public static Activity s_curActivity;public static boolean s_showToast = true;public static void SetShowToast(boolean show) {s_showToast = show;}/*** 设置震动参数*/public static void SetToastParam(Activity curActivity) {s_curActivity = curActivity;if (s_curActivity == null) {s_curActivity = UnityPlayer.currentActivity;}}protected static void GetToastParam() {if (s_curActivity == null) {s_curActivity = UnityPlayer.currentActivity;}}protected static void ShowToast(CharSequence text) {GetToastParam();if (s_showToast == false) {return;}if (s_curActivity != null) {Toast.makeText(s_curActivity, text, Toast.LENGTH_SHORT).show();} else {}}}

5.将Module打包成.jar

(具体打包请自行百度合适的打包方法)。我用的 Android Studio 3.5.2

在Module的Build.gradle中添加

//生成jar包
task makeJar(type: Copy) {delete 'build/outputs/network.jar'from('build/intermediates/packaged-classes/release/') //jar文件来源into('build/libs/') //生成路径include('classes.jar')rename('classes.jar', 'commontools.jar') //命名为network.jar
}
makeJar.dependsOn(build)

整个文件如下:

apply plugin: 'com.android.library'android {compileSdkVersion 29buildToolsVersion "29.0.3"defaultConfig {minSdkVersion 19targetSdkVersion 29versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"consumerProguardFiles 'consumer-rules.pro'}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
}//生成jar包
task makeJar(type: Copy) {delete 'build/outputs/network.jar'from('build/intermediates/packaged-classes/release/') //jar文件来源into('build/libs/') //生成路径include('classes.jar')rename('classes.jar', 'commontools.jar') //命名为network.jar
}
makeJar.dependsOn(build)dependencies {implementation fileTree(include: ['*.jar'], dir: 'libs')implementation 'androidx.appcompat:appcompat:1.0.2'testImplementation 'junit:junit:4.12'androidTestImplementation 'androidx.test.ext:junit:1.1.0'androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'implementation files('libs/classes.jar')
}

生成.jar

Unity中的实现

1.新建Unity项目

将.jar文件拷贝到项目 Plugins\Android 文件夹中。

2.在Plugins\Android 文件夹中新建 AndroidManifest.xml 文件。

并配置权限

 <uses-permission android:name="android.permission.VIBRATE" />
<?xml version="1.0" encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.unity3d.player"xmlns:tools="http://schemas.android.com/tools"android:installLocation="preferExternal"><uses-permission android:name="android.permission.VIBRATE" /><supports-screensandroid:smallScreens="true"android:normalScreens="true"android:largeScreens="true"android:xlargeScreens="true"android:anyDensity="true"/><applicationandroid:theme="@style/UnityThemeSelector"android:icon="@mipmap/app_icon"android:label="@string/app_name"><activity android:name="com.unity3d.player.UnityPlayerActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="unityplayer.UnityActivity" android:value="true" /></activity></application>
</manifest>

3.C#代码调用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TestJave : MonoBehaviour
{AndroidJavaClass VibratorTool = null;// Start is called before the first frame updatevoid Start(){VibratorTool = new AndroidJavaClass("com.tools.common.VibratorTool");//smsDialog.CallStatic<AndroidJavaObject>("getInstance").Call("init", getContext());}public void CVibrate(int milliseconds){Debug.LogError("---- 调用震动");VibratorTool.CallStatic("CVibrate", milliseconds);}public void CVibrateShort(){Debug.LogError("---- 调用震动 -- 短");VibratorTool.CallStatic("CVibrateShort");}public void CVibrateLong(){Debug.LogError("---- 调用震动 -- 长");VibratorTool.CallStatic("CVibrateLong");}public void CCannelVibrate(){Debug.LogError("---- 调用震动 -- 取消");VibratorTool.CallStatic("CCancelVibrate");}
}

4.打包测试

源码工程

包含了Android工程与Unity工程

链接地址:https://download.csdn.net/download/ZFSR05255134/15137850

Unity手机震动,Unity -> android 震动相关推荐

  1. Unity手机震动,Unity -> ios 震动

    说明 Unity 有自己的 接口 Handheld.Vibrate() 来实现手机的震动,这里来介绍下Unity调用ios原生震动. 下面有两种方法震动的实现,用来自己测试.建议使用方法一. 方法一 ...

  2. Android之手机摇一摇震动刷新(支持ListView、GridView、WebView)并生成我的二维码

    手机摇一摇震动刷新 第一步:看摇一摇震动刷新的前后的效果图 1.摇一摇震动刷新前的效果图如下(图片太大了,分2次录屏的,如果看着不爽请猛戳我的github上面的演示) 2.摇一摇震动刷新之后的效果图如 ...

  3. android 广播震动,android 震动和提示音的实现代码

    android的消息提示(震动和提示音),实现代码如下所示: public class VibratorUtil { protected AudioManager audioManager; prot ...

  4. Unity手机游戏发热发烫优化指南与技巧

    Unity手机游戏发热发烫优化指南与技巧 很多小伙伴做完游戏后,发布到Android,运行,游戏很流畅,也不卡顿,但是跑一会游戏,手机就发热,发烫.客户提出需求,能否让它不发烫? 本文从以下3方面来分 ...

  5. unity3d android包太大了,unity/unity3d编译成android apk包瘦身方法

     unity/unity3d编译成android apk包瘦身方法 本文系原创,请转发的朋友带上我的链接. 相信用unity开发的同学都会遇到类似的经历:明明资源图片不大,但是发现打包后apk文件 ...

  6. unity发布android报错,Unity移动端入门 - Android那些事 /AAR包发布错误

    老师,您好! Unity移动端入门 - Android那些事的第31节 发布JAR包我两次都成功了,但任务32:0506-互相调用模式之导出Aar包 总是失败,卡在这里都半个月了.请老师指点迷津 打包 ...

  7. Android震动和自定义铃声

    加入权限: <uses-permission android:name="android.permission.VIBRATE" /> 代码如下: import and ...

  8. Unity 发布到IOS,Android的各种坑

    Unity 发布到IOS的注意事项1.开发环境 MAC环境:Xcode环境 7.2.1 Unity环境:Unity5.3 2.基本说明 首先,我说一下,这是我在对Unity发布到IOS的实际使用中,总 ...

  9. 【Unity游戏开发】Android中如何集成Unity3D项目——入门级踩坑

    最近的学习之路真的是波折,先是想学Kotlin,结果赶上了算法比赛,恶补了几天算法,然后回归Kotlin,这周又需要调研一下Unity3D,需要把Unity项目嵌入到我们的Android项目中. 今天 ...

  10. android 移植游戏,Unity游戏移植到Android平台

    很多时候不仅需要单纯的运行单个的unity游戏,而是需要将游戏嵌入Android代码中和android其他功能相辅生成一个APP,比如通过android界面的一个按钮来启动一个unity游戏.本文介绍 ...

最新文章

  1. Java学习总结:56(Stack子类)
  2. 强强联合!智源x清华AIR,共启 AI 健康研究新篇章
  3. Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)
  4. MultiBinding的StringFormat参数问题
  5. 如何创建一个Eureka Client?
  6. 二、配置数据源、SessionFactory、domain对象
  7. C#数据类型02--结构
  8. Alpha和索引色透明
  9. (附源码)计算机毕业设计SSM基于图书管理系统
  10. java网页保存成pdf_JavaScript+Java实现HTML页面转为PDF文件保存的方法
  11. OpenCV55:高动态范围成像|High Dynamic Range (HDR)
  12. [研究笔记] Travis CI 使用介绍
  13. OceanBase-概述
  14. maven pom.xml解析、命令说明、依赖传递、继承、聚合、properties、build、依赖范围、版本仲裁、profile
  15. Oracle11安装教程
  16. 分组查询最新的一条记录
  17. MFC如何调用Flash控件
  18. 行人重识别AlignedReID:AlignedReID: Surpassing Human-Level Performance in Person Re-Identificat 重点亮点学习资料整理
  19. 2020 我的计算机保研历程
  20. 电路板故障测试仪GR4080软件,电路板维修测试仪是一种的电路板故障检测设备

热门文章

  1. MAC使用 SVN问题
  2. textarea 中如何阻止默认的回车换行事件?
  3. Eclipse如何安装lombok插件
  4. Linux下clock_gettime函数详解
  5. EPUB阅读APP推荐
  6. 工作仅一年就被迫跳槽的感想
  7. 老刘说NLP:这几年的NLP历程回顾,以及关于NLP(知识图谱等)落地的思考
  8. Web API接口开发和测试
  9. 使用pyTorch搭建自己的facenet
  10. C++中int、long和double的取值范围和最大值,以及32位和64位的差异解读