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 false14             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.  运行结果显示

 








本文转自xmgdc51CTO博客,原文链接:http://blog.51cto.com/12953214/1940451 ,如需转载请自行联系原作者









相关文章
|
28天前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
14天前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
40 2
基于Android P,自定义Android开机动画的方法
|
14天前
|
Android开发
基于android-11.0.0_r39,系统应用的手动签名方法和过程
本文介绍了基于Android 11.0.0_r39版本进行系统应用手动签名的方法和解决签名过程中遇到的错误,包括处理`no conscrypt_openjdk_jni-linux-x86_64`和`RegisterNatives failed`的问题。
60 2
|
14天前
|
Android开发
Android在rootdir根目录创建自定义目录和挂载点的方法
本文介绍了在Android高通平台的根目录下创建自定义目录和挂载点的方法,通过修改Android.mk文件并使用`LOCAL_POST_INSTALL_CMD`变量在编译过程中添加目录,最终在ramdisk.img的系统根路径下成功创建了`/factory/bin`目录。
32 1
|
14天前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
114 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
27天前
|
图形学 Android开发 iOS开发
穿越数字洪流,揭秘Unity3d中的视频魔法!Windows、Android和iOS如何征服RTSP与RTMP的终极指南!
【8月更文挑战第15天】在数字媒体的海洋中,实时视频流是连接世界的桥梁。对于那些渴望在Unity3d中搭建这座桥梁的开发者来说,本文将揭示如何在Windows、Android和iOS平台上征服RTSP与RTMP的秘密。我们将深入探讨这两种协议的特性,以及在不同平台上实现流畅播放的技巧。无论你是追求稳定性的RTSP拥趸,还是低延迟的RTMP忠实粉丝,这里都有你需要的答案。让我们一起穿越数字洪流,探索Unity3d中视频魔法的世界吧!
35 2
|
28天前
|
前端开发 图形学
Unity精华☀️UI和物体可见性的判断方法
Unity精华☀️UI和物体可见性的判断方法
|
29天前
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
10天前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
59 0
|
10天前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
26 0