Unity调用Android类方法-创新互联
1. 添加Unity的classes.jar文件
创新互联主营三河网站建设的网络公司,主营网站建设方案,成都app软件开发,三河h5微信小程序搭建,三河网站营销推广欢迎三河等地区企业咨询创建一个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">与
AndriodManifest.xml
打包文件,点击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("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 ("currentActivity");25 string returnValue = jo.Call ("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 ("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 ("currentActivity");38 string returnValue = jo.Call ("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 ("currentActivity");45 jo.CallStatic("test5");46 }47 }48 }
7. 运行结果显示
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享标题:Unity调用Android类方法-创新互联
标题URL:http://scyanting.com/article/hdopg.html