国内网站开发不用wordpress,个性化的个人网站简易,土木工程网官网,asp 大型网站开发这是一篇2021年的存档#xff0c;使用Unity2020版本。 至今#xff0c;Unity与AS很多通讯方式也是基于此衍生。 作为Unity与AS联合开发的受益者#xff0c;难得掏出自己的饭碗#xff0c;诸君共享#xff01; Unity Android Studio 联合开发快速入门
——Unity与AS… 这是一篇2021年的存档使用Unity2020版本。 至今Unity与AS很多通讯方式也是基于此衍生。 作为Unity与AS联合开发的受益者难得掏出自己的饭碗诸君共享 Unity Android Studio 联合开发快速入门
——Unity与AS之间的互相调用实战指南
在移动开发中Unity 常常用于快速构建跨平台的 3D/2D 应用而 Android StudioAS则是调用 Android 原生功能的利器。为了结合二者的优势我们需要掌握 Unity 与 AS 的互相调用方式。本文将从环境配置开始逐步讲解 Unity 调用 Android 方法、AS 调用 Unity 方法以及实际的通信示例。 文章目录Unity Android Studio 联合开发快速入门一、Unity 环境配置1. 开发模块2. 开发平台3. 环境配置二、Visual Studio 配置方式1Unity Hub 中勾选方式2手动配置 Visual Studio先决条件安装 Visual Studio Tools for Unity检查更新配置 Unity 使用 VS三、Unity 调用 AS 导出的 aar1. AS 导出 aar2. Unity 导入 aar3. 编写脚本与绑定4. 调试与运行5. 运行结果四、AS 调用 Unity 导出的工程1. 示例脚本2. 导出 Android 工程3. 调用方式4. 常见问题五、Unity 与 AS 互相调用1. Unity 调用 AS方式1继承 UnityPlayerActivity方式2调用静态方法方式3调用非静态方法 / 单例模式2.AS 调用 Unity方式1UnitySendMessage方式2使用 AndroidJavaProxy 实现回调通信3. Unity 调用 Android Toast 示例Unity 直接调用 Android APIUnity 调用 AS 中的 Toast总结一、Unity 环境配置
1. 开发模块
打开 Unity Hub → 安装 Unity 版本 → 添加模块时勾选 Android Build Support。
2. 开发平台
在 Unity 编辑器中切换到 Android 平台 File → Build Settings → Android → Switch Platform。
3. 环境配置
进入 Edit → Preferences → External Tools确认 JDK、SDK、NDK 路径正确。 注意 Unity 版本兼容性例如 Unity 2020 LTS 仅支持
JDK 1.8NDK 19.0.523213 二、Visual Studio 配置
方式1Unity Hub 中勾选
安装 Unity 时直接选择 Visual Studio 组件。
方式2手动配置 Visual Studio
先决条件
确保已通过 Unity Hub 安装 Unity。
安装 Visual Studio Tools for Unity
打开 Visual Studio Installer。选择安装或修改现有版本。在 工作负载 中勾选 使用 Unity 的游戏开发。
检查更新
帮助 → 检查更新保持 VS 最新确保 bug 修复与 Unity 支持。
配置 Unity 使用 VS
Unity → Edit Preferences External Tools。在 External Script Editor 中选择 VS。如未列出可手动选择 devenv.exe。勾选 Editor Attaching保证调试可用。 三、Unity 调用 AS 导出的 aar
1. AS 导出 aar 在 AS 中编写 Java 方法。 执行 Gradle 构建clean → assemble。 aar 生成路径build/outputs/aar/。
2. Unity 导入 aar
将 aar 文件放入 Assets/Plugins/Android/ 目录下即可直接在 C# 中访问。
3. 编写脚本与绑定
在 Unity C# 脚本中调用 aar 方法。 将脚本挂载到场景对象如 Main Camera。
4. 调试与运行 使用 Attach to Unity 调试。 注意PC 模拟时返回值可能与 Android 不同如布尔值。 * 构建 APK在手机开启开发者模式后运行测试。 5. 运行结果
场景启动时调用 aar 方法例如调用 showToast() 在手机端显示 Toast。 四、AS 调用 Unity 导出的工程
1. 示例脚本
在 Unity 中编写 C# 脚本供 Android 调用。
2. 导出 Android 工程
Unity → Build Settings → Export Project。 导出的文件目录如下
3. 调用方式
AS 直接导入用 AS 打开导出的工程直接运行。 作为依赖模块导入仅导入 unityLibrary 模块集成到现有 AS 工程。 修改安卓清单和gradle配置 该模块主要有一个UnityPlayerActivity这是Unity官方提供的它默认是全屏加载Unity工程导出的场景注意这是个示例因此可以自定义修改它。 4. 常见问题 找不到 so检查 gradle 是否配置 abiFilters。 由于习惯了如此引用因此将内容修改如下图 找不到 aar检查 dependencies 配置确认项目级 gradle 是否包含仓库地址。 检查gradle文件中dependencies 检查工程的gradle不是模块的gradle是否有如下配置最新的AS创建的工程创建后没有如下内容 模块的gradle中添加如下内容 五、Unity 与 AS 互相调用
1. Unity 调用 AS
方式1继承 UnityPlayerActivity
Android 端继承 UnityPlayerActivityUnity 通过 AndroidJavaObject 调用。 unity代码
AndroidJavaClass jc new AndroidJavaClass (com.unity3d.player.UnityPlayer);
AndroidJavaObject jo jc.GetStaticAndroidJavaObject (currentActivity);
jo.Call (login,这里是传过去的参数);Android代码
package com.example.test;public class MainActivity extends UnityPlayerActivity {public void login( String str )
{ }方式2调用静态方法
Unity 端
AndroidJavaClass jc new AndroidJavaClass(com.example.test.Test);
jc.CallStatic(login, 参数);Android 端
public class Test {public static void login(String str) { ... }
}方式3调用非静态方法 / 单例模式
Unity 通过 AndroidJavaObject 调用实例方法或先调用静态方法获取单例再调用非静态方法。
unity代码 AndroidJavaObject jo new AndroidJavaObject(com.example.test.Test);
jo.Call(login,);
Android代码
package com.example.test;public class Test{public void login( String str ) { }2.AS 调用 Unity
把消息发送给Unity场景中指定物体上的指定方法 UnityPlayer.UnitySendMessage(“物体名称”, “方法名称”, 参数); 实例
方式1UnitySendMessage
UnityPlayer.UnitySendMessage(GameObjectName, MethodName, 参数);方式2使用 AndroidJavaProxy 实现回调通信
与 UnitySendMessage 通过字符串传递消息不同AndroidJavaProxy 提供了一种更稳定、更结构化的通信方式。它允许 Unity 实现 Android 端定义的接口并将接口实现作为回调传递给 AS从而实现双向通信适合复杂场景。
步骤如下
1. 在 AS 端定义接口 先在 Android 工程中编写一个接口接口方法将作为回调被 Unity 实现。
package com.example.test;public interface UnityasrEventCallback {void Speechcontent(int a);void Test1(String msg);
}2. 在 Unity 端实现该接口 在 Unity 中创建一个 C# 脚本定义一个类继承 AndroidJavaProxy并在构造方法中指定 AS 端接口的“包名接口名”。然后实现接口中定义的方法。
public class AsrEventCallback : AndroidJavaProxy
{// 构造方法中传入 AS 端接口的完整类名public AsrEventCallback() : base(com.example.test.UnityasrEventCallback) { }// 实现接口中的方法public void Speechcontent(int content){int a content;Debug.Log(收到来自AS的整型回调: a);}public void Test1(string msg){string b msg;Debug.Log(收到来自AS的字符串回调: b);}
}3. 在 Unity 中注册回调 在合适的生命周期方法如 Start()中将 AndroidJavaProxy 实例传递给 AS 的方法如 setCallback。
void Start()
{AndroidJavaClass jc new AndroidJavaClass(com.unity3d.player.UnityPlayer);AndroidJavaObject jo jc.GetStaticAndroidJavaObject(currentActivity);// 创建代理实例AsrEventCallback asrEventCallback new AsrEventCallback();// 将代理传递给 ASjo.Call(setCallback, asrEventCallback);
}这样AS 端只要调用 mCallback.Test1(xxx) 或 mCallback.Speechcontent(123)就能触发 Unity 端的对应方法实现回调通信。 3. Unity 调用 Android Toast 示例
Unity 直接调用 Android API
AndroidJavaClass jc new AndroidJavaClass(com.unity3d.player.UnityPlayer);
AndroidJavaObject jo jc.GetStaticAndroidJavaObject(currentActivity);
AndroidJavaClass toast new AndroidJavaClass(android.widget.Toast);
AndroidJavaObject context jo.CallAndroidJavaObject(getApplicationContext);jo.Call(runOnUiThread, new AndroidJavaRunnable(() {toast.CallStaticAndroidJavaObject(makeText, context, Hello from Unity, toast.GetStaticint(LENGTH_SHORT)).Call(show);
}));Unity 调用 AS 中的 Toast
Unity 调用
jo.Call(testToast, 吐司);AS 端
public void testToast(final String msg) {runOnUiThread(() - Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show());
}总结
本文完整介绍了 Unity 与 Android Studio 互相调用的实现方式
Unity 环境与 VS 配置Unity 调用 AS aarAS 调用 Unity 工程双向通信方案UnityPlayerActivity、静态方法、UnitySendMessage、AndroidJavaProxy实际示例Toast 调用
通过这些方法开发者可以在 Unity 中调用 Android 原生能力同时让 Android 端灵活调用 Unity 的逻辑实现高效的跨平台应用开发。