Unity3d调用Andriod
最近在做一些前端的尝试,需要用到unity3d调用android原生开发打包好的一些功能,于是就在网上搜索一些方法,发现网上的一些方法多多少少有一点错误!这里自己写一个随笔记录一下。
一、首先创建android开发好的arr包(android studio开发环境)
1.创建android工程
这里的sdk选择比较重要,要与调试机以及等下unity工程里面的minmun sdk 版本一样才可以(有些低版本的unity支持的sdk版本较低),不然会在unity编译打包的时候报错误!
2、修改android工程build.gradle(android studio环境需要),让工程变成library
3、将unity的开发包jar导入到android工程中
找到unity的开发包classes.jar,路径在unity的安装路径中(D:\Program Files\Unity 2017.1.0b1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes\classes.jar)中,
右键复制classes.jar,直接黏贴到android studio工程libs文件夹中
右键app,弹出下拉菜单,选择Open module setting,在弹出的窗口中切换到Dependencies选项卡,将classes.jar包含到工程里面
4.修改class main ,Mainacity代码让他继承与UnityPlayerActivity类
下面是我的代码,写了两个方法,一个是用来测试接口返回值,一个是用来测试调用弹窗的
package com.example.hsh.testun;import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.Toast;import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity {Context m_context;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(R.layout.activity_main);m_context = this;}public String ShowDialog(final String _title, final String _content){return "Java return";}public void dialog2(){Log.d("dialog2","ffffffffffff");}public void dialog1(){AlertDialog.Builder mBuilder=new AlertDialog.Builder(m_context);mBuilder.setTitle("testtttt").setMessage("xxxxxxxxxxxxxxxxx").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// Whatever... }});AlertDialog dialog=mBuilder.create();dialog.show();} }
5、编译成arr
二、创建unity工程
1、拉入Buttion跟Text组件用于测试
2、创建Plugins/Android路径(必须是一样名字的)
将刚才android工程创建的arr包中classes.jar,放到unity工程的Plugins/Android路径中,并创建AndroidManifest.xml文件
AndroidManifest.xml文件内容如下
<?xml version="1.0" encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.example.hsh.testun"xmlns:tools="http://schemas.android.com/tools"android:installLocation="preferExternal"android:versionCode="1"android:versionName="1.0"><supports-screensandroid:smallScreens="true"android:normalScreens="true"android:largeScreens="true"android:xlargeScreens="true"android:anyDensity="true"/><uses-permission android:name="android.permission.INTERNET"/><applicationandroid:theme="@style/UnityThemeSelector"android:icon="@drawable/app_icon"android:label="@string/app_name"android:debuggable="true"><activity android:name=".MainActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="unityplayer.UnityActivity" android:value="true" /></activity></application> </manifest>
其中<activity android:name=".MainActivity">,属性名要和自己android jar中的activity名字一样,我的就是MainActivity,所以不用更改
3、创建c#测试脚本
using UnityEngine; using System.Collections; using UnityEngine.UI;public class TestBtnScript: MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}public void MyShowDialog(){// Android的Java接口 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");//AndroidJavaClass jc = new AndroidJavaClass("com.example.hsh.testun.MainActivity");//AndroidJavaObject jo = new AndroidJavaObject("com.example.hsh.testun.MainActivity");// 参数 string[] mObject = new string[2];mObject[0] = "Dialog title";mObject[1] = "Dialog text is here!!"; try{jo.Call("dialog1");string ret = jo.Call<string>("ShowDialog", mObject);Text text4 = GameObject.Find("Canvas/Text").GetComponent<Text>();text4.text = ret;}catch(System.Exception e){Text text2 = GameObject.Find("Canvas/Text").GetComponent<Text>();text2.text = e.ToString();}// 调用方法 } }
将MyShowDialog方法绑定到button的点击事件,就可以了。
注意,C#代码中,有注释的//AndroidJavaObject jo = new AndroidJavaObject("com.example.hsh.testun.MainActivity");
如果用这个jo直接调用call去调用android中的ShowDialog方法,是可以拿到string的返回值的,但是调用dialog1去弹窗的情况,会出现安卓报错nullpointer的错误。(具体空指针位置在代码AlertDialog.Builder mBuilder=new AlertDialog.Builder(m_context);这一行中,具体原因不太明白,希望有理解安卓机制的大牛告知)。
转载于:https://www.cnblogs.com/Parchk/p/7289854.html
Unity3d调用Andriod相关推荐
- android 引用非 android 工程,Unity3D调用android方法(非插件方式)
关于Unity3D工程与android工程的转换与合并,请参考我的另外一篇博客,如果你对Unity3D工程加入到android工程的过程不熟悉,也请先看完下面这篇博客: android与Unity3D ...
- Unity3D调用android方法(非插件方式)
关于Unity3Dproject与androidproject的转换与合并,请參考我的另外一篇博客.假设你对Unity3Dproject增加到androidproject的过程不熟悉.也请先看完以下这 ...
- Unity3D调用Android提供的接口
需求:Android提供相关的接口,android只提供接口,没有相关的界面,android接口打包以jar包的形式供Unity3D调用 1.编写相关的android接口 在studio中新建工程,并 ...
- Unity3d调用Android版so库
C源码封装Android版函数库 工具介绍 需要Android NDK工具包,下载地址为: https://developer.android.google.cn/ndk/downloads/inde ...
- unity3d调用android方法,Unity3D 调用Android原生方法2
原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅Unity3D引擎技术交流QQ群:[119706192]本文链接地址:Unity3D 调用Android原生方法2 记一次Unity通过An ...
- uniapp 调用andriod 接口
uniapp 调用 andriod 接口 获取本地相册 /照相机功能(vue3) importOrChooseImage.vue <template><view style=&quo ...
- unity3d 调用windows窗口
1 编辑模式(Editor)下: string path = EditorUtility.OpenFilePanel("Load png Textures of Directory&q ...
- unity无法调用android,Unity3D调用android方法(非插件方式)
关于Unity3D工程与android工程的转换与合并,请参考我的另外一篇博客,如果你对Unity3D工程加入到android工程的过程不熟悉,也请先看完下面这篇博客: 下面,我们来说说本博客的终端, ...
- unity3d 调用Start 注意
在unity3d中,同一个脚本被绑定到多个物体上的时候,只有active的物体才会调用void Start () 方法, 如果物体是NO Active 的状态,则不会调用Start,Awake也不会 ...
- unity3d android aar,Android Stuido导出AAR 给Unity3D调用注意事项
1. 导出 AAR过程需要注意,依赖的文件并没有打进去,所以要收到拷入到 Unity项目中,如下图中的 support包,是我项目中要用到的: 2.删除aar包中重复的 libs下的 jar文件和 j ...
最新文章
- Microbiome: 绝对定量环境样本细菌、真菌、真核群落丰度
- AcWing - 165 小猫爬山(dfs)
- 华为交换机的配置及:access、trunk、hybird端口详解
- Codeforces 746 G. New Roads
- 2019 ICPC Asia Nanchang Regional And and Pair 组合数学
- python compare excel_python简单操作excle的方法
- py哪个函数可以返回输入的变量类型_[Python基础]二、pycharm,python变量
- 日志写入hbase_千亿级日志系统设计思路,牛人必学!
- 清翔电子单片机原理图stc89c52_1000. 电子编程入门到工程师--从看得到开始
- 新时达as380服务器显示75,成为电梯高手之新时达AS380控制系统故障代码
- 顶级域名 一级域名 二级域名 三级域名划分
- 修改输入框placeholder文字样式(颜色、字号等)
- 佳能数码相机照片删除了怎么恢复,如何恢复还原佳能相机误删的照片
- turtlebot3 在gazebo仿真下 通过 gmapping slam 建立二维平面地图——全过程
- 2022K+全球软件研发行业创新峰会议题海选精彩进行中
- M1 Mac安装 PS 2021 闪退、卡启动界面解决方法
- Gitee上传代码教程
- Unity-3d小游戏开发-----走迷宫
- 那些年啊,那些事——一个程序员的奋斗史 ——98
- 最小生成树prim之挖井