zoukankan      html  css  js  c++  java
  • unity与iOS、Android交互

    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;
    }
  • 相关阅读:
    死磕itchat源码--core.py
    死磕itchat源码--config.py
    死磕itchat源码--content.py
    死磕itchat源码--__init__.py
    SyntaxError Non-ASCII character 'xe5' in file
    死磕itchat源码--目录结构
    pip是用代理
    `itchat`配置代理
    搭建`wenblogic`执行`install`脚本失败
    sublimeText3的安装及插件的配置使用
  • 原文地址:https://www.cnblogs.com/KingQiangzi/p/4973524.html
Copyright © 2011-2022 走看看