精华内容
下载资源
问答
  • 一、安装安卓模拟器 1、下载安卓模拟器http://www.pc6.com/softview/SoftView_64923.html; 2、安装安卓模拟器。...二、安装unity3d插件EZGUI 1、下载EZGUI插件;bbs.9ria.com/thread-114573-1...

    一、安装安卓模拟器

    1、下载安卓模拟器http://www.pc6.com/softview/SoftView_64923.html;

    2、安装安卓模拟器。

    3、下载安卓apk,然后右键用BlueStacks打开,就把安卓程序安装到模拟器了。点击程序就可以运行了。

     

    二、安装unity3d插件EZGUI

    1、下载EZGUI插件;bbs.9ria.com/thread-114573-1-1.html

    2、解压以后放到unity3d的Assets的目录下注意目录中不能出现汉字,然后到unity3d编辑器中,点击菜单栏的Aassets-Import Package-Custom Package,找到刚刚拷贝到Assets的目录的EZGUI包,选择导入就行了。成功导入以后,unity3d编辑器菜单栏会出现“Tool”这一栏。然后把项目保存一下。

     

    像NGUI、EZGUI这些unity3d插件,每新建一个项目都要重新导入一遍。

    转载于:https://www.cnblogs.com/zhibolife/p/3650680.html

    展开全文
  • 最新Unity3D2018版本适用的NGUI插件。是一款Unity的扩展插件,采用可视化开发工具,可以让用户进行编程的行为开发,大大简化编辑界面,可以帮助开发者制作出满意的UI界面,适用于安卓手机游戏开发,软件功能强大,...
  • unity3d 接入安卓支付宝SDK

    千次阅读 2018-07-14 14:32:41
    Unity群里一个大佬的技术分享,我也转载过来方便日后查阅,有需要转载的,请注明出处QQ280442832操作步骤性这东西,时间长了就难免忘记,以防日后要接的时候再次爬坑目标:导出支付宝插件包(arr包)给UNITY调用主要三...

    Unity群里一个大佬的技术分享,我也转载过来方便日后查阅,有需要转载的,请注明出处QQ280442832

    操作步骤性这东西,时间长了就难免忘记,以防日后要接的时候再次爬坑


    目标:导出支付宝插件包(arr包)给UNITY调用

    主要三大坑:
                       A坑 Android Studio的安装和配置 提示少这少那,但又下载不了
                       B坑  导出Jar包时总是下载不了需要的文件
                      C坑  写完了代码 没有企业资质如何测试




    A坑爬坑方法
         
    电脑右下角打开它,左上角设置->高级 

    Android Studio 简称AS
    AS设置左上角File->Setting

    填入代理给你的HTTP代理地址,OK保存

    下载支付宝SDK安卓开发包
    https://gw.alipayobjects.com/os/rmsportal/mXaaROddYFUrkSJIouil.zip

    用AS   打开alipay_demo
    B坑解决方法设置如图


    这里就是填入LT代理的地址

    到这里安装环境已经配置完毕

    进入SDK开发环节
    这个自带的demo是发布APP的,要把它转换成library
    具体参照其他网址


    进入开发环节

    新建一个unityPay的类

    DEMO中 PayDemoActivity 的 public void payV2(View v) {.......}可以看到有一句PayTask(PayDemoActivity.this);
    PayTask 需要一个Activity,这里我们传入unityActivity即可

    问题unityActivity从哪来得到呢?????????????????
    这个问题我查了网上几篇文章
    网上大多数的文章是让你让你把unity的类库拖进项目,然后继承unityPlayerAcivity
    然后通过unityPlayerActivity的子类来调用方法

    UNITY调用

    这就是网上大多数的DEMO接入SDK思路

    但问题和安卓通信的unityActivity只能有一个,而且我想尽量分离插件的耦合,A接好了我就永远不想动了,以后再拓展B,C,D,E,F
    如果他们都继承了unityPlayerActivity 那么谁才是当前活动的unityPlayerActivity?由于不是主要做安卓开发,我就不纠结了

    直接不继承unityPlayerActivity

    回到 问题unityActivity从哪来得到呢?
    我的思路是 C#传到安卓即可


    PayTask(PayDemoActivity.this)改成 PayTask(p_act)

    具体安卓代码我待会打包上传

    代码写完了,要配置支付宝参数

    注意RSA2_PRIVATE是私匙,是私匙,是私匙

    钥匙生成工具在官网可以下载:解压 secret_key_tools_RSA256_win
    生成完毕,打开私钥匙pkcs8.pem文件,复制-----BEGIN PRIVATE KEY-----   中间的内容   -----END PRIVATE KEY-----

    赋值到RSA2_PRIVATE
    配置XML文件如下

    好了如果你是有签约的支付宝ID你可以越过下面的步骤了,这里已经开始正常支付调用了
    我是个开发者还没签约ID怎么测试?

    你的C坑道路爬坑之路即将开启
    支付宝沙箱模式
    https://auth.alipay.com/login/ant_sso_index.htm?goto=https%3A%2F%2Fopenhome.alipay.com%2Fplatform%2FmanageHome.htm
    申请注册完毕,配置生成好公,私匙,具体参照网上文章
    简单步骤就是下载支付宝APP沙箱版,
    在AS找个合适的初始化方法写入
    EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);切换到沙箱模式
    如果你是CTRL+C,CTRL+V发现找不到该类,自己手动打这行代码吧,
    我是官网CTRL+C复制这段代码,IDE老提示找不到方法,折腾了大半天


    发布模块

    由于AS版本不断在变,这个生成路径不好确定,直接搜索

    app_debug.arr就是插件包了

    拖进UNITY得对应目录



    UNITYC#代码调用支付


    对比下安卓的方法
    拼写正常,发布测试


    展开全文
  • ShareREC下载地址:http://rec.mob.com/download根据自己需求下载版本,笔者在这里讲的是ShareREC for android_unity3d快速集成1、下载最新版本ShareREC for Unity3D的SDK,解压以后可以找到ShareREC的unitypackage。...

    ShareREC下载地址:http://rec.mob.com/download

    根据自己需求下载版本,笔者在这里讲的是ShareREC for android_unity3d

     

    快速集成

     

    1、下载最新版本ShareREC for Unity3D的SDK,解压以后可以找到ShareREC的unitypackage。

    2、双击之并将其中的文件导入您的项目。

    3、进入目录plugin/ShareRec,选择其中的ShareRec脚本,将它拖到游戏的MainCamera下,并填写上您的AppKey、AppSecret,并进行一些基本的配置,如下图所示

     

     
     

    具体参数参照官方文档:http://wiki.mob.com/sharerec-for-android-unity3d-%e5%bf%ab%e9%80%9f%e9%9b%86%e6%88%90/

    添加自己的脚本在主像机上(加了一个按钮控制开始录制和结束录制并分享)

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    using cn.sharerec;
    public class TestRec : MonoBehaviour
    {
        bool IsRecording = false;
        public Button Start_BTU;
        void Start()
        {
            Start_BTU.onClick.AddListener(OnBtnStart);
        }
        public void OnBtnStart()
        {
            if (ShareREC.IsAvailable())
            {
                if (!IsRecording)
                {
                    OnStartRecode();
                }
                else
                {
                    OnStopRecode();
                }
            }
        }
        //开始录制
        void OnStartRecode()
        {
            ShareREC.StartRecorder();
            IsRecording = true;
        }
        //停止录制
        void OnStopRecode()
        {
            //停止监听事件
            ShareREC.OnRecorderStoppedHandler = OnShowShare;
            //停止录制
            ShareREC.StopRecorder();
            IsRecording = false;
        }
    
        //当停止的时候分享
        void OnShowShare()
        {
            // 停止录制后启动分享视频 (show sharing page after the recorder is stopped)
            ShareREC.SetText("Angry Rebot");
            ShareREC.AddCustomAttr("score", "5000");
            ShareREC.AddCustomAttr("name", "ShareREC Developer");
            ShareREC.AddCustomAttr("brand", "hehe!");
            ShareREC.AddCustomAttr("level", "10");
    
            ShareREC.AddCustomPlatform("CustomPlatform");
            ShareREC.ShowShare();
        }
    }
    

    你以为这样就完事了?

     

    大坑来了(加粗加大)

    找到导入工程中的Plugins/Android/ShareRec 下的AndroidManifest.xml文件

    加上自己的Appkey和Value-----  http://dashboard.mob.com/#!/index   在这儿添加应用获得键值对

    <application>
    		<activity
                android:name="com.mob.tools.MobUIShell"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:theme="@android:style/Theme.Translucent.NoTitleBar"
                android:windowSoftInputMode="stateHidden|adjustResize" />
     //加上这两句
     <meta-data android:name="Mob-AppKey" android:value="自己的Appkey"/>
     <meta-data android:name="Mob-AppSecret" android:value="自己的AppValue"/>
    </application>

    打包前打开Player Settings设置一下

     

    到这里应该没什么问题了,还有什么问题可以联系Mob客服,也会很认真的帮忙解决

    第一次发博客,如有不足,望各位大佬请多多指教。

     

     

     

    展开全文
  • 由于是第三方插件,并且项目中已经有了一个第三方的插件,众所周知,Unity安卓交互时,安卓端只能有一个Activity继承自UnityPlayerActivity,所以为了不与其他人的sdk冲突,我们便使用不继承UnityPlayerActivity的...

    一、首先下载官方Demo

    https://ai.baidu.com/sdk#tts

    二、版本介绍

    本教程使用AndroidStudio3.6.3版本

    由于是第三方插件,并且项目中已经有了一个第三方的插件,众所周知,Unity与安卓交互时,安卓端只能有一个Activity继承自UnityPlayerActivity,所以为了不与其他人的sdk冲突,我们便使用不继承UnityPlayerActivity的Java类

    三、注册百度云账号

    并且创建安卓版语音技术应用

    四、导入官方demo中的sdk以及库文件

    jar包位于core/libs/目录下

    在我们创建好的项目中导入该sdk,

    如何创建项目请参考我的另一篇博文

    https://blog.csdn.net/weixin_43271060/article/details/90318254

    导入步骤

    选中jar包,然后按下Ctrl+C,在我们创建好的项目中选择Libs目录,然后按下Ctrl+V,这是导入,然后就是引用

    1、选择File->Project Structure打开Project Structure窗口

    2、选择Dependencies->我们自己创建的Module

    选择我们导入的jar包

    最后点击Apply

    导入官方的库文件,位于core->src-main下方

    jniLibs目录下就是我们所需的库文件,然后复制jniLibs文件夹,然后粘贴到我们的项目中的src->main目录下

    五、代码部分

    1、创建百度语音主类,然后将它制成单利

    
        public static CientBaiDuVoiceMainActivity _instance;
    
    
        public static CientBaiDuVoiceMainActivity getInstance() {
            if (_instance == null) {
                _instance = new CientBaiDuVoiceMainActivity();
            }
            return _instance;
        }

    2、编写语音识别

    选择包名,然后右键创建一个Package,名字为Recogn

    3、创建语音识别监听识别后回调的类

    package com.xxx.xxx.Recogn;//填写自己的包名
    
    import com.baidu.speech.EventListener;
    import com.baidu.speech.asr.SpeechConstant;
    import com.unity3d.player.UnityPlayer;
    
    public class RecognListener implements EventListener {
    
    
        @Override
        public void onEvent(String name, String params, byte[] data, int i, int i1) {
            if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)) {
                // 识别相关的结果都在这里
                if (params == null || params.isEmpty()) {
                    return;
                }
                if (params.contains("\"partial_result\"")) {
                    UnityPlayer.UnitySendMessage("NetLogic", "RecognResult", name + "&" + params);
                    // 一句话的临时识别结果
                } else if (params.contains("\"final_result\"")) {
                    UnityPlayer.UnitySendMessage("NetLogic", "RecognResult", name + "&" + params);
                    // 一句话的最终识别结果
                } else {
                    // 一般这里不会运行
                    if (data != null) {
                    }
                }
            } else {
                // 识别开始,结束,音量,音频数据回调
                if (params != null && !params.isEmpty()) {
                }
                if (data != null) {
                }
            }
    
        }
    };
    
    

    4、编写语音识别处理类

    package com.xxx.xxx.Recogn;//自己的包名
    
    import android.Manifest;
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.os.Build;
    
    import com.baidu.speech.EventListener;
    import com.baidu.speech.EventManager;
    import com.baidu.speech.EventManagerFactory;
    import com.baidu.speech.asr.SpeechConstant;
    
    import org.json.JSONObject;
    
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    import static com.xxx.xxx.Util.GetActivity.getActivityByContext;
    
    public class RecognHandler {
    
        private boolean mIsInit = false;
        private EventManager asr;
        private EventListener mEventLisener;
    
        public RecognHandler(Context context, EventListener listener) {
            if (mIsInit) {
                listener=null;
                return;
            }
            mIsInit = true;
            mEventLisener = listener;
            //动态申请权限
            initPermission(context);
            asr = EventManagerFactory.create(context, "asr");
            asr.registerListener(listener);
        }
        //开始识别
        public void Start() {
            Map<String, Object> params = new LinkedHashMap<String, Object>();
            // 基于SDK集成2.1 设置识别参数
            params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, true);
            params.put(SpeechConstant.DISABLE_PUNCTUATION, false);
            params.put(SpeechConstant.ACCEPT_AUDIO_DATA, false);
            params.put(SpeechConstant.PID, 1537); // 中文输入法模型,有逗号
            String json = null; // 可以替换成自己的json
            json = new JSONObject(params).toString(); // 这里可以替换成你需要测试的json
            asr.send(SpeechConstant.ASR_START, json, null, 0, 0);
        }
        //停止识别
        public void Stop() {
            asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0);
        }
        //释放实例
        public void Release() {
            asr.unregisterListener(mEventLisener);
            mIsInit = false;
            asr=null;
        }
    
        /**
         * android 6.0 以上需要动态申请权限
         */
        private void initPermission(Context context) {
            String permissions[] = {Manifest.permission.RECORD_AUDIO,
                    Manifest.permission.ACCESS_NETWORK_STATE,
                    Manifest.permission.INTERNET,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            };
    
            PackageManager pm = getActivityByContext(context).getPackageManager();
            boolean permission_readStorage = (PackageManager.PERMISSION_GRANTED ==
                    pm.checkPermission("android.permission.RECORD_AUDIO", "com.cientx.tianguo"));
            boolean permission_network_state = (PackageManager.PERMISSION_GRANTED ==
                    pm.checkPermission("android.permission.ACCESS_NETWORK_STATE", "com.cientx.tianguo"));
            boolean permission_internet = (PackageManager.PERMISSION_GRANTED ==
                    pm.checkPermission("android.permission.INTERNET", "com.cientx.tianguo"));
            boolean permission_writeStorage = (PackageManager.PERMISSION_GRANTED ==
                    pm.checkPermission("android.permission.WRITE_EXTERNAL_STORAGE", "com.cientx.tianguo"));
    
            if (!(permission_readStorage && permission_writeStorage && permission_network_state && permission_internet)) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    getActivityByContext(context).requestPermissions(permissions, 0x01);
                }
            }
    
        }
    
    }
    

    5、创建一个工具Package名字叫Util

    里面添加两个类,GetActivity用户根据Context获取Activity,LogPrint用于输出日志

    package com.xxx.xxx.Util;//自己的包名
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.ContextWrapper;
    
    public class GetActivity {
    
    
        public static Activity getActivityByContext(Context context){
            while(context instanceof ContextWrapper){
                if(context instanceof Activity){
                    return (Activity) context;
                }
                context = ((ContextWrapper) context).getBaseContext();
            }
            return null;
        }
    }

     

    package com.xxx.xxx.Util;//自己的包名
    
    import com.tencent.mm.opensdk.utils.Log;
    
    public class LogPrint {
    
        public static void Log(String logStr){
            Log.d("AndroidLog",logStr);
        }
    }

    6、创建一个用于语音唤醒的Package名字叫Wakeup,并且创建三个类WakeupHandler(处理唤醒)、WakeupListener(监听唤醒结果)、WakeUpResult(唤醒结果解析获取)

    package com.xxx.xxx.Wakeup;//自己的包名
    import com.baidu.speech.EventListener;
    import com.baidu.speech.asr.SpeechConstant;
    import com.unity3d.player.UnityPlayer;
    
    public class WakeupListener  implements EventListener {
        @Override
        public void onEvent(String name, String params, byte[] bytes, int i, int i1) {
            if (SpeechConstant.CALLBACK_EVENT_WAKEUP_SUCCESS.equals(name)) { // 识别唤醒词成功
                WakeUpResult result = WakeUpResult.parseJson(name, params);
                int errorCode = result.getErrorCode();
                if (result.hasError()) { // error不为0依旧有可能是异常情况
                } else {
                    String word = result.getWord();
                    //将结果发送给Unity
                    UnityPlayer.UnitySendMessage("NetLogic", "WakeupResult", name+"&"+params);
                }
            } else if (SpeechConstant.CALLBACK_EVENT_WAKEUP_ERROR.equals(name)) { // 识别唤醒词报错
                WakeUpResult result = WakeUpResult.parseJson(name, params);
                int errorCode = result.getErrorCode();
                if (result.hasError()) {
                }
            } else if (SpeechConstant.CALLBACK_EVENT_WAKEUP_STOPED.equals(name)) { // 关闭唤醒词
    
            } else if (SpeechConstant.CALLBACK_EVENT_WAKEUP_AUDIO.equals(name)) { // 音频回调
            }
        }
    }
    

     

    package com.xxx.xxx.Wakeup;
    
    import com.baidu.speech.asr.SpeechConstant;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    public class WakeUpResult {
        private String name;
        private String origalJson;
        private String word;
        private String desc;
        private int errorCode;
    
        private static int ERROR_NONE = 0;
    
        private static final String TAG = "WakeUpResult";
    
        public boolean hasError() {
            return errorCode != ERROR_NONE;
        }
    
        public String getOrigalJson() {
            return origalJson;
        }
    
        public void setOrigalJson(String origalJson) {
            this.origalJson = origalJson;
        }
    
        public String getWord() {
            return word;
        }
    
        public void setWord(String word) {
            this.word = word;
        }
    
        public String getDesc() {
            return desc;
        }
    
        public void setDesc(String desc) {
            this.desc = desc;
        }
    
        public int getErrorCode() {
            return errorCode;
        }
    
        public void setErrorCode(int errorCode) {
            this.errorCode = errorCode;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public static WakeUpResult parseJson(String name, String jsonStr) {
            WakeUpResult result = new WakeUpResult();
            result.setOrigalJson(jsonStr);
            try {
                JSONObject json = new JSONObject(jsonStr);
                if (SpeechConstant.CALLBACK_EVENT_WAKEUP_SUCCESS.equals(name)) {
                    int error = json.optInt("errorCode");
                    result.setErrorCode(error);
                    result.setDesc(json.optString("errorDesc"));
                    if (!result.hasError()) {
                        result.setWord(json.optString("word"));
                    }
                } else {
                    int error = json.optInt("error");
                    result.setErrorCode(error);
                    result.setDesc(json.optString("desc"));
                }
    
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
            return result;
        }
    }
    
    

     

    package com.xxx.xxx.Wakeup;//自己的包名
    
    import android.Manifest;
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.os.Build;
    import com.baidu.speech.EventListener;
    import com.baidu.speech.EventManager;
    import com.baidu.speech.EventManagerFactory;
    import com.baidu.speech.asr.SpeechConstant;
    import org.json.JSONObject;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import static com.xxx.xxx.Util.GetActivity.getActivityByContext;
    
    public class WakeupHandler {
    
        private static boolean isInited = false;
    
        private EventManager wp;
        private EventListener eventListener;
    
        private static final String TAG = "MyWakeup";
    
        public WakeupHandler(Context context, EventListener eventListener) {
            if (isInited) {
                eventListener = null;
                return;
            }
            isInited = true;
            this.eventListener = eventListener;
            //动态申请权限
            initPermission(context);
            wp = EventManagerFactory.create(context, "wp");
            wp.registerListener(eventListener);
        }
        //开始唤醒
        public void Start() {
            Map<String, Object> params = new HashMap<String, Object>();
            params.put(SpeechConstant.WP_WORDS_FILE, "assets:///WakeUp.bin");
            params.put(SpeechConstant.APP_ID, "22328262");
            params.put(SpeechConstant.APP_KEY, "At03gUWQMzSysSmWHixFZ098");
            params.put(SpeechConstant.SECRET, "4z1Cuow14AF4jAQmmlS1P7BiZ5HA15Vb");
    
    
            String json = new JSONObject(params).toString();
            wp.send(SpeechConstant.WAKEUP_START, json, null, 0, 0);
        }
        // 停止唤醒
        public void Stop() {
            wp.send(SpeechConstant.WAKEUP_STOP, null, null, 0, 0);
        }
    
        //释放实例
        public void Release() {
            wp.unregisterListener(eventListener);
            wp = null;
            isInited = false;
        }
        //申请权限
        private void initPermission(Context context) {
            String permissions[] = {Manifest.permission.RECORD_AUDIO,
                    Manifest.permission.ACCESS_NETWORK_STATE,
                    Manifest.permission.INTERNET,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            };
    
            PackageManager pm = getActivityByContext(context).getPackageManager();
            boolean permission_readStorage = (PackageManager.PERMISSION_GRANTED ==
                    pm.checkPermission("android.permission.RECORD_AUDIO", "com.cientx.tianguo"));
            boolean permission_network_state = (PackageManager.PERMISSION_GRANTED ==
                    pm.checkPermission("android.permission.ACCESS_NETWORK_STATE", "com.cientx.tianguo"));
            boolean permission_internet = (PackageManager.PERMISSION_GRANTED ==
                    pm.checkPermission("android.permission.INTERNET", "com.cientx.tianguo"));
            boolean permission_writeStorage = (PackageManager.PERMISSION_GRANTED ==
                    pm.checkPermission("android.permission.WRITE_EXTERNAL_STORAGE", "com.cientx.tianguo"));
    
            if (!(permission_readStorage && permission_writeStorage && permission_network_state && permission_internet)) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    getActivityByContext(context).requestPermissions(permissions, 0x01);
                }
            }
        }
    }
    

     

    7、在语音技术主类CientBaiDuVoiceMainActivity中调用语音识别、语音唤醒接口

     //语音识别
        RecognHandler mRecognHandler;
        //语音唤醒
        WakeupHandler mWakeup;
        //语音合成
        SpeechSynthesizerHandler mSynthesizerHandler;
        //语音识别初始化
        public void InitRecogn(Context context) {
            RecognListener listener=new RecognListener();
            mRecognHandler=new RecognHandler(context,listener);
        }
        //开始语音识别
        public void StartRecogn() {
            mRecognHandler.Start();
        }
        //停止语音识别
        public void StopRecogn() {
            mRecognHandler.Stop();
        }
        //释放语音识别实例
        public void ReleaseRecogn() {
            mRecognHandler.Release();
            mRecognHandler=null;
        }
    
        //唤醒初始化
        public void InitWakeUp(Context context){
            WakeupListener listener=new WakeupListener();
            mWakeup = new WakeupHandler(context,listener);
        }
        //开始唤醒
        public void StartWakeUp(){
            mWakeup.Start();
        }
        //停止唤醒
        public void StopWakeUp(){
            mWakeup.Stop();
        }
        //释放唤醒实例
        public void ReleaseWakeUp(){
            mWakeup.Release();
            mWakeup=null;
        }
    

     

    六、编写AndroidManifest.cml文件

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.xxx.xxx">   <!-- 填写自己的包名 -->
        <!-- 通用权限 -->
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
        <!-- 语音识别权限 -->
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
        <!-- 语音合成权限 -->
    
        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
        <uses-permission android:name="android.permission.WRITE_SETTINGS"
            tools:ignore="ProtectedPermissions" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    
        <application android:allowBackup="true">
            <activity android:name=".Wakeup.WakeUpResult"></activity>
            <activity android:name=".Wakeup.WakeupHandler" />
            
            <activity
                android:name=".CientBaiDuVoiceMainActivity"
                android:launchMode="singleTask" />
     <!-- 请填写真实的APP_ID API_KEY SECRET_KEY -->
            <meta-data
                android:name="com.baidu.speech.APP_ID"
                android:value="xxxxx" />
            <meta-data
                android:name="com.baidu.speech.API_KEY"
                android:value="xxxxx" />
            <meta-data
                android:name="com.baidu.speech.SECRET_KEY"
                android:value="xxxxx" />
    
            <service
                android:name="com.baidu.speech.VoiceRecognitionService"
                android:exported="false" />
        </application>
    
    </manifest>

    因为语音唤醒是离线的,需要从百度语音技术官网中导出.bin文件

    网址

    自定义唤醒词 在 http://ai.baidu.com/tech/speech/wake 

    最后导出并下载.bin文件,将文件放到我们的项目下的assets目录下

    如何创建assets目录?

    七、设置签名

    请查看我的另一篇博文中的设置签名

    https://blog.csdn.net/weixin_43271060/article/details/90318254

    八、导出arr包

    在我们新建的Module中的build.gradle中设置

    task copyPlugin(type: Copy) {
        dependsOn assemble
        from('build/outputs/aar')
        into('../../Assets/Plugins/Android')
        include(project.name + '-release.aar')
    }
    

     

    然后在右上角的Gradle中的wxplugins->Task->other中选择copyPlugin即可导出指定的并且已经存在的目录中

    九、Unity中调用

     void Start()
        {
            
            AndroidJavaClass _androidJC = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            if (_androidJC == null)
            {
                Debug.Log("JNI initialization failure.");
                return;
            }
            m_AndroidPluginObj = _androidJC.GetStatic<AndroidJavaObject>("currentActivity");
    
        }
    
        public void InitAsr()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.xxx.xxx.CientBaiDuVoiceMainActivity");//包名加类名
            AndroidJavaObject m_Android = jc.CallStatic<AndroidJavaObject>("getInstance");
            if (m_Android != null)
            {
                m_Android.Call("InitRecogn", m_AndroidPluginObj);
            }
            else
                Debug.Log("AndroidPlugin is Null");
        }
        public void StartRecogn()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.xxx.xxx.CientBaiDuVoiceMainActivity");
            AndroidJavaObject m_Android = jc.CallStatic<AndroidJavaObject>("getInstance");
            if (m_Android != null)
            {
                m_Android.Call("StartRecogn");
            }
            else
                Debug.Log("AndroidPlugin is Null");
        }
        public void StopRecogn()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.xxx.xxx.CientBaiDuVoiceMainActivity");
            AndroidJavaObject m_Android = jc.CallStatic<AndroidJavaObject>("getInstance");
            if (m_Android != null)
            {
                m_Android.Call("StopRecogn");
            }
            else
                Debug.Log("AndroidPlugin is Null");
        }
        public void InitWakeUp()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.xxx.xxx.CientBaiDuVoiceMainActivity");
            AndroidJavaObject m_Android = jc.CallStatic<AndroidJavaObject>("getInstance");
            if (m_Android != null)
            {
                m_Android.Call("InitWakeUp", m_AndroidPluginObj);
            }
            else
                Debug.Log("AndroidPlugin is Null");
        }
    
        public void StartWakeUp()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.xxx.xxx.CientBaiDuVoiceMainActivity");
            AndroidJavaObject m_Android = jc.CallStatic<AndroidJavaObject>("getInstance");
            if (m_Android != null)
            {
                m_Android.Call("StartWakeUp");
            }
            else
                Debug.Log("AndroidPlugin is Null");
        }
        public void StopWakeUp()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.xxx.xxx.CientBaiDuVoiceMainActivity");
            AndroidJavaObject m_Android = jc.CallStatic<AndroidJavaObject>("getInstance");
            if (m_Android != null)
            {
                m_Android.Call("StopWakeUp");
            }
            else
                Debug.Log("AndroidPlugin is Null");
        }
    
        public Text mRecognRes;
        /// <summary>
        /// 百度语音唤醒结果反馈
        /// </summary>
        /// <param name="res"></param>
        void WakeupResult(string res)
        {
            string[] ress = res.Split('&');
            JsonData jsonData = JsonMapper.ToObject(ress[1]);
            if (ress[0] == "wp.data")
            {
                if (jsonData["errorCode"].ToString() == "0")
                {
                    mRecognRes.text = "唤醒成功:" + jsonData["word"].ToString();
                }
            }
        }
        /// <summary>
        /// 百度语音识别结果反馈
        /// </summary>
        /// <param name="res"></param>
        void RecognResult(string res)
        {
            string[] ress = res.Split('&');
            JsonData jsonData = JsonMapper.ToObject(ress[1]);
            string resStr = "";
            if (jsonData["result_type"].ToString() == "partial_result")
            {
                resStr = "临时识别结果:";
            }
            else
            {
                resStr = "最终识别结果:";
            }
    
            resStr += jsonData["best_result"].ToString();
            mRecognRes.text = resStr;
        }

    十、发布arr包遇到的问题,请查看我的另一边博客

    https://blog.csdn.net/weixin_43271060/article/details/108383451

    展开全文
  • Unity插件

    2018-07-03 00:50:22
    1 Unity Remote 4 ...下载地址:https://www.assetstore.unity3d.com/cn/#!/content/18106 流程: 第一步: 安卓手安装好Unity Remote.apk(这个apk是你下载Remote 4 后的一个unity项目编译生成的一个APk) 第二步...
  • Unity3D安装教程

    千次阅读 2017-02-20 10:55:56
    Unity官网下载链接 https://store.unity.com/cn/?_ga=1.107281794.1832005354.1486108272 ...Unity3D安装 附属一些功能:Visual Studio为脚本编辑器必需安装;其他为导出插件,比如导出安卓应用,就选择安
  • 本文实例为大家分享了Unity3D实现物体旋转缩放移动的具体代码,供大家参考,具体内容如下 由于项目运行在安卓上,运用到了插件,比较麻烦。你们可以在触发条件上进行修改,不用插件也可以。 1.下载FingerGestures ...
  • 一.Unity3d安卓系统接入Admob广告教程先下载Admob移动广告SDK插件 https://github.com/unity-plugins/Unity-AdmobAdmobUnityPlugin.unitypackage 是Admob Unity 插件主文件,直接通过Unity的asset import进项目...
  • unity3d配置Android环境

    千次阅读 2017-09-08 11:28:10
    一、确定unity是否有安卓插件(File->BuildSettings)快捷键(Ctrl+Shift+B)打开如下窗口 如果显示OpenDownloadPage,需要点击下载,否则可直接进行安卓环境配置 二、SDK下载地址链接:链接:...
  • unity3d配置环境网上对于配置安卓开发环境的教程也有很多,但是有些部分关键点缺失,对于初入门的开发人员并不友好,所以下面就和大家介绍下配置安卓Android开发环境的教程。一、确定unity是否有安卓插件(File-&...
  • 从 http://www.mob.com/  下载Unity3d的ShareSDK包。   二. 注册一个账号,随便创建一个应用,获得一个APP Key ( 这一步不是必须的,但是可以统计分析数据,很实用)。   三. 导入ShareSDKForU3D.unity...
  • 二、下载Unity的JPush客户端...地址:https://github.com/jpush/jpush-unity3d-plugin 将JpushUnityplugin_v3.2.9导入到Unity工程中 修改AndroidManifest的相关内容 1.极光注册创建的应用包名要与Unity I...
  • Wikitude示例unity打包安卓应用

    千次阅读 2016-02-05 14:07:36
    Wikitude是另外一个增强现实...unity3d版本:5.2.4 android studio版本:1.5.1 首先,下载wikitude的unity的开发包,里面带了一个例子。现在就是打包这个例子。这个里面还有文档,当然是英文的。 下载地址:http://w
  • 1.首先进入ShareSDK 官网http://www.mob.com/,先注册登录Mob进入下载中心,下载ShareSDK的Unity3d 2. 点击ShareSDK的Unity3d,在GitHub里面有相关登录的教程 3.在论坛里面有相关的技术帖进行查看,在论坛产品中心SDK...
  • Unity头像上传功能实现 一

    千次阅读 2018-05-16 00:01:03
    前段时间需要做一个头像上传功能,参考了一些资料后总算是...新建一个Android项目,我这里用的是Idea(Eclipse的安卓插件一直弄不好然后放弃了),第一次建要好长时间下载插件,耐心等一下。 最低SDK就选择跟Uni...
  • 8.3.8,装到安卓手机上运行,扫描物体,直到所有透明块都变成绿色,则扫描成功,成功之后会生成 .od 文件,分享到电脑上传到官网,然后再选择UnityEditor Platform形式下载下来,下载下来是UnityPackage包的形式,...
  • jenkins :2.50 /2.32.3(长期支持版 建议使用此版本) 操作系统:windows 7 x64 sp1 (打包安卓和win) ,mac os(打包ios) 这个版本在安装后默认语言是中文 离线安装插件 1、下载jenkins的插件文件(hpi文件) 2、以管理...
  • 腾讯MSDK接入untiy3d游戏

    千次阅读 2014-12-30 18:00:22
    即是要在NetBean的IDE的插件管理器中下载安卓开发插件。这个是安卓开发的必须要的。   2.使用NetBean打开下载的MSDK中的MSDKLibrary项目。构建项目。构建成功之后在bin目录中出现对应的apk文件。我们需要接入unity...
  • icon: 'https://pic3.zhimg.com/v2-080267af84aa0e97c66d5f12e311c3d6_xl.jpg', link: 'https://github.com/fa-ge/NativeShare', title: 'NativeShare', desc: 'NativeShare是一个整合了各大移动端浏览器调用...
  • 支付宝SDK

    2018-08-03 11:22:06
    unity3d 接入安卓支付宝SDK 操作步骤性这东西,时间长了就难免忘记,以防日后要接的时候再次爬坑 目标:导出支付宝插件包(arr包)给UNITY调用 主要三大坑: A坑 Android Studio的安装和配置 提示少这少...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

安卓unity3d插件下载