Unity安装文件如何调用Android方法,跨平台调用技巧

unity调用Android中定义的方法


首先在Unity安装目录中找到Unity提供的classes.jar包,

Unity 安装文件 调用android unity调用android方法_jar


然后将他导入到Android创建的项目Lib文件中(在Project目录下找到项目对应的Lib文件夹,直接粘贴进去,不要忘了Add as library)

Unity 安装文件 调用android unity调用android方法_Android_02


然后需要修改MainActivity,让其继承自UnityPlayerActivity;

Unity 安装文件 调用android unity调用android方法_Android_03


在MainActivity类中定义一些需要在unity中调用的公有方法;


完成后对项目进行编译,然后找到Debug文件,我们需要把编译好的文件放入Unity的工程中;

Unity 安装文件 调用android unity调用android方法_jar_04

Unity 安装文件 调用android unity调用android方法_Android_05


然后把图中选中的libs,res,AndroidMainfest.xml三个文件导入到unity的Plugins->Android文件下。


接下来是在代码中调用:

 

    [csharp]      view plain       copy    

   

    print     ?            

  1. AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");  //写法是固定的
  2. "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中定义的方法:


    [csharp]      view plain       copy    

   

    print     ?            

  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 工程,方法如下:

Unity 安装文件 调用android unity调用android方法_Android_06Unity 安装文件 调用android unity调用android方法_android_07Unity 安装文件 调用android unity调用android方法_jar_08Unity 安装文件 调用android unity调用android方法_Android_09Unity 安装文件 调用android unity调用android方法_Android_10

方法如下:

Unity 安装文件 调用android unity调用android方法_jar_11

Unity 安装文件 调用android unity调用android方法_jar_12Unity 安装文件 调用android unity调用android方法_Android_13

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

Unity 安装文件 调用android unity调用android方法_android_14Unity 安装文件 调用android unity调用android方法_jar_15Unity 安装文件 调用android unity调用android方法_Android_16

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


Unity 安装文件 调用android unity调用android方法_Android_17Unity 安装文件 调用android unity调用android方法_jar_18

添加代码:

 

    [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

  Unity 安装文件 调用android unity调用android方法_Android_19

 

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 安装文件 调用android unity调用android方法_android_20

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


Unity 安装文件 调用android unity调用android方法_jar_21

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

 

    [csharp]      view plain      copy    

   

 

  1. public void TestAdd()  
  2.   {  
  3. new AndroidJavaClass("com.unity3d.player.UnityPlayer");  
  4. "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. new AndroidJavaClass("com.netease.staticplugin.StaticPlugin");  
  4.          
  5. string result = ja.CallStatic<string>("DoubleString", "TestStaticPlugin");  
  6.        m_text.text = result.ToString();  
  7.    }  

 

即可得到返回值为  TestStaticPlugin  TestStaticPlugin  

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空