unity与iOS、Android交互

北战南征 提交于 2020-02-11 09:46:01

 

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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!