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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM