• Unity调用Android类方法


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

     

  • 相关阅读:
    16进制与10进制
    npm模块管理器
    Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表
    cross-env使用笔记
    webpack 运行提示“The ‘mode‘ option has not been set”的原因和解决方法
    cnpm install -S 与cnpm install -D (dependencies和devDependencies的区别)
    Webpack基础学习
    webpack入门——webpack的安装与使用
    npm init 之package.json
    入门 Webpack,看这篇就够了
  • 原文地址:https://www.cnblogs.com/zhangmiao14/p/5837648.html
Copyright © 2020-2023  润新知