iOS与Unity交互笔记之参数传递
1.调用方法一
Unity调方法传参,有返回值
//Unity代码 [DllImport("__Internal")] //给iOS传string参数,有返回值,返回值通过iOS的return方法返回给Unity privatestaticexternstringgetIPv6(stringmHost,stringmPort)
//iOS代码 extern"C"constchar*getIPv6(constchar*mHost,constchar*mPort) { //strdup(constchar*__s1)复制mHost字符串,通过Malloc()进行空间分配 //returnstrdup(mHost); returnmakeStringCopy(mHost); } char*makeStringCopy(constchar*string) { if(NULL==string){ returnNULL; } char*res=(char*)malloc(strlen(string)+1); strcpy(res,string); returnres; }
如果Unity传参为string类型,不执行strdup()方法而直接使用return方法,导致mHost没有分配内存空间而报错
这里的constchar*会被C#自动转换成string因为在.m文件中使用了内存申请,该段内存自然是处在堆内存中,这样转成string符合c#的内存管理机制,我们不用担心它的释放问题
如果Unity传参为int等基础数据类型,可以直接使用return方法
调用DllImport(“”)方法,需要引入命名空间:usingSystem.Runtime.InteropServices
2.调用方法二
Unity调方法传参,无返回值
//Unity代码 //传数据给iOS [DllImport("__Internal")] //给iOS传string参数,无返回值,返回值通过iOS的UnitySendMessage方法返回给Unity privatestaticexternvoidsetDate(stringdate); //接收iOS的数据 publicvoidGetDate(stringdate) { }
//iOS代码 extern"C"voidsetDate(constchar*date) { /** 发送数据给Unity @paramobj模型名 @parammethodUnity接收iOS数据的方法名 @parammsg传给Unity的数据 UnitySendMessage(constchar*obj,constchar*method,constchar*msg); */ UnitySendMessage("PublicGameObject","GetDate",date); }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。