Unity5.0与Android交互

1. 目标

    1) Unity3D可调用Android Java函数(在.jar中)

    2) Java可调用Unity3D函数

    3) Unity3D可调用Android C函数(在.so中)

2. 测试环境

    1) Unity5.0

    2) JDK: jdk-8u25-windows-i586

    3) Android SDK

Unity5.0与Android交互_第1张图片


      4) Eclipse : adt-bundle-windows-x86中自带的

3. 创建Java工程

    第一步

    

    第二步

Unity5.0与Android交互_第2张图片

    第三步

Unity5.0与Android交互_第3张图片

    第四步: Configure Laucher Icon,不做任何修改,不要把你的Image File在这儿加入,它会强行修改Image File的尺寸,在后面把它直接放入res/drawable即可。

     第五步

    Unity5.0与Android交互_第4张图片

     第六步:Blank Activity采用默认值即可。

     第七步:删除下面红色标记部分

Unity5.0与Android交互_第5张图片

     注:若其基类不是Activity,则在左边PlugInTest上点右键,然后选择Properties,进入如下界面:

Unity5.0与Android交互_第6张图片

    

4. 修改Android工程

4.1 导入Unity5.0 classes.jar

      1) 其中定义了 UnityPlayerActivity<它的基类是Activity>,其源码位置:

      C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\com\unity3d\player)

      2) classes.jar位于:C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin,其导入方法如下图所示:

      Unity5.0与Android交互_第7张图片

4.2 替换Launcher Icon

      把自己制作的ic_launcher.png覆盖res/drawable-xxx目录中的ic_launcher.png    

4.3 修改MainActivity.java        

package com.example.plugintest;

import android.app.Activity;
import android.os.Bundle;

import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    // only for test, C# in unity will call it
    public int GetInt(){
    	return 1000;
    }

}


4.4 把Android内容导出到Unity5.0

4.4.1 生成plugintest.jar

      1) 进入PlugInTest的Properties中,并勾选“Is Library”

      2) Project->Clean

      3) Project->Build Project

      4) 生成的plugintest.jar见bin目录

4.4.2 把PlugInTest中内容放入Unity5.0

      把以下内容都于Unity Project的“Assets\Plugins\Android”目录中。

      1)bin目录下的plugintest.jar

      2)bin目录下的AndroidManifest.xml (可根据需要增加其它的Activity或权限)

      3)  整个res目录

      其结果在Unity Project如下图:

    

5. 修改Unity工程

5.1 修改Android 【Player Settings】

Unity5.0与Android交互_第8张图片


5.2 访问Java接口

using UnityEngine;
using System.Collections;

public class AndroidTest : MonoBehaviour {

	// Use this for initialization
	void Start () {

	}
	
	// Update is called once per frame
	void Update () {
		AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
		AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
		Debug.Log("*********JerryTest*********" + jo.Call<int>("GetInt"));	
	}
}


UnityEngine.AndroidJavaClass与java.lang.Class及其子类对应。

UnityEngine.AndroidJavaObject与java.lang.Object及其子类对应。




5.3 导出apk

      File->Build Run

      当导出apk时,可能遇到下面的问题:

         Unable to find unity activity in manifest. You need to make sure orientation attribute is set to fullSensor manually.

      需在AndroidManifest中增加一行:

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />

           全部AndroidManifest如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.toltech.game.doubleboats"
    android:versionCode="1"
    android:versionName="1.0" >
    <supports-screens
        android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true"
        android:anyDensity="true"/>
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar">
        <activity
            android:name="com.example.plguintest.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>

6. Android Native Plug

     对于Android平台(armv7,x86)的Native Plugin, lib*.so应放于以下目录中:

     1) X86平台:     Assets/Plugins/Android/libs/x86/
     2) armv7平台:Assets/Plugins/Android/libs/armeabi-v7a/



参考:http://docs.unity3d.com/Manual/PluginsForAndroid.html


你可能感兴趣的:(Unity5.0与Android交互)