欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-14 11:30:09
说明和优点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
Unity2018、2019和安卓通信,基于AAR包优化
3、修改build.grade
Unity2018、2019和安卓通信,基于AAR包优化
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、放置文件
Unity2018、2019和安卓通信,基于AAR包优化
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

相关标签: Game unity3d