Unity调用Android类方法

1.  添加Unity的classes.jar文件

创建一个Android工程AndroidUnityDemo。

由于Unity的版本不同,直接在Unity安装包文件夹里面搜索classes.jar文件,如果有多个classes.jar文件,一般选择的是mono/Release文件夹下的classes.jar文件。

将classes.jar文件放在app文件下的libs文件夹下。

然后,更新一下。

2.  编写Android类

打开MainActivity.java类,让MainActivity类继承于UnityPlayerActivity类,如果提示类不存在,说明unity的classe.jar文件没有加载进来。
删除setContentView(R.layout.activity_main); 
MainActivity.java
 1 package com.xxxxxx.androidunitydemo;
 2
 3 import android.os.Bundle;
 4 import android.util.Log;
 5
 6 import com.unity3d.player.UnityPlayerActivity;
 7 public class MainActivity extends UnityPlayerActivity {
 8     @Override
 9     protected void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11     }
12     public void test1()
13     {
14         Log.v("Android_Unity", "no return value and no parameter");
15     }
16     public String test2()
17     {
18         Log.v("Android_Unity","have return value and no parameter");
19         return "Hello Unity";
20     }
21     public void test3(String par)
22     {
23         Log.v("Android_Unity","no return value and have parameter");
24         Log.v("Android_Unity",par);
25     }
26     public String test4(String par)
27     {
28         Log.v("Android_Unity","have return value and have parameter");
29         Log.v("Android_Unity",par);
30         return "Hello Unity";
31     }
32     public static void test5()
33     {
34         Log.v("Android_Unity", "static function");
35     }
36 }

3.  打包成arr文件

打开build.gradle文件,将apply plugin: ‘com.android.application’修改为apply plugin: ‘com.android.library’,将applicationId ‘com.XXXXXX.androidunitydemo’删除。
Build.gradle
 1 apply plugin: ‘com.android.library‘
 2 android {
 3     compileSdkVersion 23
 4     buildToolsVersion "23.0.3"
 5     defaultConfig {
 6         minSdkVersion 15
 7         targetSdkVersion 23
 8         versionCode 1
 9         versionName "1.0"
10     }
11     buildTypes {
12         release {
13             minifyEnabled false
14             proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
15         }
16     }
17 }
18 dependencies {
19     compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
20     testCompile ‘junit:junit:4.12‘
21     compile ‘com.android.support:appcompat-v7:23.4.0‘
22 }

如果不用在Unity中添加Android的res文件的话,将AndroidManifest文件中使用res的部分删除。修改AndroidManifest.xml文件,加入android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">与<meta-data android:name="unityplayer.UnityActivity" android:value="true" />

AndriodManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxxxxx.androidunitydemo"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="23" />
    <application
        android:allowBackup="true"
        android:label="AndroidUnityDemo"
        android:supportsRtl="true" >
        <activity android:name="com.xxxxxx.androidunitydemo.MainActivity"
                  android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
            <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>       
打包文件,点击Build->Build Apk,点击Show in Explorer,打开arr文件所在文件夹,点击outputs->arr,就可以看到app-debug.arr压缩包。

4.  创建一个简单场景

创建一个Unity项目名为UnityAndroidDemo。

点击File->Build Setting,点击Android,在点击Switch platform按钮,进行平台转换,点击Player Settings,在Inspector会看到具体内容,点击Other Settings,找到Identification中的Bundle Identifier,将其内容修改成Adnroid的packageName,也就是AndroidManifext.xml文件中package的值。

点击File->Save Scene,保存场景。

5.  将AndroidManifest.xml与arr文件加入到Unity项目中

在Project里创建文件夹Plugins,在文件夹Plugins文件夹里创建文件夹Android,将app-debug.arr文件解压,将其中的classes.jar文件与AndroidManifest.xml文件取出来放入Unity的Android文件夹下。

6.  调用Android类

打开Main Camera,点击Add Component->New Script,创建一个c#文件,点击Create and Add。

打开NewBehaviourScript.cs文件,进行编写。

 1 using UnityEngine;
 2 using System.Collections;
 3
 4 public class NewBehaviourScript : MonoBehaviour {
 5     // Use this for initialization
 6     void Start () {
 7     }
 8     // Update is called once per frame
 9     void Update () {
10         if (Input.GetKey(KeyCode.Escape))
11             Application.Quit();
12     }
13     void OnGUI()
14     {
15         if (GUILayout.Button("NoReturnValueAndNoParameter"))
16         {
17             AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
18             AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
19             jo.Call("test1");
20         }
21         if (GUILayout.Button("HaveReturnValueAndNoParameter"))
22         {
23             AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
24             AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
25             string returnValue = jo.Call<string>("test2");
26             Debug.Log("Have Return Value And No Parameter Return Value : " + returnValue);
27         }
28         if (GUILayout.Button("NoReturnValueAndHaveParameter"))
29         {
30             AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
31             AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
32             jo.Call("test3","Hello Android");
33         }
34         if (GUILayout.Button("HaveReturnValueAndHaveParameter"))
35         {
36             AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
37             AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
38             string returnValue = jo.Call<string>("test4","Hello Android");
39             Debug.Log("Have Return Value And Have Parameter Return Value : " + returnValue);
40         }
41         if (GUILayout.Button("staticFunction"))
42         {
43             AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
44             AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
45             jo.CallStatic("test5");
46         }
47     }
48 }

7.  运行结果显示

时间: 2024-10-10 10:30:58

Unity调用Android类方法的相关文章

Unity调用Android配置方法

方法一:发布eclipse android工程(如图勾选),如同IOS发布xcode一样,在eclipse中编写调用 方法二: 操作过程配置要点: 1.新建Android工程,注意包路径比如我的是com.zx,其他步骤直接下一步完成 2.勾选Mark this project as a library 3.新建Android工程编写相关接口方法后,复制bin文件(只需要zx.jar).res资源包.AndroidMainfest.xml配置文件 4.复制到Unity工程中Plugins/Andr

再谈Unity调用Android的Activity

这段时间在研究Unity4.3开发环境下,如何调用由Android SDK4.4.2写的Activity.参考了很多网上的博客,百度出了几十篇大部分都是转载雨松MOMO的,这里必须向雨松MOMO表示敬意!但雨松MOMO写的博客太旧了,不少内容已经过时,我严格按他说的步骤进行,还是出了问题,所以本博客就是告诉大家在Unity4.3+Android SDK4.4.2环境,起动Activity的细节. 我这篇博客不会从零讲起,所以首先给出两个重要的链接,大家应该看一下: 第一个是雨松MOMO的  ht

unity调用Android功能

Unity需要调用Android的功能主要涉及两种方式,一种是使用Android的插件,另一种是导出为GoogleAndroid 工程,进行处理.用途是使用第三方的插件 或者 接入渠道的SDK. 1:使用Android的插件处理. 具体过程,搜索引擎有很多结果,不再赘述. 主要要注意: 导出的jar的时候直接使用Eclipse中的export选项,选择src中的所有以及gen中的R.java即可.另外unity-classes.jar不需要再次包含. 当需要同时使用多个插件的时候: Androi

Unity调用Android的Activity

之前http://shuxiayeshou.blog.51cto.com/4452347/1932216 写了关于Unity与Android结合所遇到的问题及解决方法 总结一下,Unity做一个简单的场景,AndroidStudio建一个简单的项目,其中MainActivity是要继承自 UnityPlayerActivity的,这样Unity程序可以调用Android端MainActivity的方法了 那如果Android项目中还有一个NewActivity,我们要通过Unity把他打开咋办呢

Unity 调用android插件

1. Unity的Bundle Identifier必须和你的android报名一致 Activity和View的区别: Activity应该是一个展示页面,View是页面上一些按钮视图等等. 如何调用Android插件:  (如果你把方法主入口中的) AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); //参数不变 AndroidJavaObject jo = jc.GetStat

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调用Android百度地图

由于个人是Android小白,在这个配置上面被折磨了很久,因此写下这篇文章 工具:eclipse + unity5.6.1 首先去百度地图开发者平台下载你需要的资源,我只需要显示地图和定位,这个时候你一定要注意了,一定要把你所需要的功能全部选择了再下载,要不然BaiduLBS_Android.jar包里面只有你选择的那个单个需求的类,下载下来之后将BaiduLBS_Android.jar类复制个副本,将后缀改成.rar格式,解压出来(后面会用到里面的assets文件夹) eclipse中配置:

Unity调用Android的API实现分享功能&lt;转&gt;

问题:如何在unity3d的游戏中实现分享功能,如图 思路: 1.分享功能的实现方式有多种,较方便快捷的一种是直接调用android的API来调出系统的分享界面 2.unity3d里面调用android的API需要为此编写一个android的插件 3.在插件(android的jar包)里面调用Intent类来实现Activity间的消息传递,换出系统的分享控制台 代码: Android插件代码 1 package com.XXX.XXX; 2 3 import android.content.I

Unity调用android平台java代码

最近因为公司需要开始研究Unity平台的sdk接入.首先从调用最简单的java代码开始. 1.首先建立android lib项目. package unityPlugin; import com.unity3d.player.UnityPlayer; import android.widget.Toast; public class UnityPluginTest { public static void show(){ UnityPlayer.currentActivity.runOnUiTh