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; }