返回首页
DA系统
C#IDE
文件同步服务
屏保
今天是: 2026-05-05 "立夏" 夏季的第一个节气,表示盛夏时节的正式开始
收藏
任务
排行
道具
勋章
站长QQ
QQ:979119776
如您使用论坛过程中发现任何问题
请点击下方添加站长QQ
联系站长
休闲区
BBS
技术区
C#IDE
文件同步服务
喝茶淡饭
音乐区
视频区
Linux技术交流
Unity 3D、C#技术交流
Windows技术交流
论坛BUG专区
玩家杂谈
BUG专区
建议专区
搜索
搜索
热搜:
linux
技术
Hi~
登录
或
注册
本版
帖子
用户
DA 论坛
»
休闲区
›
技术区
›
Unity 3D、C#技术交流
›
【转载】Unity 2019与安卓交互前置环境
返回列表
发新帖
查看:
1602
|
回复:
0
[转载]
【转载】Unity 2019与安卓交互前置环境
[复制链接]
da11
da11
当前离线
积分
68575
发表于 2023-11-27 11:39:20
|
显示全部楼层
|
阅读模式
Unity 2019与安卓交互前置环境
转载地址:
https://blog.csdn.net/yr1102358773/article/details/128287330
引言
在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
回复
使用道具
举报
置顶卡
沉默卡
变色卡
返回列表
发新帖
游客
回复
*
滑块验证:
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册成为修仙之旅的少年~
发表回复
浏览过的版块
Linux技术交流
快速回复
返回顶部
返回列表