unity调用Android中定义的方法

unity调用Android中定义的方法

               首先在Unity安装目录中找到Unity提供的classes.jar包,
然后将他导入到Android创建的项目Lib文件中(在Project目录下找到项目对应的Lib文件夹,直接粘贴进去,不要忘了Add as library)

然后需要修改MainActivity,让其继承自UnityPlayerActivity;
在MainActivity类中定义一些需要在unity中调用的公有方法;
完成后对项目进行编译,然后找到Debug文件,我们需要把编译好的文件放入Unity的工程中;
然后把图中选中的libs,res,AndroidMainfest.xml三个文件导入到unity的Plugins->Android文件下。
接下来是在代码中调用:
  1. AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");  //写法是固定的  
  2.        AndroidJavaObject jObject=jc.GetStatic<AndroidJavaObject>("currentActivity");//获取当前activity对象,代表Android中的MainActivity;  
  3.     int result=jObject.Call<int>("test1",23,43);   //调用android中定义的“test1”方法;  
 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");  //写法是固定的
        AndroidJavaObject jObject=jc.GetStatic<AndroidJavaObject>("currentActivity");//获取当前activity对象,代表Android中的MainActivity;
     int result=jObject.Call<int>("test1",23,43);   //调用android中定义的“test1”方法;
android使用unity中定义的方法:
  1. UnityPlayer.UnitySendMessage("Canvas","Test2","这个参数从Android调用的");  
  2.        //第一个参数“Canvas”是需要接收消息的3D对象物体的名称,第二个参数为方法名,第三个为方法的参数  
 UnityPlayer.UnitySendMessage("Canvas","Test2","这个参数从Android调用的");
        //第一个参数“Canvas”是需要接收消息的3D对象物体的名称,第二个参数为方法名,第三个为方法的参数
该方法在最好在unity调用Android的方法中实现





1.首先找到unity安装文件下的classes.jar文件,我是unity5.2.0,在路径 :\SoftInstall\Unity5_2_0\Unity\Editor\Data\PlaybackEngines\androidplayer\Variations\mono\Release\Classes\classes.jar 拷贝出来

2.创建android studio 工程,方法如下:


3在该工程上上创建Library,我取名unityplugin方法如下:



4该Library引入classes.jar放在该 Library 的 libs下,并引入


5编写插件函数,定义一个简单的函数:


添加代码:

[java]  view plain  copy
  1. package com.netease.unityplugin;  
  2. import android.os.Bundle;  
  3. import com.unity3d.player.UnityPlayerActivity; //引入头文件  
  4. /** 
  5.  * Created by qzyn2320 on 2016/5/15. 
  6.  */  
  7.   
  8. public class UnityPlugin extends  UnityPlayerActivity{ //继承头文件  
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState) { //创建一个Activity  
  11.         super.onCreate(savedInstanceState);  
  12.     }  
  13.   
  14.     public int add(int x, int y)  
  15.     {  
  16.         return  x+y;  
  17.     }  
  18. }  


6打开这个Library下build.gradle文件,添加代码:用于可执行自动生成Jar 包。然后在Terminal中执行 gradlew makeJar 即可在 unityplugin\build\libs 下看到unityplugin.jar


7.编辑unity工程,并在Assets文件夹下创建 Plugins/Android 目录。

8在unityplugin\build\libs下的 unityplugin.jar拷到 Plugins/Android文件夹下,并将unityplugin\src\main\AndroidManifest.xml也拷到Plugins/Android文件夹下面

9编辑Plugins/Android/AndroidManifest.xml,添加Activity

[html]  view plain  copy
  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     package="com.netease.androidplugin"  
  3.     android:versionCode="1"  
  4.     android:versionName="1.0">  
  5.   
  6.     <application  
  7.         android:allowBackup="true"  
  8.         android:label="@string/app_name"  
  9.         android:supportsRtl="true">  
  10.         <activity android:name="com.netease.unityplugin.UnityPlugin"  
  11.                   android:label="@string/app_name">  
  12.             <intent-filter>  
  13.             <action android:name="android.intent.action.MAIN" />  
  14.             <category android:name="android.intent.category.LAUNCHER" />  
  15.             </intent-filter>  
  16.         </activity>  
  17.     </application>  
  18.   
  19. </manifest>  

package 和unity Bundle Id 一致, 而android:name 等于Android 工程 中 unityplugin.jar 中package name+ classname ,如果所示


当然 unity Bundle Id  和 Android 工程 中 unityplugin.jar 中package name一致时,AndroidManifest.xml可以这样写:


10编辑unity 脚本,调用Android插件,代码中添加 

[csharp]  view plain  copy
  1. public void TestAdd()  
  2.    {  
  3.        AndroidJavaClass ja = new AndroidJavaClass("com.unity3d.player.UnityPlayer");  
  4.        AndroidJavaObject jo = ja.GetStatic<AndroidJavaObject>("currentActivity");  
  5.        int result = jo.Call<int>("add",8,7);  
  6.        m_text.text = result.ToString();  
  7.    }  

打包后即可成功 发现result = 15。


现在创建一个静态函数来供unity使用,按照上面的 方法创建一个moudle 命名为 staticplugin(不需要嵌入 classes.jar) ,创建一个文件 StaticPlugin.java,添加内容:

[java]  view plain  copy
  1. package com.netease.staticplugin;  
  2.   
  3. /** 
  4.  * Created by qzyn2320 on 2016/5/15. 
  5.  */  
  6. public class StaticPlugin {  
  7.     public  StaticPlugin()  
  8.     {}  
  9.     public static String DoubleString(String message){  
  10.         return  message + message;  
  11.     }  
  12.   
  13. }  
里面有一个静态函数DoubleString,用build.gradle制作一个 staticplugin.jar,放到unity工程的Plugins/Android下面,现在在c#脚本里面添加 函数调用插件:

[csharp]  view plain  copy
  1. <pre name="code" class="csharp">    public void TestStaticPlugin()  
  2.     {  
  3.         AndroidJavaClass ja = new AndroidJavaClass("com.netease.staticplugin.StaticPlugin");  
  4.           
  5.         string result = ja.CallStatic<string>("DoubleString""TestStaticPlugin");  
  6.         m_text.text = result.ToString();  
  7.     }  

即可得到返回值为 TestStaticPlugin TestStaticPlugin

 
 



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值