当前位置: 移动技术网 > IT编程>开发语言>Java > Unity2018、2019和安卓通信,基于AAR包优化

Unity2018、2019和安卓通信,基于AAR包优化

2020年08月14日  | 移动技术网IT编程  | 我要评论
说明和优点Unity高版本以后,把UnityPlayActivity.java从jar包分离了出来;Unity集成了安卓打包的全部环境,包括SDK、OpenJava,默认会下载一个最新的Platform编译平台classes.jar包和UnityPlayActivity.java文件位置\Unity\Hub\Editor\2019.4.6f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\Uni

说明和优点

Unity高版本以后,把UnityPlayActivity.java从jar包分离了出来;
Unity集成了安卓打包的全部环境,包括SDK、OpenJava,默认会下载一个最新的Platform编译平台

classes.jar包和UnityPlayActivity.java文件位置

\Unity\Hub\Editor\2019.4.6f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
\Unity\Hub\Editor\2019.4.6f1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player

优点
1、项目的包名不需要和安卓的包名一致
2、不需要处理classes.jar文件
3、使用起来方便

搭建安卓项目

1、创建一个空的AS项目
2、在项目里面创建一个Module
在这里插入图片描述
3、修改build.grade
在这里插入图片描述
4、复制资源到Module里面

复制\Unity\Hub\Editor\2019.4.6f1\Editor\Data\PlaybackEngines\AndroidPlayer\Apk\res覆盖到项目里面的res目录

5、修改Manifest文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.newgamestudio.unitydemolib">

    <application>
        <activity
            android:name="com.newgamestudio.unitydemolib.DemoActivity"
            android:theme="@style/UnityThemeSelector">
            <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和unity通信代码

public class AndroidUnityDemo {
    /**
     * 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;
    }
}

7、打包AAR文件,复制AAR和mianfest文件到Unity的Plugins/Android下面

搭建Unity项目

1、放置文件
在这里插入图片描述
2、编写测试代码

public class UnityAndroidDemo1 : MonoBehaviour
{
    public Text m_TxtAndroid;
    private AndroidJavaObject mJavaObj;

    private void Start()
    {
        mJavaObj = new AndroidJavaObject("com.newgamestudio.unitydemolib.AndroidUnityDemo");
    }

    public void OnClick()
    {
        bool success = mJavaObj.Call<bool>("showToast", "Unity Call.");
        Debug.Log(success);
    }

    public void FromAndroid(string content)
    {
        m_TxtAndroid.text = content;
    }
}

3、真机测试


安卓项目和Unity源码下载:
https://download.csdn.net/download/inspironx/12704690

本文地址:https://blog.csdn.net/inspironx/article/details/107934348

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网