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

原文地址:https://www.cnblogs.com/yzxhz/p/11055198.html

时间: 2024-10-14 13:33:32

Unity接入自定义插件-调用安卓原生震动的相关文章

RN 调用安卓的原生方法(实现Toast效果)

首先明确一点,坑实在是是太多了-神奇呀! ok! 基本思路: 1.用AS打开一个已经存在的项目(这里可以打开项目中的android也可以是android里面的build.gradle) 2.在AS里新建一个类,这个类继承  ReactContextBaseJavaModule,在这里的所写的原声的方法就将被RN的JS调用 3.在AS里新建一个class 实现接口  ReactPackage,并且把刚创建的类放到包管理器里面 4.将刚创建的包管理器添加到MainApplication里面 5.在j

Unity调用Android原生的震动(简单)

要在unity中调用Android系统的震动,需要一个Vibrator类 ,通过AndroidManifest.xml文件设置权限了 如下: <uses-permission android:name="android.permission.VIBRATE" /> 在这里先给贴出英文文档及大概的翻译 : Class that operates the vibrator on the device. If your process exits, any vibration y

unity接入安卓SDK,与安卓相互通信

.接SDK是个什么样的活计? SDK的工作流程: 1. 从unity端出发,向安卓发起一系列的请求(unity call android). 2. 安卓端收到unity端调用,然后在具体调用SDK的一系列接口(android内部调用) 3. SDK服务器处理之后得到结果,再返回给安卓(网络通信) 4. 安卓获得SDK结果,然后回调unity方法,将结果传回unity端(android call unity) 我们需要做的: 1. 在安卓端,将SDK集成进入 Android的 MainActivi

ionic2 调用自定义插件之研究

摘要 最近在研发一个移动项目,架构已经定型,使用Ionic2开发,虽然ionic2 已经提供了ionic native插件,但是当遇到一些特别的需求大多时候还是需要我们自己封装插件. cordova机制我在此就不提了,我们使用Typescript调用cordova plugin就如同调用第三方库是一个道理,那么这里就少不了书写declare文件,下面我就把几种封装调用的几种方式介绍一下. 方式一,编写全局declare文件 现在我们有一个“残峰(我的同事)”封装好的签名版插件,cordova p

(Unity)Unity实现类似于安卓原生项目的点击安卓返回按钮回到前一页的功能

本章博主和大家一起讨论下Unity怎么实现类似安卓原生项目,点击安卓返回按钮实现返回到前一个页面的功能. 1.定义一个泛型用于响应安卓的返回按钮 public static List<GameObject> list; public GameObject addPanel;                     //添加首页 2.在Start方法中将首页压入栈中 list = new List<GameObject>(5); //将页面压入堆栈中 list.Add(addPane

cordova3.X 运用grunt生成plugin自定义插件骨架

Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头.麦克风等.Cordova还提供了一组统一的JavaScript类库,以及为这些类库所用的设备相关的原生后台代码. 一.安装cordova npm install -g cordova 二.创建项目 cordova create hello com.blue.sky.hybrid.app.hello HelloWorld 三.添加平台支持 cd hello cordova pl

Unity接入谷歌支付

文章理由 前段时间负责Unity接入Google内购功能,一开始研究别人的技术博客时发现,他们的文章都有些年头了,有些细节的地方已经不像n年前那样了,技术永远是需要更新的,而这篇就作为2016年末的最后一篇接入谷歌内购文章写给需要的人 准备工作 1.将自己的谷歌账号,支付25美元,成为谷歌开发者账号,开发者信息随意填写(有的博客写着必须填写美国,其实我就填写的中国)2.一台安装有谷歌四件套的安卓手机以及VPN3.一个用于测试的Unity小demo,只需要做好支付按钮就好了 谷歌开发者后台的设置

jQuery自定义插件--banner图滚动

前言 jQuery是一个功能强大的库,提供了开发JavaScript项目所需的所有核心函数.很多时候我们使用jQuery的原因就是因为其使用插件的功能,然而,有时候我们还是需要使用自定义代码来扩展这些核心函数来提高开发效率.我们知道, jQuery库是为了加快JavaScript的开发速度而设计的,通过简化编写JavaScript的方式,减少代码量.所以,今天就带大家了解一下jQuery自定义插件以及自定义插件案例---banner图滚动. 一.自定义插件 自定义插件一般有两种类型:全局插件和局

【Unity】微信支付官方安卓Demo的使用问题

Unity3d使用微信支付是属于APP内发起支付调用的情况,其本质上是在安卓项目上使用微信SDK,安卓项目开发完成后再导入到Unity中作为Unity插件使用,即Unity中C#调用安卓(Java)代码的流程. 微信官方给出的支付Demo在这里,但是使用过程中遇到很多坑,网上类似的文章很多,但大多年代久远,不清楚其他人做安卓微信支付是否也是踩着这些坑过来的,总之记录下来方便以后再遇到. 首先,该Demo居然是个远古时代的Eclipse(基于ADT插件)的安卓项目!你可以选择下载Eclipse和A