美文网首页工作生活
Unity打简单jar包

Unity打简单jar包

作者: 叫我颜先生 | 来源:发表于2019-07-01 16:43 被阅读0次

    简介

    • Unity与Android交互
    • 不要求Jar包与包名匹配
    • 不必修改AndroidManifest.xml文件

    流程

    AndroidStudio

    1. 创建新项目,项目名包名随意,用不到

    2. 创建新Module,类型AndroidLibrary,此处两个认真填写,会在Unity中用到

      • Library name:aar包导出的名称,放到Unity的Plugins
      • Package name:Unity调用安卓
    3. 在Module下创建新交互核心类,名字认真填写,Unity用到(暂且为Unity2Android)

    4. 编写Unity2Android核心类代码

      这里我们通过Java的反射原理来获取本来导入class.jar类才能引用到的com.unity3d.player.UnityPlayer包下的currentActivity上下文,同理给unity发消息也是反射原理

           package com.jing.unity;
           
           import android.app.Activity;
           import android.widget.Toast;
           
           import java.lang.reflect.InvocationTargetException;
           import java.lang.reflect.Method;
           
           /**
            * Created by Jing on 2018-1-18.
            */
           public class Unity2Android {
           
               /**
                * unity项目启动时的的上下文
                */
               private Activity _unityActivity;
               /**
                * 获取unity项目的上下文
                * @return
                */
               Activity getActivity(){
                   if(null == _unityActivity) {
                       try {
                           Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer");
                           Activity activity = (Activity) classtype.getDeclaredField("currentActivity").get(classtype);
                           _unityActivity = activity;
                       } catch (ClassNotFoundException e) {
           
                       } catch (IllegalAccessException e) {
           
                       } catch (NoSuchFieldException e) {
           
                       }
                   }
                   return _unityActivity;
               }
           
               /**
                * 调用Unity的方法
                * @param gameObjectName    调用的GameObject的名称
                * @param functionName      方法名
                * @param args              参数
                * @return                  调用是否成功
                */
               boolean callUnity(String gameObjectName, String functionName, String args){
                   try {
                       Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer");
                       Method method =classtype.getMethod("UnitySendMessage", String.class,String.class,String.class);
                       method.invoke(classtype,gameObjectName,functionName,args);
                       return true;
                   } catch (ClassNotFoundException e) {
           
                   } catch (NoSuchMethodException e) {
           
                   } catch (IllegalAccessException e) {
           
                   } catch (InvocationTargetException e) {
           
                   }
                   return false;
               }
           
               /**
                * Toast显示unity发送过来的内容
                * @param content           消息的内容
                * @return                  调用是否成功
                */
               public boolean showToast(String content){
                   Toast.makeText(getActivity(),content,Toast.LENGTH_SHORT).show();
                   //这里是主动调用Unity中的方法,该方法之后unity部分会讲到
                   callUnity("Main Camera","FromAndroid", "hello unity i'm android");
                   return true;
               }
           }
      
    5. 需要实现其他的Android代码,可以依此添加,Activity从此处获取即可

    6. Build,需点击Module,再点击上方Build->RebuildProject即可生成对应aar包

    Unity

    1. 导入aar包,放入Assets/Plugins/Android目录下

    2. 编写代码调Android

      /// <summary>
      /// Unity调Android
      /// </summary>
      public void OnBtnClick()
      {
          //通过该API来实例化导入的arr中对应的类
          AndroidJavaObject _ajc = new AndroidJavaObject("com.jing.unity.Unity2Android");
          //通过API来调用原生代码的方法
          bool success = _ajc.Call<bool>("showToast","this is unity");
          if(true == success)
          {
              //请求成功
          }
      }
      
      /// <summary>
      /// Android调Unity
      /// </summary>
      public void FromAndroid(string content)
      {
          text.text = content;
      }
      

    备注

    如果要对接第三方库,可以在moudle下对接,并打包aar给Unity使用。切记jar需要放到aar的libs下引用,才可以在打包的时候一并导出。通过gradle的网络下载编译方式是不会被打包到aar中的。gradle网络下载的文件的jar可以自行百度查看如何找到

    参考

    https://www.jianshu.com/p/86b275da600e

    相关文章

      网友评论

        本文标题:Unity打简单jar包

        本文链接:https://www.haomeiwen.com/subject/mcggcctx.html