iOS与Unity交互笔记之参数传递
程序员文章站
2023-11-27 21:11:46
1. 调用方法一
unity调方法传参,有返回值
// unity代码
[dllimport("__internal")]
// 给ios传string...
1. 调用方法一
unity调方法传参,有返回值
// unity代码 [dllimport("__internal")] // 给ios传string参数,有返回值,返回值通过ios的return方法返回给unity private static extern string getipv6(string mhost, string mport)
// ios代码 extern "c" const char * getipv6(const char *mhost, const char *mport) { // strdup(const char *__s1) 复制mhost字符串,通过malloc()进行空间分配 // return strdup(mhost); return makestringcopy(mhost); } char* makestringcopy(const char* string) { if (null == string) { return null; } char* res = (char*)malloc(strlen(string)+1); strcpy(res, string); return res; }
如果unity传参为string类型,不执行strdup()方法而直接使用return方法,导致mhost没有分配内存空间而报错
这里的const char* 会被c#自动转换成string因为在.m文件中使用了内存申请,该段内存自然是处在堆内存中,这样转成string符合c#的内存管理机制,我们不用担心它的释放问题
如果unity传参为int等基础数据类型,可以直接使用return方法
调用dllimport(“”)方法,需要引入命名空间:using system.runtime.interopservices
2. 调用方法二
unity调方法传参,无返回值
// unity代码 // 传数据给ios [dllimport("__internal")] // 给ios传string参数,无返回值,返回值通过ios的unitysendmessage方法返回给unity private static extern void setdate(string date); // 接收ios的数据 public void getdate(string date) { }
// ios代码 extern "c" void setdate(const char *date) { /** 发送数据给unity @param obj 模型名 @param method unity接收ios数据的方法名 @param msg 传给unity的数据 unitysendmessage(const char* obj, const char* method, const char* msg); */ unitysendmessage("publicgameobject", "getdate", date); }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。