Unity接入自定义插件-调用安卓原生震动

Posted yzxhz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity接入自定义插件-调用安卓原生震动相关的知识,希望对你有一定的参考价值。

  前言:在网上看了好多接入安卓震动的例子,但是打包的时候总是会冲突,不是多个图标就是不能用等等,其实就是跟其他安卓插件冲突了。为了解决冲突问题,对于我这个安卓小白来说真是难啊,终于千辛万苦找到了一篇文章,解决了我这个问题。

看过文章后才知道继承了UnityPlayerActivity这个类后,两个只能显示一个,但是震动要用的方法只能在这个类中执行,所以就直接引用当前窗口。

UnityPlayer.currentActivity.getSystemService(Context.VIBRATOR_SERVICE);

完美解决。其他插件不出意外都可以这样做。

 

1.打开android Studio,新建一个工程,如图

技术图片

2.创建项目,懒的话只改Package name就行。

技术图片

3.接下来新建一个Module

技术图片

4.选择Android Library  然后→next

技术图片

5.起好名后选择Finish

 技术图片

6.切换到Project视图,看到有个默认的app,想办法给他干掉,免得影响我

技术图片

7.打开File→Project Structure,找到Modules,然后选择app,点上面的减号,然后点击yes,它就原地消失了,哦,别忘了点Apple,然后OK关掉

技术图片技术图片技术图片技术图片

 顺便把新建的Module的引用都删掉

技术图片

 

8.现在app旁边的小图标消失了,然后开始搞新建的Module,不过首先把unity的类库拉进来,我的类库目录是D:\\软件\\Unity2018.3.14\\Editor\\Data\\PlaybackEngines\\AndroidPlayer\\Variations\\mono\\Release\\Classes,把里面的calsses复制到Module下的libs目录。然后添加引用就好了。别忘了点击apply。

 技术图片技术图片技术图片

技术图片技术图片

 

 

 

 

9.创建unity可以调用的类,起名,设置默认即可,点击ok

技术图片技术图片

 

 10.划重点:不要再继承UnityPlayerActivity了!当项目中有其他安卓插件的时候就会产生冲突。这里继承Fragment,代码如下

package com.xxx.mylibrary;

import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;

import com.unity3d.player.UnityPlayer;


public class Test2Unity extends Fragment 

    private static final String TAG = "shooter";
    private static Test2Unity Instance = null;
    private String gameObjectName;
    Vibrator vibrator;

    public static Test2Unity GetInstance(String gameObject) 
        if (Instance == null) 
            Instance = new Test2Unity();
            Instance.gameObjectName = gameObject;
            UnityPlayer.currentActivity.getFragmentManager().beginTransaction().add(Instance, TAG).commit();
        
        return Instance;
    

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setRetainInstance(true);  // 这一句很重要,保存对该Fragment的引用,防止在旋转屏幕等操作时时丢失引用(Fragment隶属于Activity)
    


    public void SetVibrator(long[] mpattern, int index) 
        vibrator = (Vibrator) UnityPlayer.currentActivity.getSystemService(Context.VIBRATOR_SERVICE);
        vibrator.vibrate(mpattern, index);
    

11.这时候项目中肯定会抱一个错误,原因是调用震动需要权限,点击红灯泡,添加权限即可,这时候在mainfast里面会添加一行权限代码。

 技术图片技术图片

 

 12.最后build吧,输入目录在build→output,里面就有打包好的aar了。

技术图片

 13.到处的aar用解压软件打开,删除lib下面的classes.jar。这个是从uniry复制到Android Studio的jar包。然后把这个aar放到unity assets目录下的Plugins/Android下面

技术图片

14.写unity端代码。在场景中创建一个button,然后挂在它身上。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ZhenDong : MonoBehaviour

    Button b;
    // Start is called before the first frame update
    void Start()
    
        b = GetComponent<Button>();
        b.onClick.AddListener(StartZhenDong);
    

    private void StartZhenDong()
    
        var jc = new AndroidJavaClass("com.xxx.mylibrary.Test2Unity");
        long[] ls=new long[]  0,10;
#if !UNITY_EDITOR
            Debug.LogError("震动");
        jc.CallStatic<AndroidJavaObject>("GetInstance", gameObject.name).Call("SetVibrator", ls, -1);        //震动
#endif
    

 

15.尽情的打包测试吧!

 

 

参考文章:https://blog.csdn.net/ZhangDi2017/article/details/65629589

以上是关于Unity接入自定义插件-调用安卓原生震动的主要内容,如果未能解决你的问题,请参考以下文章

uniapp 扫码原生插件 - 新(可任意自定义界面版本)

在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)

七、uni-app 原生插件开发03 - 制作自定义基座

接入七鱼客服,自定义方法window.openSdk方法,报该方法not function

uni-app原生插件 Alert Dialog 弹窗 提示框 支持苹果 安卓

uniapp 声音提示震动提示语音播报插件 Ba-Beep