怎么看一个网站做没做优化,丹东搜索引擎优化,wordpress 菜单 宽度,网页qq登录保护在哪里最近在Unity上需要很原生移动端进行交互#xff0c;
原理#xff1a;新建一个android项目#xff0c;把生成的app module给干掉#xff0c;然后留下一个vibrationPlugin module#xff0c;在这个module下写android震动代码#xff0c;将这个android工程构建出来的 aar移…最近在Unity上需要很原生移动端进行交互
原理新建一个android项目把生成的app module给干掉然后留下一个vibrationPlugin module在这个module下写android震动代码将这个android工程构建出来的 aar移动到Unity项目下的Assets/Plugins/Android下重新打包利用 AndroidJavasClass获得unityPlayer,然后通过unityPlayer获得当前unity的activity,将unity activity的context 传递给 vibrationPlugin工程里面
现在开始整个集成的过程
1: Android
一新建Android项目 选择No Activity 等待项目编译
编译完毕之后在 app/java/com.lck.unityvibration/目录下新建一个java文件
package com.lck.unityviabration;import android.content.Context;
import android.os.Vibrator;public class VibrationPlugin {private static VibrationPlugin instance;private Vibrator vibrator;public VibrationPlugin(Context context) {vibrator (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);}public static VibrationPlugin getInstance(Context context) {if(instance null) {instance new VibrationPlugin(context);}return instance;}public void vibrate(long milliseconds) {vibrator.vibrate(milliseconds);}public void cancel() {vibrator.cancel();}
}注意在 AndroidManifest.xml中引入
uses-permission android:nameandroid.permission.VIBRATE /
可以把测试的无关代码删除掉
最终的项目目录 然后把res/values和xml文件夹删除掉没啥用 然后把 app module设置成 library
就是在app 的build.gradle中
plugins {alias(libs.plugins.androidApplication)
} 替换成 apply plugin: com.android.library
另外 module中没有 applicationId 标识干掉
minSdkVersion和unity android主工程保持一致 最后 Build/Make Project会生成一个aar文件将这个文件放到unity工程里面 Plugins/Android/目录下 二Unity项目调用
新建Unity AndroidUtils.cs脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AndroidUtils
{private static AndroidJavaObject vibrationPlugin;// Start is called before the first frame updatepublic static void Init(){if(Application.platform RuntimePlatform.Android) {using(var unityPlayer new AndroidJavaClass(com.unity3d.player.UnityPlayer)) {var activity unityPlayer.GetStaticAndroidJavaObject(currentActivity);if(activity ! null) {Debug.Log(has activity);}var context activity.CallAndroidJavaObject(getApplicationContext);if(context ! null) {Debug.Log(has context);}vibrationPlugin new AndroidJavaObject(com.lck.unityviabration.VibrationPlugin,context);}}}public static void Vibrate(long milliseconds) {if(vibrationPlugin null) {Debug.Log(vibrationPlugin is null);}if(Application.platform RuntimePlatform.Android vibrationPlugin ! null) {vibrationPlugin.Call(vibrate,milliseconds);}}public static void Cancel() {if(Application.platform RuntimePlatform.Android vibrationPlugin ! null) {vibrationPlugin.Call(cancel);}}
}在游戏开始的时候初始化 AndroidUtils.Init() 在游戏逻辑中需要的地方调用 AndroidUtils.Vibrate(200);
Android集成完毕
2: IOS
一IOS项目
同样的道理跟集成Android很类似需要在unity项目中的Plugins文件夹创建一个文件夹为IOS文件夹里面放两个文件就可以了NativeUtils.h和NativeUtils.mm
#import Foundation/Foundation.hNS_ASSUME_NONNULL_BEGINinterface NativeUtils : NSObjectendNS_ASSUME_NONNULL_END#import NativeUtils.h
#import UIKit/UIKit.himplementation NativeUtils
extern C {void setVibrator(float Intensity) {NSLog(设置震动强度:%f,Intensity);UIImpactFeedbackGenerator* generator;generator [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleHeavy];[generator impactOccurred];}
}
end
二Unity项目集成
在我上面AndroidUtils.cs文件中加入两行代码就行了
// DllImport 语句用于调用iOS插件中的C函数[DllImport(__Internal)]private static extern void setVibrator(float intensity);
调用
public static void Vibrate(long milliseconds) {if(vibrationPlugin null) {Debug.Log(vibrationPlugin is null);}if(Application.platform RuntimePlatform.Android vibrationPlugin ! null) {vibrationPlugin.Call(vibrate,milliseconds);} else if(Application.platform RuntimePlatform.IPhonePlayer) {Debug.Log(调用震动功能);setVibrator(1.5f);}}
打包到目标IOS之后会看到Xcode项目里面多了个Libraries文件夹下的Plugins文件夹里面有IOS/NativeUtils和NativeUtils.mm文件了这就是正确的IOS调用震动功能的全部代码了。