## 簡介
unity引擎雖然很強大,但是很多的時候還是需要執行平台的原生功能,這時候光靠unity是做不到的。比如ios平台上我們要從乙個應用喚起另乙個應用,在我們的遊戲中開啟乙個網頁,或者是直接嵌入乙個ios原生的介面(也就是現在接sdk的時候要做的事情)。
很多兄弟在剛接觸的時候一頭霧水,不知道從**入手。也有很多兄弟搞過一次一段時間後就忘記地一乾二淨。於是我說,入門的和忘記的人多了,就有了這個文章的誕生!希望能問新手開啟新世界的大門,讓忘記細節的老兵可以快速回憶。
## unity call ios
這裡我們來實現從unity呼叫ios中oc實現的方法。
1. 在c#檔案中,宣告乙個`extern`方法,如下:
[dllimport("__internal")]
private static extern void calliosnativefunction();
2. 新建我們在ios原生環境下執行的原始檔,如: `iosbridgeplugin.mm`,`iosbridgeplugin.h`。
3. 定義我們要呼叫的方法。
`iosbridgeplugin.h`檔案:
#import "iosbridgeplugin.h"
extern "c"
在xcode中,`.m`是c或者object-c型別的檔案,`.mm`是c++檔案,兩者在被編譯時有不同的處理。所以我這裡使用了`.mm`檔案,需要加上:
extern "c"
4. 將原始檔放在`assets/plugins/ios/`目錄下,這樣原始檔在unity打包ios工程時會自動將檔案拷貝到xcode工程中的`plugins/ios/`目錄下,並且在工程中新增正確的引用。
5. 打包,跑一跑我們剛才實現的介面。原生外掛程式的開發難度似乎就是個紙老虎。
現在我們已經可以順利地從unity呼叫ios的方法了,那麼剩下來ios原生系統支援的事情我們都能實現了,開始為所欲為吧!
### 實現「hellworldsdk」
很多時候我們要接入專案的第三個sdk都有自己的ios原生介面,我在只需要成功繪製出介面就能完成大部分的工作了。
這裡我們實現乙個自己的sdk來接入到我們的測試工程裡
1. 建立乙個介面,叫做helloworldsdkviewcontroller,繼承uiviewcontroller。
2. 介面上有簡單的標題文字,乙個矩形圖案和乙個按鈕。
3. 呼叫我們的sdk。修改我們原先的`iosbridgeplugin.m`檔案。
void calliosnativefunction()
animated:true
completion:nil]
unity生成的專案中,所有的場景都是乙個viewcontroller,要繪製我們sdk的介面,就是在unity的viewcontroller上繪製乙個新的介面。
4. 從我們的sdk返回。
關閉我們的介面也是一樣,從unity的viewcontroller上銷毀我們的介面。
`helloworldsdkviewcontroller.h`:
#ifndef helloworldsdkviewcontroller_h
#define helloworldsdkviewcontroller_h
#import
@inte***ce helloworldsdkviewcontroller : uiviewcontroller
@end
#endif
`helloworldsdkviewcontroller.m`:
#include "helloworldsdkviewcontroller.h"
@implementation helloworldsdkviewcontroller
// 用static宣告乙個類的靜態例項;
static helloworldsdkviewcontroller *_sharedinstance = nil;
//使用類方法生成這個類唯一的例項
+(helloworldsdkviewcontroller *)sharedinstance
return _sharedinstance;
}(
void
) viewdidload
-(
void
) showhelloworld
-(
void
) backtounityscene:(
id
)sender
@end
-(void) viewdidload
-(void) showhelloworld
-(void) backtounityscene:(id)sender
@end
## ios call unity
現在我們從unity呼叫ios的介面已經成功了,那麼下面我們就會想從ios是否可以呼叫我們unity中用c#實現的方法呢?答案是肯定的!
我們可以用`unitysendmessage`來實現。
?unitysendmessage(
"gameobjectname1"
,
"methodname1"
,
"message to send"
);
通過這個介面我們可以清楚的知道,我們能呼叫的介面必須是掛在gameobject上的指令碼上的某乙個方法。
讓我們來動手實現乙個方法。
1. 在c#檔案中實現我們需要呼叫的方法
?private
void
callback_iosreturnmessage(
string
message)
2. 從我們的sdk返回時,傳送訊息
[objective-c]
純文字檢視
複製**
?-(
void
) backtounityscene:(
id
)sender
3. 打包執行!
## ios 外掛程式開發的關鍵點
* oc語法!要熟練ios的開發,oc的語法還是要會一點的,至少要知道類的宣告和定義,單例物件的宣告和定義,函式的宣告和定義,函式的呼叫。
* ios的ui框架是mvc模式的,所有的介面都繼承自`uiviewcontroller`,介面上的ui元素就是`view`。
* urlschemes
* 自動化打包,能自動化的機械活當然要讓計算機自動處理!有兩種方式,乙個是大神開發的xuporter,還有是python,曾經在vuforiaarsdk中見過
* 接入sdk的本質
* `.a`檔案的庫是和xcode的版本相關的
Unity與iOS平台互動和原生外掛程式開發
unity引擎雖然很強大,但是很多的時候還是需要執行平台的原生功能,這時候光靠unity是做不到的。比如ios平台上我們要從乙個應用喚起另乙個應用,在我們的遊戲中開啟乙個網頁,或者是直接嵌入乙個ios原生的介面 也就是現在接sdk的時候要做的事情 很多兄弟在剛接觸的時候一頭霧水,不知道從 入手。也有...
iOS開發之OC和unity互動
1 unity呼叫oc oc類 testunity.h extern c testunity.m extern c unity的c 檔案 if unity ios 引入宣告 dllimport internal static extern void testunityfunction int ind...
iOS與Unity3d的互動實現
最近在公司寫的專案是基於ios與unity3d的,之前也寫了不少的ios與unity的專案,但是這次將兩者結合開發還是第一次。專案的第一條功能需求就是 實現從ios原生介面到unity的跳轉。看似簡單,但是卻不知道怎麼下手,修改unity匯出到ios的封裝好的 是肯定的,但是至於改 怎麼改卻是比較難...