您的位置:首页 > 移动开发 > Unity3D

Android Unity3d 通信总结

2017-04-13 23:32 246 查看
Unity3d与Android交叉开发主要有两种方式,一是Unity3d导出Android工程,二是Android生成jar包,导入到unity3d plugin/bin/目录下,本篇分析第二种方式

Unity3d采用反射的方式调用Android jar包里面的方法

void Start(){
#if !UNITY_EDITOR
unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
connectionClient = new AndroidJavaObject("com.test.connection.ConnectionClient", currentActivity);
connectionClientClass = new AndroidJavaClass("com.test.connection.ConnectionClient");
#endif
}
反射生成ConnectionClient对象。

public ConnectionClient(Activity activity){

init(activity);
}Java类的构造方法

public void CallPublicMethod(){
Debug.Log("CallPublicMethod");
connectionClient.Call("publicMethod");

}
public void CallStaticMethod(){
Debug.Log("CallStaticMethod");
connectionClientClass.CallStatic("staticMethod");
}
通过connectionClient对象就可以调用ConnectionClient的公共方法,静态方法

public bool CallMethod(){

Debug.Log("CallMethod");
bool result = connectionClient.Call<bool>("publicMethodReturnBoolean");
Debug.Log("CallMethod result:"+result);
return result;
}
利用泛型调用有返回值的方法,基本类型和string都可以,C#的object和Java object不能互通。

public void CallMethod(){

CallMethodWithArgs ("a", "b", "c");//第一种可变长度参数方式
//connectionClient.Call ("method", "a", "b", "c");//第二种直接调用
}
private void CallMethodWithArgs(params string[] args){
connectionClient.Call ("method", args);
}


若是要传递多个参数,可以采用以上两种方式

void ReceiveMethod(string msg){
print("Receive from Android");
Debug.Log (""+msg);
}

Unity3d Receiver通过设置一个方法Receive专门处理Android 发送消息,也能起到简单的通信

public static void noticeUnity(String message) {
UnityPlayer.UnitySendMessage("Receiver", "RecevieMethod", message);
}

Android端通过UnityPlayer.UnitySendMessage("Receiver", "ReceiveMethod",message);向Uniry传递消息。

Unity3d导出工程供Android调用参考这篇文章

http://blog.csdn.net/crazy1235/article/details/46733221

http://blog.csdn.net/acnt3w/article/details/52817071
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: