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

2021-08-15 20:18:26 字數 3240 閱讀 1300

unity引擎雖然很強大,但是很多的時候還是需要執行平台的原生功能,這時候光靠unity是做不到的。比如ios平台上我們要從乙個應用喚起另乙個應用,在我們的遊戲中開啟乙個網頁,或者是直接嵌入乙個ios原生的介面(也就是現在接sdk的時候要做的事情)。 很多兄弟在剛接觸的時候一頭霧水,不知道從**入手。也有很多兄弟搞過一次一段時間後就忘記地一乾二淨。於是我說,入門的和忘記的人多了,就有了這個文章的誕生!希望能問新手開啟新世界的大門,讓忘記細節的老兵可以快速回憶。

這裡我們來實現從unity呼叫ios中oc實現的方法。

在c#檔案中,宣告乙個extern方法,如下:

[dllimport("__internal")]

private static extern void calliosnativefunction();

新建我們在ios原生環境下執行的原始檔,如:iosbridgeplugin.mmiosbridgeplugin.h

定義我們要呼叫的方法。

iosbridgeplugin.h檔案:

extern "c"
iosbridgeplugin.mm檔案:

#import "iosbridgeplugin.h"

void calliosnativefunction()

在xcode中,.m是c或者object-c型別的檔案,.mm是c++檔案,兩者在被編譯時有不同的處理。所以我這裡使用了.mm檔案,需要加上:

extern "c"

將原始檔放在assets/plugins/ios/目錄下,這樣原始檔在unity打包ios工程時會自動將檔案拷貝到xcode工程中的plugins/ios/目錄下,並且在工程中新增正確的引用。

打包,跑一跑我們剛才實現的介面。原生外掛程式的開發難度似乎就是個紙老虎。

現在我們已經可以順利地從unity呼叫ios的方法了,那麼剩下來ios原生系統支援的事情我們都能實現了,開始為所欲為吧!

很多時候我們要接入專案的第三個sdk都有自己的ios原生介面,我在只需要成功繪製出介面就能完成大部分的工作了。 這裡我們實現乙個自己的sdk來接入到我們的測試工程裡

建立乙個介面,叫做helloworldsdkviewcontroller,繼承uiviewcontroller。

介面上有簡單的標題文字,乙個矩形圖案和乙個按鈕。

呼叫我們的sdk。修改我們原先的iosbridgeplugin.m檔案。

void calliosnativefunction()
unity生成的專案中,所有的場景都是乙個viewcontroller,要繪製我們sdk的介面,就是在unity的viewcontroller上繪製乙個新的介面。

animated:true

completion:nil];

關閉我們的介面也是一樣,從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

現在我們從unity呼叫ios的介面已經成功了,那麼下面我們就會想從ios是否可以呼叫我們unity中用c#實現的方法呢?答案是肯定的! 我們可以用unitysendmessage來實現。

unitysendmessage("gameobjectname1", "methodname1", "message to send");
通過這個介面我們可以清楚的知道,我們能呼叫的介面必須是掛在gameobject上的指令碼上的某乙個方法。 讓我們來動手實現乙個方法。

在c#檔案中實現我們需要呼叫的方法

private void callback_iosreturnmessage(string message)

從我們的sdk返回時,傳送訊息

-(void) backtounityscene:(id)sender

打包執行!

urlschemes

自動化打包,能自動化的機械活當然要讓計算機自動處理!有兩種方式,乙個是大神開發的xuporter,還有是python,曾經在vuforiaarsdk中見過

接入sdk的本質

.a檔案的庫是和xcode的版本相關的

到此為止,秘籍結束了。總的來說,為unity開發ios原生的外掛程式在理解了實現原理後不會很難,即使忘記了很多,在看過秘籍再重新操作一遍以後也能快速的回憶起來,畢竟這些都是當年趟過的坑=。= 希望這篇秘籍可以幫助兄弟們能更好地駕馭unity,駕馭ios原生外掛程式開發。 這是工程的位址forkmeongithub

twitter

facebook

google+

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