返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 1602|回复: 0

[转载] 【转载】Unity 2019与安卓交互前置环境

[复制链接]
发表于 2023-11-27 11:39:20 | 显示全部楼层 |阅读模式
Unity 2019与安卓交互前置环境


引言
在Unity的项目开发过程中,总会遇到Unity提供的方法不足以支撑安卓平台的开发,这时候我们就需要引用安卓平台本身的一些方法或者SDK来帮助我们继续开发,那么Unity和安卓原生时怎么进行交互的呢,在这里我们做一下简单的极少。

工具
Unity:2019.4.31f1c1
Android Studio:2020.3.1
生成jar包
此过程主要在Android Studio中完成。

创建工程
1、创建一个Empty Activity,点击Next





2、根据自己需要设置对应的项目名称和最小SDK版本,项目名称不需要和Unity包名一样,最小SDK版本需要和Unity中设置的一样。




unity中设置最小SDK




安卓AS工程设置
1、删除两个无用的工程





2、修改build.gradle
plugins下的id改为com.android.library
删除defaultConfig下的applicationId



3、点击sync now



4、加入Unity classes.jar

jar来源:unity工具安装目录下的\Editor\Data\PlaybackEngines\AndroidPlayer\Variations,此文件夹中有il2cpp和mono两个文件夹,根据unity的编译选择对应的文件夹下的\Release\Classes\下的classes.jar

例如:C:\Program Files\Unity\Hub\Editor\2019.4.31f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

unity编译方式




将jar包复制到android studio工程的libs文件夹下,并且添加为库(Add As Library)。



5、这个版本的classes.jar中不包含UnityPlayerActivity.java类,需要自己手动添加。

C:\Program Files\Unity\Hub\Editor\2019.4.31f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Source

找到对应路径下的com文件夹,复制到java文件夹下。




6、修改MainActivity类,使其继承UnityPlayerActivity。




package com.aitu.unityandroidutils;

import androidx.appcompat.app.AppCompatActivity;
import com.unity3d.player.UnityPlayerActivity;
import android.os.Bundle;

public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
    }

    /**
     * 测试
     * @return
     */
    public int test(){
        return 666;
    }
}



7、修改AndroidManifest.xml文件,如下所示。



最终文件:

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

    <application>
        <activity
            android:name="com.aitu.unityandroidutils.MainActivity"
            android:exported="true">
            <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>



8、生成jar包
选择菜单栏Build-Make Module,进行build。





生成完成之后,找到对应的jar包。jar包在build/intermediates/aar_main_jar/debug下。



使用解压软件,删除com.unity3d.player包,将jar包和Androidmanifest.xml文件导入到Unity项目中。
Unity调用
在Unity中调用test方法。


/// <summary>
/// 测试
/// </summary>
/// <returns></returns>
private int Test()
{
    using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
    {
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        int value = jo.Call<int>("isWiredHeadsetOn");
        return value;
    }
}



AndroidJavaObject
AndroidJavaObject是java.lang.Object通用实例的Unity表示。

它可以用作任何Java类实例的无类型接口。

官方文档:Unity - Scripting API: AndroidJavaObject (unity3d.com)





AndroidJavaClass
AndroidJavaClass是java.lang.Class的通用实例的Unity表示。
继承自AndroidJavaObject
官方文档:Unity - Scripting API: AndroidJavaClass (unity3d.com)




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表