iOS與Unity交互筆記之參數傳遞
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類型,不執(zhí)行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)
{
/**
發(fā)送數據給Unity
@param obj 模型名
@param method Unity接收iOS數據的方法名
@param msg 傳給Unity的數據
UnitySendMessage(const char* obj, const char* method, const char* msg);
*/
UnitySendMessage("PublicGameObject", "GetDate", date);
}
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關文章
iOS漸變圓環(huán)旋轉動畫CAShapeLayer CAGradientLayer
這篇文章主要介紹了iOS漸變圓環(huán)旋轉動畫CAShapeLayer CAGradientLayer的相關資料,需要的朋友可以參考下2016-09-09

