Unity注册Java的回调
一、Unity注册监听Java的回调
1.Java端声明接口类
package com.unity3d.player;
public interface UnityListenerCallback {
void onReceiveScreenData(int num);
}
2.在Java工程的UnityPlayerActivity中声明注册函数
UnityListenerCallback unityCallback = null;
public void RegisterCallback(UnityListenerCallback callback)
{
unityCallback = callback;
// 测试一下,注册完毕后向Unity发送数据
SendScreenDataToUnity(12);
}
// 测试函数,仅供参考
void SendScreenDataToUnity(int data)
{
if (unityCallback != null)
{
unityCallback.onReceiveScreenData(data);
}
}
在上面的脚本中声明了一个测试的函数,仅供参考。
3.在Unity声明对应的接口类
using UnityEngine;
public class UnityListenerCallback : AndroidJavaProxy {
/// <summary>
/// 构造函数base后面填写的是Java端对应的回调接口类
/// </summary>
public UnityListenerCallback () : base ("com.unity3d.player.UnityListenerCallback") {
}
/// <summary>
/// 对应的接口函数
/// </summary>
/// <param name="data">Java端传过来的数据</param>
void onReceiveScreenData (int data) {
Debug.Log ("onReceiveScreenData data:" + data);
}
}
4.在Unity注册回调
void RegisterCallback () {
#if UNITY_ANDROID
AndroidJavaClass playerClass = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
AndroidJavaObject ja = playerClass.GetStatic<AndroidJavaObject> ("currentActivity");
UnityListenerCallback callback = new UnityListenerCallback ();
ja.Call ("RegisterCallback", callback);
#endif
}
二、使用UnitySendMessage
1.在Java工程的UnityPlayerActivity中声明回调函数需要的GameObject和方法名
private String mGameObject;
private String mMethodName;
/**
* 设置Unity回调
*
* @return
*/
public void setCallback(String gameObject, String methodName)
{
this.mGameObject = gameObject;
this.mMethodName = methodName;
}
2.在Java工程的UnityPlayerActivity中发送消息
UnityPlayer.UnitySendMessage(this.mGameObject, this.mMethodName, "JsonData"));
总结
这两种方式都可以使用,如果需要通讯较为频繁,建议使用第一种方法;否则,两个方法都可以使用。