Unity3D-消息机制实现与Android的通信
Posted 却把清梅嗅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D-消息机制实现与Android的通信相关的知识,希望对你有一定的参考价值。
Unity
平台能够提供非常强大的 2D
、3D
特效,相比 OpenGL
而言,使用 Unity
意味着更低的开发成本,更便捷的可视化开发体验。
本文将针对 Unity
和 android
平台之间,如何进行双向通信进行总结。
1. Unity项目搭建
首先创建一个简单的项目,创建一个 Canvas
,并放一个简单的 Text
文字控件:
接下来编写一个简单的脚本,并将脚本绑定到 Canvas
上:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UnityAndroidTest: MonoBehaviour
// 0. 该成员就是 Canvas 内部的 Text 控件.
public Text text1;
void Start()
// 1. 页面初始化时,初始化 Android 通信对象
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
// 2.定义一个int变量
int res = 0;
try
// 3.调用Android平台的 increment 自增方法,该方法会返回一个 int 值
res = jo.Call<int>("increment", 2);
// 4.将返回值更新到 Text 上
text1.text = res.ToString();
catch (Exception e)
text1.text = "error";
void Update()
// 5.这里我们向Android平台暴露一个方法,调用后可以改变Text的颜色
public void ChangeColor()
text1.color = Color.red;
简单概括脚本中的功能,当Unity
第一次渲染时,会主动调用Android
平台的能力,获取一个数字,并展示在上图的Text
中;同时,Android
平台可以调用 ChangeColor()
方法,将文字的颜色,从默认的黑色改成红色。
脚本文件我们命名为 UnityAndroidTest.cs
,将脚本绑定到Canvas
上:
一切就绪,接下来将该项目导出为Android
项目即可。
2. Android消息接收和发送
打开Android
项目,默认会提供 UnityPlayerActivity
用于对 Unity
提供渲染展示,这里我们仅需在该Activity
中追加increment()
方法即可:
public class UnityPlayerActivity extends Activity implements IUnityPlayerLifecycleEvents
// ...
// 省略其它代码
// ...
private int count = 1;
// 1.Unity项目中的 UnityAndroidTest.cs 脚本,会主动唤起该方法
public int increment(int value)
count += value;
// 2.在这个方法中,我们通过发送消息,让 Canvas 执行 ChangeColor 方法
// 将文字从黑色变成红色
UnityPlayer.UnitySendMessage("Canvas", "ChangeColor", "");
// 3.最终,将 int 类型的 count = 3 作为桥接方法的返回值返回
return count;
通过一个小的demo
完成了 Android
平台与 Unity
的通信,应用页面上展示了一个内容为 3
的红色文字控件:
参考资料 & 不足
感谢 呆呆敲代码的小Y 的 这篇文章 ,其针对如何 Unity
项目中使用 Android
平台代码进行了详细解释,给与了我很大的帮助。
略为遗憾的是,该方式是通过 建立Unity项目 - 导出Android项目 - 编写并导出aar - 导入Unity再次编辑 - 再次导出apk 来实现,整体过于繁琐,无法满足在双平台的开发过程中,频繁修改、联调 的需求。
因此本文针对这种方式进行了简单的优化,将流程简化为 Unity
-> Android
的单向开发,但仍然无法解决 平台间增量修改和调试 的问题,下一篇文章中,我们将针对该问题进行进一步讨论。
关于我
Hello,我是 却把清梅嗅 ,如果您觉得文章对您有价值,欢迎 ❤️,也欢迎关注我的 博客 或者 GitHub。
以上是关于Unity3D-消息机制实现与Android的通信的主要内容,如果未能解决你的问题,请参考以下文章