unity Android 交互

制作 unity jar (android和unity 交互)
一 在 Android studio 里面新建一个项目
. new 一个 module ,选择 lib (注意创建的包名 例如 com.unity,text 要和 unity 导出apk 的包名一样)






//如果项目中需要用到第三方的jar 的时候 在lib文件夹下添加--- 因为要提供给unity使用 所以要添加 classes.jar 这个jar 在unity 项目中



二.准备就绪准备写代码了
1.新建一个Activity 让它继承 unityPlayerActivity(也就是 classes.jar中的提供的)

2.如果只是调用 java 的代码 方法,没有涉及到界面控件的就不需要添加layout布局

3. 就是需要Android实现的需求 了, 我这里是写了一个 判断 麦克风是否被占用的代码,这个方法是有返回值的.
方法必须是 public 不是必须带返回值

4.最后就是导出为 jar
在 build. gradle 文件里添加一下代码

5.最后在terminal 里输入命令 gradlew exportJar 点击回车键
出现sucess 说明成功了




6. 在项目的bulid 文件夹下面的aar 文件就是你需要的文件 用压缩软件打开 aar文件 里面的classes.jar 就是所需要的,
这里的classes.jar和刚开始你添加到项目的的jar 不是同一个,这个jar 是你自己写的代码所生成的,

7.修改AndroidManifest.xml 文件 按照图片修改



8.最后 在unity 中调用 将 写好的jar 和AndroidManifest.xml 放入到unity项目中 Android 文件夹下
如果jar 中用到第三方的jar需要添加 lib 文件夹 将用的jar 放入, res 文件是需要用到的资源文件,如果没有用到 不需要添加

9. 创建脚本调用 android中的方法 如果Android 中方法 有参数 可以直接在后面添加
如果有返回参数 添加<string> 将脚本绑到物体上, 然后调佣就就可以了



### 如何在 Unity 中实现与 Android交互 #### 使用 UnityAndroid 接口进行交互Unity3D 开发中,可以通过 Unity 提供的 `AndroidJavaObject` 和 `AndroidJavaClass` 类来访问 Android 原生 API。这使得开发者可以在 Unity 中调用 Android 的功能模块,例如显示 Toast 消息、启动 Activity 或者操作其他 Android 组件。 以下是通过 Unity 调用 Android Toast 消息的一个简单示例: ```csharp using UnityEngine; public class AndroidInteraction : MonoBehaviour { public void ShowToast(string message) { if (Application.platform == RuntimePlatform.Android) { using (var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { var currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => { var toastClass = new AndroidJavaClass("android.widget.Toast"); var toastObject = toastClass.CallStatic<AndroidJavaObject>( "makeText", currentActivity, message, toastClass.GetStatic<int>("LENGTH_SHORT") ); toastObject.Call("show"); })); } } } } ``` 此代码片段展示了如何利用 Unity 的 `AndroidJavaObject` 来获取当前活动 (`currentActivity`) 并在其线程上调用 Android 的 `Toast` 方法[^1]。 --- #### 启动 Android 自定义 Activity 除了简单的消息提示外,还可以通过 Unity 启动自定义的 Android Activity。这种情况下通常需要创建一个带有特定入口点的 Android 应用程序,并将其打包到 APK 文件中以便于集成。 以下是如何从 Unity 启动 Android Activity 的方法: 1. **准备 Android 工程** 在 Android Studio 中构建一个新的项目并导出其 AAR 文件或直接编译成 APK。 2. **配置 Unity 项目** 将生成的文件导入至 Unity Assets/Plugins/Android 下面作为依赖库加载。 3. **编写脚本以触发 Activity 加载** ```csharp using UnityEngine; using System.Collections; public class LaunchAndroidActivity : MonoBehaviour { private const string ACTIVITY_CLASS_NAME = "com.example.MyCustomActivity"; IEnumerator Start() { if (Application.platform != RuntimePlatform.Android) yield break; try { using (var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { var activityContext = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); using (var intent = new AndroidJavaObject("android.content.Intent")) { intent.Call<AndroidJavaObject>("setClassName", activityContext.Call<string>("getPackageName"), ACTIVITY_CLASS_NAME); activityContext.Call("startActivity", intent); } } } catch (System.Exception e) { Debug.LogError($"Failed to start custom Android activity: {e.Message}"); } } } ``` 这段代码演示了如何动态构造 Intent 对象并通过它激活指定名称的目标 Activity[^2]。 --- #### 更复杂的交互方式——双向通信 对于更复杂的应用需求来说,可能还需要支持数据交换以及事件回调等功能。此时可以考虑采用 JNI(Java Native Interface)技术或者借助插件工具简化流程。具体做法如下所示: - 定义接口类用于接收来自 C# 层的消息; - 实现该接口并将实例传递给 Java 部分处理逻辑; - 当有响应返回时再通知回 Unity 端更新界面状态或其他动作。 更多细节可参阅官方文档说明[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值