原地址:http://bbs.18183.com/thread-456979-1-1.html
本帖最后由 啊,將進酒 于 2014-2-27 11:17 編輯
“授人以魚,不如授人以漁”,以UNITY3D調用iOS版的91SDK為例,利用C# / C / OBJ-C?交互原理,本文將詳細介紹UNITY3D與iOS之間交互的解決方案。
?
首先,打開XCODE新建一個空項目,參照91SDK開發文檔將91SDK引入并進行環境配置。
配置完畢后創建一個名為“LsSdkConector”的OBJ-C CLASS文件。完畢后,當前項目應如圖:
<ignore_js_op>

?
LsSdkConector.h文件我們不用去改動它。保持原樣即可。
<ignore_js_op>

?
接下來我們開始在LsSdkConector.m 文件中制作C接口 和 調用91SDK的iOS方法。
引入必要的頭文件后,我把該文件的代碼分為3個區域。
代碼A區域用來定義C接口必須要實現的API。
<ignore_js_op>

?
代碼B區域用來實現A區域代碼的接口,以及要調用91SDK的iOS方法,直白點說,代碼B區域寫的方法就是用來調用代碼C區域的方法。
<ignore_js_op>

?
代碼C區域用來實現真正的91SDK的OBJ-C方法。
<ignore_js_op>

?
大家在自己的項目中:
代碼A區域作為可直接復制套用;
代碼B區域可編寫工具方法和調用iOS的方法;
代碼C區域編寫91SDK的iOS方法,你需要什么API就寫什么,寫完了在代碼B區域添加C的調用方法即可。
?
在編寫代碼中,有的人可能會問OBJ-C中有的API有回調,UNITY是如何知道OBJ-C回調結束呢?
答:OBJ-C調用UNITY的API,可以用“UnitySendMessage”的方法?,具體使用方法 看UINTY的使用幫助。
?
這樣我們完成了C接口和91SDK的API代碼,接下來我們做UINITY3D方面的代碼處理。
我們在UNITY3D項目的ASSETS下新建Code文件夾與Plugins文件夾。
<ignore_js_op>

將LsSdkConector.h 和 LsSdkConector.m 復制到 Plugins 文件夾中,并在 Code文件夾中編寫我們的UNITY調用OBJ-C 方法。
新建C#文件“LsSdkConector.cs”,這個文件中,我們將代碼分為A、B兩區。
?
代碼A區編寫C語言的接口,這里的接口方法要對應”LsSdkConector.m”中代碼區域B的方法名稱。
<ignore_js_op>

?
代碼B區編寫UNITY3D調用OBJ-C的方法,這里的代碼注意用來實現UNITY3D之間的方法調用,C#的方法內調用C的方法。
<ignore_js_op>

?
這樣,UNITY3D接入91SDK-iOS版的解決方案到此完成。
<ignore_js_op>

?
下面,我們測試一下這個解決方案是否管用。
在Code文件夾中新建 “LisiTest.cs”文件,編輯如下代碼:
<ignore_js_op>

并將該C#文件拖至Main Camera 綁定。
?
UNITY3D轉iOS項目必須要設置BundleIdentifier,截圖:
<ignore_js_op>

?
點擊“Build”按鈕創建iOS項目,打開該iOS項目,將LsSdkConector.h?和 LsSdkConector.m拖入iOS項目的Classes文件夾中
<ignore_js_op>

?
按照91SDK文檔中環境配置章節,對SDK進行引用,添加系統庫,做環境配置。
打包到iOS設備前,檢查一下iOS項目的配置,注意OBJC要寫在第1列,還有要注意大小寫。
<ignore_js_op>

<ignore_js_op>

?
選擇使用iOS設備打包,你會發現UNITY3D調用iOS 成功了!!
?
本文要告訴大家的是Unity3D與iOS交互的解決方案,代碼規范問題不是本文重點,比如91SDK的初始化在SDK文檔上推薦是在AppDelegate的文件中進行初始化。
?
附件:?<ignore_js_op>
?文中提及文件.zip?

Unity3D與Android之間的交互可以參考我的另一篇文章:《實操UNITY3D接入91SDK安卓版》
?