天天看點

UNITY3D與iOS互動解決方案

原位址: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>

UNITY3D與iOS互動解決方案

lssdkconector.h檔案我們不用去改動它。保持原樣即可。

UNITY3D與iOS互動解決方案

接下來我們開始在lssdkconector.m

檔案中制作c接口 和 調用91sdk的ios方法。

引入必要的頭檔案後,我把該檔案的代碼分為3個區域。

代碼a區域用來定義c接口必須要實作的api。

UNITY3D與iOS互動解決方案

代碼b區域用來實作a區域代碼的接口,以及要調用91sdk的ios方法,直白點說,代碼b區域寫的方法就是用來調用代碼c區域的方法。

UNITY3D與iOS互動解決方案

代碼c區域用來實作真正的91sdk的obj-c方法。

UNITY3D與iOS互動解決方案

大家在自己的項目中:

代碼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檔案夾。

UNITY3D與iOS互動解決方案

将lssdkconector.h 和

lssdkconector.m 複制到 plugins 檔案夾中,并在 code檔案夾中編寫我們的unity調用obj-c

方法。

建立c#檔案“lssdkconector.cs”,這個檔案中,我們将代碼分為a、b兩區。

代碼a區編寫c語言的接口,這裡的接口方法要對應”lssdkconector.m”中代碼區域b的方法名稱。

UNITY3D與iOS互動解決方案

代碼b區編寫unity3d調用obj-c的方法,這裡的代碼注意用來實作unity3d之間的方法調用,c#的方法内調用c的方法。

UNITY3D與iOS互動解決方案

這樣,unity3d接入91sdk-ios版的解決方案到此完成。

UNITY3D與iOS互動解決方案

下面,我們一下這個解決方案是否管用。

在code檔案夾中建立

“lisitest.cs”檔案,編輯如下代碼:

UNITY3D與iOS互動解決方案

并将該c#檔案拖至main camera

綁定。

unity3d轉ios項目必須要設定bundleidentifier,截圖:

UNITY3D與iOS互動解決方案

點選“build”按鈕建立ios項目,打開該ios項目,将lssdkconector.h 和

lssdkconector.m拖入ios項目的classes檔案夾中

UNITY3D與iOS互動解決方案

按照91sdk文檔中環境配置章節,對sdk進行引用,添加系統庫,做環境配置。

打包到ios裝置前,檢查一下ios項目的配置,注意objc要寫在第1列,還有要注意大小寫。

UNITY3D與iOS互動解決方案
UNITY3D與iOS互動解決方案

選擇使用ios裝置打包,你會發現unity3d調用ios 成功了!!

本文要告訴大家的是unity3d與ios互動的解決方案,代碼規範問題不是本文重點,比如91sdk的初始化在sdk文檔上推薦是在appdelegate的檔案中進行初始化。

附件: <ignore_js_op>

UNITY3D與iOS互動解決方案

  (2.25 kb, 下載下傳次數:

401)

unity3d與android之間的互動可以參考我的另一篇文章: