unity引擎雖然很強大,但是很多的時候還是需要執行平台的原生功能,這時候光靠unity是做不到的。比如ios平台上我們要從乙個應用喚起另乙個應用,在我們的遊戲中開啟乙個網頁,或者是直接嵌入乙個ios原生的介面(也就是現在接sdk的時候要做的事情)。 很多兄弟在剛接觸的時候一頭霧水,不知道從**入手。也有很多兄弟搞過一次一段時間後就忘記地一乾二淨。於是我說,入門的和忘記的人多了,就有了這個文章的誕生!希望能問新手開啟新世界的大門,讓忘記細節的老兵可以快速回憶。
這裡我們來實現從unity呼叫ios中oc實現的方法。
在c#檔案中,宣告乙個extern
方法,如下:
[dllimport("__internal")]
private static extern void calliosnativefunction();
新建我們在ios原生環境下執行的原始檔,如:iosbridgeplugin.mm
,iosbridgeplugin.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
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的封裝好的 是肯定的,但是至於改 怎麼改卻是比較難...