当前位置 : 主页 > 网页制作 > Nodejs >

Unity调用WebService的方法,支持IL2CPP

来源:互联网 收集:自由互联 发布时间:2021-06-24
关于这个话题,网上也是有不少了,不过只从iOS需要IL2CPP后,那些方法基本上都没用了,因为C#原本的办法是通过生成代理类来进行访问,那个代理类都是使用C#反射,自然没法用,如果


关于这个话题,网上也是有不少了,不过只从iOS需要IL2CPP后,那些方法基本上都没用了,因为C#原本的办法是通过生成代理类来进行访问,那个代理类都是使用C#反射,自然没法用,如果知道原理的话其实都很容易自己去实现,不过哪有那么多时间去学习那个玩意的原理,省下来的时间购泡几个妹纸了


正题开始

使用 http://easywsdl.com/WsdlGenerator 这个玩意就可以很容易生成各个客户端需要的代码,目前来说我们只需要安卓和iOS就够了。需要 翻-墙 才能进去,我是用的Goggle账号登录的,总之我生成的是iOS的,生成的是OC语言,其实OC很容易和Unity交互


static char resultStr[1024];


extern "C" {

    const char* LoginWeb(const char* s_user,

                         const char* s_pw);

}


const char* LoginWeb(const char* s_user,

              const char* s_pw){


    memset(resultStr, 0, sizeof(resultStr));

    NSString* user=[NSString stringWithUTF8String:s_user];

    NSString* pw=[NSString stringWithUTF8String:s_pw];



    NSString* url=@"http://你的地址WS/WSAccount.asmx";


    

    NSError* error=nil;

    MHKWSAccountSoap12* service = [[MHKWSAccountSoap12 alloc] initWithUrl: url ];

    NSString* res = [service Login:user userPass:pw  __error: &error];

    NSLog(@"LoginWeb user:%@", user);

    if(error!=nil)

    {

        //error occured

        NSLog(@"LoginWeb error:%@",error);

    }else{

        if(res!=nil){

            const char* s = [res UTF8String];

            strcpy(resultStr, s);

        }

    }

    return resultStr;

}


Unity里使用

        [DllImport(“__Internal, CharSet = CharSet.Auto)]
        public static extern IntPtr LoginWeb(string s_user, string s_pw);

具体的函数是根据你的服务来生成,生成的包里面也有文档,很方便,安卓也是同理,而且生成的包里就有jar包,可以直接使用


以上代码可能会有内存泄漏,因为我不是很懂OC代码

网友评论