在 Unity 项目中,游戏调用平台原生的功能是很常见的。Unity 提供了几个类和方法来负责 C# 脚本和 Android Java 代码之间的交互。iOS 平台参考Unity 游戏调用 iOS 方法。
C# 调用 Android Java 代码
Unity 中用AndroidJavaObject
类来表现 Java 中 java.lang.Object
类的实例,内部封装了对类静态或实例方法的调用,并做了适当的缓存以提高速度。和 AndroidJavaClass
一起使用。
C# 代码:
1 | using (AndroidJavaClass ajc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) // 获取 com.unity3d.player.UnityPlayer 类 |
Java 中将 MainActivity
设置为 com.unity3d.player.UnityPlayerActivity
的子类,并实现对应的方法:
1 | public class MainActivity extends com.unity3d.player.UnityPlayerActivity { |
Java 代码回调 Unity
使用 com.unity3d.player.UnityPlayer.UnitySendMessage
方法来向 Unity 发送消息。
Java 代码:
1 | String gameObjectName = "AndroidTestCallback"; // 游戏对象的名称 |
Unity 中创建一个游戏对象(GameObject)名为 AndroidTestCallback
,上面挂载了 AndroidTestCallback.cs
脚本,如图:
AndroidTestCallback.cs
脚本中实现 OnAndroidCallback
方法,方法签名必须是 void methodName(string msg)
:
1 | public class AndroidTestCallback : MonoBehaviour |
回调是异步的,在下一帧中执行。
参考链接
- JAR plug-ins, docs.unity3d.com.
- JAR 插件,docs.unity3d.com。