1、Unity调iOS的方法
在首页的viewcontroller里面实现方法
void _PressButton3(const char *args)
{
// UnityAppController *unityapp = (UnityAppController *)[UIApplication sharedApplication].delegate;
// [unityapp ShowWindowssubview];
}
在Unity里面 直接调用 _PressButton3(content);
2、iOS与Unity交互,传值
UnitySendMessage("Scripts", [@"Function" UTF8String], [@"Parameters" UTF8String]);
3 . unity调android里面的方法
在初始化UnityPlayer的Activity中添加方法,如下:
/** * 测试Unity调用Android的方法 */ public void testMethod(String param){ System.out.println("参数为:"+param); } 对于提供的方法,不可以进行UI操作,因为Unity3D对于android的UI线程来说,只是个子线程,如果要进行UI操作,可以使用Handler发消息。 .在Unity工程中,利用c#文件来书写,Unity调用的代码: public static void ActivateShareImage(string content) { if (Application.platform == RuntimePlatform.IPhonePlayer) { _PressButton3(content); } else if (Application.platform == RuntimePlatform.Android) { UISystem.Console("test method!"); AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("testMethod", "unity"); } else { } }
4、android与unity交互
UnityPlayer.UnitySendMessage("Scripts", "Function", "Parameters");
对3补充:unity调用Android的时候,上面的方法大都是适用于Android代码加入到unity工程的data/Android目录下,也就是由unity打包apk。
现在小编公司需求,要求Android代码更新比较多,这样若是unity打包就比较麻烦了,故想到解决方法:
Android建一个 unityMainActivity.java的类,打成jar包,里面声明了unity调用Android的方法
public void testMethod(String param){ //System.out.println("参数为:"+param);} //只是声明即可
把jar给unity,放到Android文件下。 unity生成Android project
eclipse打开project,然后建立 YourMainActivity extend unityMainActivity 继承它
然后就可以 overwrite 那些方法,,,,,然后就可操作UI等复杂的产品需求
ps 若是遇到crash的问题,没有报错,可以看看unityMainActivity,去掉 resume ,同事找到的问题所在,应该是生命周期的问题
Unity 调用iOS方法有返回值的情况
在一个viewController声明 UnityGetUserByiOS
const char* UnityGetUserByiOS()//分享{ NSString *ss = @"测试"; NSLog(@"=GetTexPathByUnity==%@",ss); return _MakeStringCopy([ss UTF8String]);// const char *charstr =[ss UTF8String];// return ss;}
char* _MakeStringCopy( const char* string){ if (NULL == string) { return NULL; } char* res = (char*)malloc(strlen(string)+1); strcpy(res, string); return res;}