原位址: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檔案我們不用去改動它。保持原樣即可。
接下來我們開始在lssdkconector.m
檔案中制作c接口 和 調用91sdk的ios方法。
引入必要的頭檔案後,我把該檔案的代碼分為3個區域。
代碼a區域用來定義c接口必須要實作的api。
代碼b區域用來實作a區域代碼的接口,以及要調用91sdk的ios方法,直白點說,代碼b區域寫的方法就是用來調用代碼c區域的方法。
代碼c區域用來實作真正的91sdk的obj-c方法。
大家在自己的項目中:
代碼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檔案夾。
将lssdkconector.h 和
lssdkconector.m 複制到 plugins 檔案夾中,并在 code檔案夾中編寫我們的unity調用obj-c
方法。
建立c#檔案“lssdkconector.cs”,這個檔案中,我們将代碼分為a、b兩區。
代碼a區編寫c語言的接口,這裡的接口方法要對應”lssdkconector.m”中代碼區域b的方法名稱。
代碼b區編寫unity3d調用obj-c的方法,這裡的代碼注意用來實作unity3d之間的方法調用,c#的方法内調用c的方法。
這樣,unity3d接入91sdk-ios版的解決方案到此完成。
下面,我們一下這個解決方案是否管用。
在code檔案夾中建立
“lisitest.cs”檔案,編輯如下代碼:
并将該c#檔案拖至main camera
綁定。
unity3d轉ios項目必須要設定bundleidentifier,截圖:
點選“build”按鈕建立ios項目,打開該ios項目,将lssdkconector.h 和
lssdkconector.m拖入ios項目的classes檔案夾中
按照91sdk文檔中環境配置章節,對sdk進行引用,添加系統庫,做環境配置。
打包到ios裝置前,檢查一下ios項目的配置,注意objc要寫在第1列,還有要注意大小寫。
選擇使用ios裝置打包,你會發現unity3d調用ios 成功了!!
本文要告訴大家的是unity3d與ios互動的解決方案,代碼規範問題不是本文重點,比如91sdk的初始化在sdk文檔上推薦是在appdelegate的檔案中進行初始化。
附件: <ignore_js_op>
(2.25 kb, 下載下傳次數:
401)
unity3d與android之間的互動可以參考我的另一篇文章: