Unity與iOS平台互動和原生外掛程式開發

2021-08-16 08:20:28 字數 3516 閱讀 9289

## 簡介

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#檔案中實現我們需要呼叫的方法

?privatevoidcallback_iosreturnmessage(stringmessage)

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的封裝好的 是肯定的,但是至於改 怎麼改卻是比較難...