一:Unity3d 与 Android之间的互相调用
1.Unity3d调用Android
1.首先在Android层写好接口u3dCall,这个方法只打印成功的提示:
public void unityCall() {
Log.i("TAG", "unityCall Android Successful");
}
2. 在Unity3d cs脚本中通过反射机制拿取对象并调用Android的接口u3dCall
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("unityCall");
3. Unity3d调用Android接口的api
方法名 方法类型 说明
Call 实例 调用实例方法
Get 实例 获取实例变量(非静态)
Set 实例 设置实例变量(非静态)
CallStatic 静态 调用静态方法
GetStatic 静态 获取静态变量
SetStatic 静态 设置静态变量
如果Android的方法是需要传入参数的,则如下:
Android:
public void unityCallWithArgs(String str, int i) {
Log.i("TAG", "unityCall Android Str|int is " + str + "|" + i);
}
U3d:
jo.Call("unityCallWithArgs","Atany",100);
如果需要返回值:
Android:
public String unityCallReturn() {
return "This is the return Value of Android";
}
U3d:
msg = jo.Call<string>("unityCallReturn");
print ("U3d msg is "+msg);
2.Android调用Unity
如果想要异步的发送消息回Unity那么应该怎么处理呢?就是使用Unity3d的UnitySendMessage发送回去。UnityPlayer.UnitySendMessage() 参数1表示发送游戏对象的名称,参数2表示对象绑定的脚本接收该消息的方法,参数3表示本条消息发送的字符串信息。
Android:
public void U3d() {
UnityPlayer.UnitySendMessage("SDKManager","OnMsgProxy", "exit");
}
U3d:
void OnMsgProxy(string str){
print ("OnMsgProxy string is "+str);
}
二:Unity3d 与 iOS之间的互相调用
1.Unity3d调用iOS
1.首先在U3D中写个方法:
[DllImport("__Internal")]
private static extern void SendToSDKProxyFzl(string key);
2.在oc中方法
#if defined(__cplusplus)
extern "C"{
#endif
//oc中方法写在这里
void _iOS_SendToSDKProxyFzl(const char* strMsg) {
}
#if defined(__cplusplus)
}
#endif
2.iOS调用Unity
//OC代码
-(void)OcToUnitySendMessage:(NSString*)message{
UnitySendMessage("SDKManager","OnMsgProxy",[message UTF8String]);
}
//untiy
void OnMsgProxy (string str){
print ("andToU3dCallback string is "+str);
}