• 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

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

    3. 创建Java工程

        第一步

        

        第二步

        第三步

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

         第五步

        

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

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

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

        

    4. 修改Android工程

    4.1 导入Unity5.0 classes.jar

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

          C:Program FilesUnityEditorDataPlaybackEnginesandroidplayercomunity3dplayer)

          2) classes.jar位于:C:Program FilesUnityEditorDataPlaybackEnginesandroidplayer eleasein,其导入方法如下图所示:

          

    4.2 替换Launcher Icon

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

    4.3 修改MainActivity.java        

    [java] view plain copy 在CODE上查看代码片派生到我的代码片
    1. package com.example.plugintest;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5.   
    6. import com.unity3d.player.UnityPlayerActivity;  
    7.   
    8. public class MainActivity extends UnityPlayerActivity {  
    9.   
    10.     @Override  
    11.     protected void onCreate(Bundle savedInstanceState) {  
    12.         super.onCreate(savedInstanceState);  
    13.     }  
    14.   
    15.     // only for test, C# in unity will call it  
    16.     public int GetInt(){  
    17.         return 1000;  
    18.     }  
    19.   
    20. }  



    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的“AssetsPluginsAndroid”目录中。

          1)bin目录下的plugintest.jar

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

          3)  整个res目录

          其结果在Unity Project如下图:

        

    5. 修改Unity工程

    5.1 修改Android 【Player Settings】

    5.2 访问Java接口

    [csharp] view plain copy 在CODE上查看代码片派生到我的代码片
    1. using UnityEngine;  
    2. using System.Collections;  
    3.   
    4. public class AndroidTest : MonoBehaviour {  
    5.   
    6.     // Use this for initialization  
    7.     void Start () {  
    8.   
    9.     }  
    10.       
    11.     // Update is called once per frame  
    12.     void Update () {  
    13.         AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");  
    14.         AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");  
    15.         Debug.Log("*********JerryTest*********" + jo.Call<int>("GetInt"));      
    16.     }  
    17. }  

    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中增加一行:

    [html] view plain copy 在CODE上查看代码片派生到我的代码片
    1. <meta-data android:name="unityplayer.UnityActivity" android:value="true" />  


              全部AndroidManifest如下所示:

    [html] view plain copy 在CODE上查看代码片派生到我的代码片
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     package="cn.toltech.game.doubleboats"  
    4.     android:versionCode="1"  
    5.     android:versionName="1.0" >  
    6.     <supports-screens  
    7.         android:smallScreens="true"  
    8.         android:normalScreens="true"  
    9.         android:largeScreens="true"  
    10.         android:xlargeScreens="true"  
    11.         android:anyDensity="true"/>  
    12.     <uses-sdk  
    13.         android:minSdkVersion="14"  
    14.         android:targetSdkVersion="21" />  
    15.   
    16.     <application  
    17.         android:allowBackup="true"  
    18.         android:icon="@drawable/ic_launcher"  
    19.         android:label="@string/app_name"  
    20.         android:theme="@android:style/Theme.NoTitleBar">  
    21.         <activity  
    22.             android:name="com.example.plguintest.MainActivity"  
    23.             android:label="@string/app_name" >  
    24.             <intent-filter>  
    25.                 <action android:name="android.intent.action.MAIN" />  
    26.   
    27.                 <category android:name="android.intent.category.LAUNCHER" />  
    28.             </intent-filter>  
    29.             <meta-data android:name="unityplayer.UnityActivity" android:value="true" />  
    30.         </activity>  
    31.     </application>  
    32.   
    33. </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   

  • 相关阅读:
    查看端口被占用
    Eclipse导入包
    Eclipse中构造方法自动生成
    Eclipse中get/set方法自动生成
    Eclipse改字体大小
    设计六原则
    类的关系
    JAVA实现多线程下载
    try...catch的前世今生
    447. 回旋镖的数量
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6381811.html
Copyright © 2020-2023  润新知