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
{
public Text text1;
void Start()
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
int res = 0;
try
{
res = jo.Call<int>("increment", 2);
text1.text = res.ToString();
}
catch (Exception e)
{
text1.text = "error";
}
}
void Update()
{
}
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;
public int increment(int value) {
count += value;
UnityPlayer.UnitySendMessage("Canvas", "ChangeColor", "");
return count;
}
}
通过一个小的demo 完成了 Android 平台与 Unity 的通信,应用页面上展示了一个内容为 3 的红色文字控件:
参考资料 & 不足
感谢 呆呆敲代码的小Y 的 这篇文章 ,其针对如何 Unity 项目中使用 Android 平台代码进行了详细解释,给与了我很大的帮助。
略为遗憾的是,该方式是通过 建立Unity项目 - 导出Android项目 - 编写并导出aar - 导入Unity再次编辑 - 再次导出apk 来实现,整体过于繁琐,无法满足在双平台的开发过程中,频繁修改、联调 的需求。
因此本文针对这种方式进行了简单的优化,将流程简化为 Unity -> Android 的单向开发,但仍然无法解决 平台间增量修改和调试 的问题,下一篇文章中,我们将针对该问题进行进一步讨论。
关于我
Hello,我是 却把清梅嗅 ,如果您觉得文章对您有价值,欢迎 ??,也欢迎关注我的 博客 或者 GitHub。
|